BITCNT DATA 2AH ; IIC数据位计数器 BYTECNT DATA 2BH ; IIC数据字节数器 SLVADR DATA 2CH ; 被控器地址 SUBADR DATA 2DH ; 被控器单元地址 XMTDAT DATA 50H ; 发送数据缓冲区 RCVDAT DATA 40H ; 接收数据缓冲区 SDA BIT P1.7 ; 摸拟IIC数据传送位 SCL BIT P1.6 ; 摸拟IIC时钟控制壮态标志 ACK BIT 21H.3 ; 接收数据非应答标志 INITIALIZE: MOV 50H, #00100000B ;8025初始化 MOV 51H, #00100000B MOV SLVADR, #64H MOV SUBADR, #0E0H MOV BYTECNT,#2 LCALL SENDDATA MOV 50H,#00000000B MOV SLVADR, #64H MOV SUBADR,#70H MOV BYTECNT,#1 LCALL SENDDATA MOV 50H,#00000000B MOV SLVADR, #64H MOV SUBADR,#50H MOV BYTECNT,#1 LCALL SENDDATA RET RCV8025: MOV SLVADR, #64H ;接收8025的CLOCK,CALENDAR MOV SUBADR, #00H MOV BYTECNT,#7 LCALL RCVDATA MOV A,40H ANL A, #7FH MOV 40H, A ANL A,#0FH MOV 30H,A MOV A,40H ANL A,#0F0H RR A RR A RR A RR A MOV 31H,A MOV A, 41H ANL A, #7FH MOV 41H, A ANL A,#0FH MOV 32H,A MOV A,41H ANL A,#0F0H RR A RR A RR A RR A MOV 33H,A MOV A, 42H ANL A,#3FH MOV 42H,A ANL A,#0FH MOV 34H,A MOV A,42H ANL A,#0F0H RR A RR A RR A RR A MOV 35H,A MOV A,43H ANL A, #07H MOV 43H,A ANL A,#0FH MOV 36H,A MOV A,44H ANL A,#3FH MOV 44H,A ANL A,#0FH MOV 37H,A MOV A,44H ANL A,#0F0H RR A RR A RR A RR A MOV 38H,A MOV A,45H ANL A,#1FH MOV 45H,A ANL A,#0FH MOV 39H,A MOV A,45H ANL A,#0F0H RR A RR A RR A RR A MOV 3AH,A MOV A,46H ANL A,#0FH MOV 3BH,A MOV A,46H ANL A,#0F0H RR A RR A RR A RR A MOV 3CH,A RET SEND8025: ACALL LOAD8025 ;发送CLOCK(00:00:00),CALENDAR(00:01:01),WEEKLY(0) MOV SLVADR, #64H MOV SUBADR, #00H MOV BYTECNT, #7 LCALL SENDDATA RET LOAD8025: MOV 50H, #00H MOV 51H, #00H MOV 52H, #00H MOV 53H, #00H MOV 54H, #01H MOV 55H, #01H MOV 56H, #00H RET SENDDATA: LCALL START ;发送数据子程序 MOV A, SLVADR LCALL SENTBYTE JB F0, SENDDATA MOV A, SUBADR LCALL SENTBYTE JB F0, SENDDATA MOV R0, #XMTDAT SENTNEXT: MOV A,@R0 LCALL SENTBYTE JB F0, SENDDATA INC R0 DJNZ BYTECNT, SENTNEXT LCALL STOP LCALL DELAY10 RET RCVDATA: LCALL START ;接受数据子程序 MOV A, SLVADR LCALL SENTBYTE JB F0, RCVDATA MOV A, SUBADR LCALL SENTBYTE JB F0, RCVDATA LCALL START MOV A, SLVADR SETB ACC.0 LCALL SENTBYTE JB F0, RCVDATA CLR ACK MOV R0, #RCVDAT DJNZ BYTECNT, RCVNEXT SJMP RCVLAST RCVNEXT: LCALL RCVBYTE MOV @R0,A INC R0 DJNZ BYTECNT,RCVNEXT RCVLAST: SETB ACK LCALL RCVBYTE MOV @R0,A LCALL STOP RET START: SETB SDA ;START子程序 NOP SETB SCL NOP NOP NOP NOP NOP CLR SDA NOP NOP NOP NOP NOP CLR SCL RET STOP: CLR SDA ;STOP 子程序 NOP SETB SCL NOP NOP NOP NOP NOP SETB SDA NOP NOP NOP NOP RET SENTBYTE: MOV BITCNT, #08H ;发送1字节子程序 SENTB: RLC A JC SENT1 CLR SDA SJMP SENT SENT1: SETB SDA NOP SENT: NOP SETB SCL NOP NOP NOP NOP NOP CLR SCL DJNZ BITCNT, SENTB NOP NOP SETB SDA NOP NOP SETB SCL NOP NOP CLR F0 JNB SDA, ACKEND SETB F0 ACKEND: NOP CLR SCL RET RCVBYTE: SETB SDA ;接受1字节子程序 MOV BITCNT, #08H RCV: NOP CLR SCL NOP NOP NOP NOP NOP SETB SCL NOP NOP CLR C JNB SDA, RCV0 SETB C RCV0: RLC A NOP NOP DJNZ BITCNT, RCV CLR SCL NOP NOP NOP CLR SDA JNB ACK, SENTACKB SETB SDA SENTACKB: NOP NOP SETB SCL NOP NOP NOP NOP NOP CLR SCL CLR ACK RET
文章评论(0条评论)
登录后参与讨论