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
|