📄 i2c.asm
字号:
CPU "8051.TBL"
INCL "8051.INC"
ADDH: EQU 30H
ADDL: EQU 31H
DATA: EQU 32H
ORG 0H
JMP MAIN
ORG 0023H
JMP RECV_CMD
ORG 0030H
MAIN:
MOV SP,#60H
LCALL INIT_RS232
SETB EA
SETB ES
CLR 20H.1
MOV R1,#00H
MOV DPTR,#0000H
AG:
MOV ADDH,DPH
MOV ADDL,DPL
JNB 20H.1,$
CLR 20H.1
CALL READ
MOV SBUF,DATA
JNB TI,$
CLR TI
INC DPTR
JMP AG
;-----------------------------------------------------------------------------------------------
;INIT SERIAL PORT
;-----------------------------------------------------------------------------------------------
INIT_RS232:
MOV SCON, #50h
MOV TMOD, #21h
MOV PCON, #80h
MOV TH1,#255
MOV TL1,#255
SETB TR1
RET
;----------------------------------------------------------------------------------------------
;RECEIVE FROM RS232
;----------------------------------------------------------------------------------------------
RECV_CMD:
JBC RI,WR
RETI
WR:
SETB 20H.1
MOV R1,SBUF
CALL WRITE
RETI
WRITE:
MOV A,#10100000B
CALL OUTS
MOV A,ADDH
LCALL OUT
MOV A,ADDL
LCALL OUT
MOV A,R1
CALL OUT
CALL STOP
RET
;-------------------------------------------------------------------------
READ:
MOV A,#10100000B
CALL OUTS
MOV A,ADDH
LCALL OUT
MOV A,ADDL
LCALL OUT
MOV A,#10100001B
LCALL OUTS
LCALL IN
MOV DATA,A
LCALL STOP
RET
;=========================================================
OUTS:
MOV B,#8
SETB P1.1
SETB P1.0
NOP
CLR P1.1
NOP
CLR P1.0
OSLOOP:
RLC A
MOV P1.1,C
SETB P1.0
NOP
CLR P1.0
DJNZ B,OSLOOP
SETB P1.1
NOP
SETB P1.0
NOP
CLR P1.0
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
OUT:
MOV B,#8
OLOOP:
RLC A
MOV P1.1,C
SETB P1.0
NOP
CLR P1.0
DJNZ B,OLOOP
SETB P1.1
NOP
SETB P1.0
NOP
CLR P1.0
RET
;-----------------------------------------------------------
IN:
MOV B,#8
SETB P1.1
INLOOP:
CLR P1.0
NOP
SETB P1.0
MOV C,P1.1
RLC A
DJNZ B,INLOOP
CLR P1.0
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
STOP:
CLR P1.1
NOP
SETB P1.0
NOP
SETB P1.1
LCALL DLAYms
RET
;--------------------------------------------------------
DLAYms:
MOV R6,#3
MOV B,#00
MS1: DJNZ B,$ ;((2*255)+(2*255)*150
DJNZ B,$ ;=153 MILLI SECONDS
DJNZ R6,MS1
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -