;写器件地址
MOV A,COMMAND
;根据命令及识别字散转
SWAP A
ANL A,#0FH
CJNE A,#09H,XRW1
;指令的高4位为09H表示R_WCR
AJMP R_WCR
XRW1: CJNE A,#0AH,XRW2
;指令的高4位为0AH表示W_WCR
AJMP W_WCR
XRW2: CJNE A,#0BH,XRW3
;指令的高4位为0BH表示R_ROM(读寄存器)
AJMP R_ROM
XRW3: CJNE A,#0CH,XRW4
;指令的高4位为0CH表示W_ROM(写寄存器)
AJMP W_ROM
XRW4: CJNE A,#0DH,XRW5
;指令的高4位为0DH表示将寄存器中的值传送到WCR
AJMP ROM_WCR
XRW5: CJNE A,#0EH,XRW6
;指令的高4位为0EH表示将WCR中的值传送到寄存器
AJMP WCR_ROM
XRW6: CJNE A,#01H,XRW7
;指令的高4位为01H表示全局寄存器中值传送到WCR
AJMP A_ROM_WCR
XRW7: CJNE A,#08H,XRW8
;指令的高4位为08H表示全局WCR中值传送到寄存器
AJMP A_WCR_ROM
XRW8: CJNE A,#02H,XRW9
;指令的高4位为02H表示指定的WCR增/减
AJMP INC_DEC
XRW9: ACALL STOP_IC
;命令执行完毕,STOP并返回
RETI
R_WCR: MOV A,COMMAND
;读WCR子程序
ACALL WR_BYTE
ACALL RD_BYTE
MOV RD_DATA,A
ACALL ACK_IC
AJMP XRW9
W_WCR: MOV A,COMMAND
;写WCR子程序
ACALL WR_BYTE
MOV A,WR_DATA
ACALL WR_BYTE
AJMP XRW9
R_ROM: MOV A,COMMAND
;读寄存器子程序
ACALL WR_BYTE
ACALL RD_BYTE
MOV RD_DATA,A
ACALL ACK_IC
AJMP XRW9
W_ROM: MOV A,COMMAND
;写寄存器子程序
ACALL WR_BYTE
MOV A,WR_DATA
ACALL WR_BYTE
AJMP XRW9
ROM_WCR: MOV A,COMMAND
;寄存器中数据送WCR子程序
ACALL WR_BYTE
AJMP XRW9
WCR_ROM: MOV A,COMMAND
;WCR中数据送寄存器子程序
CALL WR_BYTE
AJMP XRW9
A_ROM_WCR: MOV A,COMMAND
;全局寄存器中数据送WCR子程序
ACALL WR_BYTE
AJMP XRW9
A_WCR_ROM: MOV A,COMMAND
;全局WCR中数据送寄存器子程序
ACALL WR_BYTE
AJMP XRW9
INC_DEC: MOV R7,#63
MOV A,COMMAND
;指定的WCR增/减子程序
ACALL WR_BYTE
JB INCDEC,WCRINC
CLR SDA
SETB SCL
JMP IDC
WCRINC: CLR SCL
SETB SDA
IDC: CLR SCL
SETB SCL
DJNZ R7,IDC
AJMP XRW9
START_IC:SETB SDA
;开始子程序
SETB SCL
CLR SDA
CLR SCL
RET
WR_BYTE:MOV B,#08
;写字节子程序,共写8位
WR_BYTE1:CLR SCL
RLC A
;向左移位至CY
MOV SDA,C
;数据输出
SETB SCL
DJNZ B,WR_BYTE1
CLR SCL
SETB SDA
SETB SCL
JB SDA,$
;检测X9241E的应答
CLR SCL
RET
RD_BYTE: MOV B,#08
;读字节子程序,共读8位
RD_BYTE1: SETB SCL
MOV C,SDA
RLC A
CLR SCL
DJNZ B,RD_BYTE1
RET
STOP_IC: CLR SDA
;停止子程序
SETB SCL
SETB SDA
CLR SCL
CLR SDA
RET
ACK_IC: CLR SDA
;应答子程序
SETB SCL
CLR SCL
RET
1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.

