SEL EQU P3.0
UI EQU P3.1
SCL EQU P3.2
SDA EQU P3.3
SCU EQU p3.4
SDU EQU P3.5
BUFFAD EQU 40H;存放接收的数据块的首地址,
;请注意,数据块的首地址应为要接受的
;数据块长度.
ORG 0000H
AJMP MAIN
ORG 0040H
MAIN: MOV SP,#60H
MOV P1,#0FFH
MOV 50H,#4
MOV 51H,#3
MOV 52H,#2
MOV 53H,#1
ACALL DISPLAY
ACALL DELAY1
MOV P1,#0FFH
MOV R1,#50
KK: ACALL DELAY
DJNZ R1,KK
;首先确定数据
;的传输方式I2C格式
SETB SEL
SETB UI
;工作程序开始
;开始工作命令
JS: ACALL START
;发送数据头#0ACH
MOV 30H,#1
MOV 31H,#0ACH
MOV R0,#30H
ACALL SEND
;发送"工作开始"指令
MOV 30H,#1
MOV 31H,#80H
MOV R0,#30H
ACALL SEND
发送STOP指令
ACALL WAITSTOP
CJNE A,#3,XK
CLR P1.0
AJMP $
;ACALL STOP
XK: ;发送开始接收命令开始接收
ACALL START
MOV 30H,#1
MOV 31H,#0ADH
MOV R0,#30H
ACALL SEND
;AJMP LK
MOV BUFFAD,#1
ACALL RECE
;发送STOP命令
OKD: ACALL RECE
ACALL STOP
MOV A,40H
MOV B,#0
XRL B,A
MOV A,B
CJNE A,41H,WRONGB
AJMP PASB
WRONGB:CLR P1.0
AJMP $
PASB:
MOV P1,40H
MOV A,40H
MOV B,#100
DIV AB
MOV 53H,A
MOV A,B
MOV B,#10
DIV AB
MOV 52H,A
MOV 51H,B
ACALL DISPLAY
MOV R2,#250
KXD: ACALL DELAY
ACALL DELAY
ACALL DELAY
DJNZ R2,KXD
MOV P1,#0FFH
ACALL DELAY1
;;;;;;;;;;;;;;;;;;!!!!!!!!!!!!!!!!!
JSX: ACALL START
;发送数据头#0ACH
MOV 30H,#1
MOV 31H,#0ACH
MOV R0,#30H
ACALL SEND
;发送"工作开始"指令
MOV 30H,#1
MOV 31H,#30h
MOV R0,#30H
ACALL SEND
MOV 30H,#1
MOV 31H,#01h
MOV R0,#30H
ACALL SEND
MOV 30H,#1
MOV 31H,#01h
MOV R0,#30H
ACALL SEND
MOV 30H,#1
MOV 31H,#06h
MOV R0,#30H
ACALL SEND
MOV 30H,#1
MOV 31H,#06h
MOV R0,#30H
ACALL SEND
MOV 30H,#1
MOV 31H,#06h
MOV R0,#30H
ACALL SEND
MOV 30H,#1
MOV 31H,#06h
MOV R0,#30H
ACALL SEND
MOV 30H,#1
MOV 31H,#06h
MOV R0,#30H
ACALL SEND
MOV 30H,#1
MOV 31H,#06h
MOV R0,#30H
ACALL SEND
MOV 30H,#1
MOV 31H,#06h
MOV R0,#30H
ACALL SEND
MOV 30H,#1
MOV 31H,#06h
MOV R0,#30H
ACALL SEND
XKX: ;发送开始接收命令开始接收
ACALL START
MOV 30H,#1
MOV 31H,#0ADH
MOV R0,#30H
ACALL SEND
LK: MOV BUFFAD,#1
ACALL RECE
MOV A,40H
MOV B,#10
DIV AB
MOV 51H,A
MOV 50H,B
;发送STOP命令
ACALL RECE
;ACALL RECE
ACALL WAITSTOP
MOV A,40H
MOV B,#0
XRL B,A
MOV A,41H
CJNE A,42H,WRONB
AJMP PASBX
WRONB: MOV P1,#0FFH
CLR P1.0
;CLR P1.1
MOV A,40H
MOV B,#100
DIV AB
;MOV 53H,A
MOV B,#100
DIV AB
;MOV 53H,A
MOV A,B
MOV B,#10
DIV AB
MOV 53H,A
MOV 52H,B
MOV A,42H
MOV B,#100
DIV AB
MOV A,B
MOV B,#10
DIV AB
;MOV 51H,A
;MOV 50H,B
ACALL DISPLAY
AJMP JSX
PASBX: MOV P1,#0FFH
CLR P1.1
;CLR P1.2
MOV A,40H
MOV B,#100
DIV AB
;MOV 53H,A
MOV A,B
MOV B,#10
DIV AB
MOV 55H,A
MOV 54H,B
MOV A,41H
MOV B,#100
DIV AB
;MOV 53H,A
MOV A,B
MOV B,#10
DIV AB
MOV 53H,A
MOV 52H,B
MOV A,42H
MOV B,#100
DIV AB
;MOV 53H,A
MOV A,B
MOV B,#10
DIV AB
;MOV 51H,A
;MOV 50H,B
ACALL DISPLAY
SSD: MOV R2,#250
KXDX: ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
DJNZ R2,KXDX
AJMP JSX
SEND: ;MOV R0,#ADDD
MOV A,@R0
INC R0
MOV R2,A
CARDSENDACK0: MOV A,@R0;$$$$$$$$$$$$$$$$$$$
MOV R1,#8
CARDSENDACK1: RLC A
MOV SDA,C
LCALL DELAY
SETB SCL
LCALL DELAY
CLR SCL
LCALL DELAY
DJNZ R1,CARDSENDACK1;$$$$$$$$$$发送一个8位的数据
SETB SDA ;%%%%%%%%%%
;LCALL DELAY
SETB SCL ;%%%%%%%%%% 发送ACK信号
;LCALL DELAY
MOV C,SDA ;&&&&&&&&&
LCALL DELAY
CLR SCL
LCALL DELAY
JC CARDSENDACK2 ;&&&&&&&&&&检测ACK信号
INC R0
DJNZ R2,CARDSENDACK0
CARDSENDACK2: RET
START:
LCALL DELAY
CLR SCL
LCALL DELAY
SETB SDA
LCALL DELAY
SETB SCL
LCALL DELAY
LCALL DELAY
CLR SDA
LCALL DELAY
CLR SCL
LCALL DELAY
RET
STOP: CLR SCL
LCALL DELAY
CLR SDA
LCALL DELAY
SETB SCL
LCALL DELAY
LCALL DELAY
SETB SDA
LCALL DELAY
RET
WAITSTOP: CLR SCL
LCALL DELAY
CLR SDA
LCALL DELAY
SETB SCL
LCALL DELAY
LCALL DELAY
SETB SDA
;LCALL DELAY
;CLR SCL
;LCALL DELAY
;CLR SDA
;LCALL DELAY
;LCALL DELAY
MOV R7,#50
WAITE5550OP0:
MOV R6,#00H
WAITE5550OP1:
SETB SDA
ACALL DELAY
JB SDA,WAITE5550OP2
JNB SDA,$ ;ADD TIMEOUT OPTIONS HERE
MOV A,#01H ;顺利停止
RET
WAITE5550OP2:
DJNZ R6,WAITE5550OP1
DJNZ R7,WAITE5550OP0
MOV A,#03H;停止出错
RET
RECE: MOV R0,#BUFFAD;接收数据块的首地址
MOV A,@R0
;MOV PACKL,A;要接收的数据块的长度,即字节数.
;MOV PACKD,#BUFFAD
MOV R2,A
CARDRECEACK0: CLR SCL
LCALL DELAY
SETB SDA
MOV A,#0FFH;;;;;;;;;移位初始值,数据0
MOV R1,#8 ;数据的位数
CARDRECEACK1: SETB SCL
MOV C,SDA
RLC A
LCALL DELAY
CLR SCL
LCALL DELAY
DJNZ R1,CARDRECEACK1
CLR SDA
LCALL DELAY
SETB SCL
LCALL DELAY
CLR SCL
LCALL DELAY
SETB SDA
LCALL DELAY
MOV @R0,A
INC R0
DJNZ R2,CARDRECEACK0
RET
DELAY: MOV R5,#8
DJNZ R5,$
RET
DISPLAY:
MOV R2,#6
MOV R0,#50H
XK2: MOV A,@R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
CPL A
TCONTU: MOV R3,#8
TSTA: JNB ACC.0,ST0
ST1: SETB P3.5
CLR P3.4
SETB P3.4
LJMP TCONT
ST0: CLR P3.5
CLR P3.4
SETB P3.4
TCONT: RR A
DJNZ R3,TSTA
INC R0
DJNZ R2,XK2
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H, 83H, 0C6H, 0A1H,86H, 8EH, 8CH,0FFH,0C1H
DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
DB 06H
DELAY1: MOV R5,#0FFH
DEL0: MOV R6,#0EBH
DEL1: MOV R7,#10
DJNZ R7,$
DJNZ R6,DEL1
DJNZ R5,DEL0
RET
联系客服