⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c程序.txt

📁 里面是一个最近做的I2C的通信程序
💻 TXT
字号:
*****************定义数据寄存器******************
SDA      BIT   P3.0
SCL      BIT   P3.1
ACK      BIT   10H             ;应答标志位
SLA      DATA  50H             ;器件地址字
SUBA     DATA  51H		;SUBA器件子地址
*********************主程序开始******************
        ORG   00H
        AJMP STAR
START:  SETB SDAK
         NOP
         SETB SCLK
         NOP
         NOP
         NOP
         NOP
         CLR SDAK
         NOP
         NOP
         NOP
         NOP
         NOP
         CLR SCLK
         NOP
         RET
STOP:    CLR SDA
          NOP
          NOP
         SETB SCL
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
         SETB SDA
         NOP
         NOP
         NOP
         NOP
         CLR SCLK
         NOP
         NOP
         RET
TACK:    SETB SDA	;检查应大位子程序
         NOP
         NOP
         NOP
         SETB SCL
	 CLR ACK
         NOP
         NOP
	 MOV C,SDA
	 JC  CEND
	 SETB ACK	;判断应答位
CEND:    NOP
	 CLR  SCL
	 NOP
         RET
NOTACK: SETB SDA
         NOP
	 NOP
	 NOP
	 NOP
	 SETB SCL
	 NOP
	 NOP
	 NOP
	 NOP
	 NOP
	 CLR SCL
	 NOP
	 NOP
 	 RET
WRBYT:   MOV R7, #08H
WRBYT1:  RLC A
         JC WRBYT2
   	 CLR SDA
	 SETB SCL	;发送0
	 NOP
	 NOP
   	 NOP
	 NOP
	 CLR SCL
	 DJNZ R7, WRBYT1
	 RET
WRBYT2:  SETB SDA	;发送1
	 NOP
	 NOP
	 SETB SCL
	 NOP
	 NOP
	 NOP
	 NOP
	 CLR SCL
	 CLR SDA
	 DJNZ R7, WRBYT1
	 RET
RDBYT:	 MOV R7, #08H
RDBYT1:  SETB SDA
	 NOP
	 SETB SCL
	 NOP
	 NOP
	 MOV C, SDA
 	 MOV A, R6
	 NOP
         NOP
	 CLR SCL
	 RLC A
	 MOV R6, A
	 NOP
	 NOP
	 DJNZ R7, RDBYT1
	 RET
;*************************主函数*******************************
STAR:	 ACALL DLY5M
	 ACALL DLY5M
	 ACALL DLY5M
	 MOV B, P2
	 ACALL WR2416	;向2401C中写数据
	 ACALL DLY5M
	 ACALL DLY5M
	 ACALL DLY5M
ST1:	 ACALL RD2416	;从2401C中读数据
	 MOV  A, R6
	 MOV P1, A
         ACALL DLY5M
	 ACALL DLY5M
	 ACALL DLY5M
	 SJMP ST1
RD2416:	 MOV SLA,#0A0H
	 MOV SUBA,#30H
	 ACALL START
	 MOV   A,SLA
	 ACALL WRBYT
	 ACALL TACK
	 JNB   ACK,RETWRN
	 MOV A,SUBA
	 ACALL WRBYT
	 ACALL TACK
	 ACALL START	;重新启动总线
	 MOV SLA,#0A1H
	 ACALL WRBYT
	 ACALL TACK
	 JNB   ACK,RD2416
	 ACALL RDBYT
	 ACALL NOTACK
	 ACALL STOP
	 ACALL DLY5M
	 RET
WR2416:  MOV SLA,#0A0H
	 MOV SUBA,#30H
	 ACALL START
	 MOV A, SLA
	 ACALL WRBYT
	 ACALL TACK
	 JNB   ACK,RETWRN	;无应答则退出
	 MOV A,SUBA
	 ACALL WRBYT
	 ACALL TACK
	 MOV A, B
	 ACALL WRBYT		;写入数据
	 ACALL TACK
	 JNB   ACK,RETWRN
	 ACALL DLY5M
 	 ACALL DLY5M
	 ACALL DLY5M
	 ACALL DLY5M
	 RET
RETWRN: ACALL STOP
	 RET
DLY1S:     MOV R5, #20
D1:	   MOV R4, #100
D2:	   MOV R3, #250
	   DJNZ R3, $
           DJNZ R4, D2
	   DJNZ R5, D1
           RET
DLY5M:     MOV R4, #10
DLY5M1:	   MOV R3, #248
	   DJNZ R3, $
	   DJNZ R4, DLY5M1
	   RET
END



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -