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

📄 i2c(2).c

📁 C语言开发的单片机PS2检测程序
💻 C
字号:
ORG  ××××       ;程序开始地址。
 SCL  EQU P1.1    ;选择P1.1作时钟线。
 SDA  EQU P1.0    ;选择P1.0作数据线。
  功能:WRITE是写入程序。将R1指示的R7个片内字节写入AT24C02中,写入首址由R0指示。
 WRITE:ACALL STAR    ;发出起始信号。
     MOV A,#0A0H   ;发出写命令。
     ACALL OUTB
     JC WBE      ;无回答,结束操作。
     MOV A,R0    ;发出E2PROM首址。
     ACALL OUTB
     JC WBE      ;无回答,结束操作。
 WR1: MOV A,@R1    ;取一字节内容。
     ACALL OUTB    ;写入E2PROM中。
     JC WBE      ;无回答,结束操作。
     INC R1      ;指向下一字节。
     DJNZ R7,WR1   ;写完全部字节。
 WBE: AJMP STOP    ;发出结束信号。
  功能:READ是读出程序。将R1指示的R7个E2PROM字节读入片内RAM中,首址由R0指示。
 READ: ACALL STAR    ;发出起始信号。
     MOV A,#0A0H   ;发出写命令。
     ACALL OUTB
     JC RDE      ;无回答,结束操作。
     MOV A,R1    ;发出E2PROM首址。
     ACALL OUTB
     JC RDE      ;无回答,结束操作。
     ACALL STOP    ;发出结束信号。
     NOP       ;延时。
     NOP
     ACALL STAR    ;再次发出起始信号。
     MOV A,#0A1H   ;发出读命令。
     ACALL OUTB
     JC RDE      ;无回答,结束操作。
 RD1: MOV B,#08H   ;每移出8位组成一字节。
 RD2: CLR SCL     ;移出一个时钟脉冲。
     NOP
     SETB SCL     ;时钟脉冲上升沿。
     NOP
     MOV C,SDA    ;读入一位。
     RLC A         ;拼装到累加器中。
     NOP
     DJNZ B,RD2   ;拼完一字节。
     MOV @R0,A    ;存入片内。
     INC R0      ;指向下一地址。
     CLR SCL     ;时钟脉冲下降沿。
     CJNE R7,#1,RD3 ;是最后一个字节吗?
     SETB SDA     ;最后一个字节不给回答信号。
     SJMP RD4
 RD3: CLR SDA     ;准备好回答信号。
 RD4: NOP
     SETB SCL     ;时钟脉冲上升沿。
     NOP       ;等待E2PROM读取回答信号
     NOP
     CLR SCL     ;回答完毕。
     SETB SDA     ;准备读入下一字节。
     DJNZ R7,RD1   ;读完全部字节。
     CLR C
 RDE: AJMP STOP    ;发出结束信号。
  功能:OUTB是向E2PROM发出一字节信息的子程序。
 OUTB: MOV B,#08H   ;一字节8位。
 OUT1: CLR SCL     ;将时钟线拉低。
     RLC A      ;移出一位。
     MOV SDA,C    ;放到数据线上。
     SETB SCL     ;将时钟线升高。
     NOP       ;等待一位信息送入E2PROM中。
     DJNZ B,OUT1   ;发送完8位。
     CLR SCL     ;将时钟线拉低。
     SETB SDA     ;准备接收回答信号。
     SETB SCL     ;将时钟线升高。
     NOPMOV C,SDA  ;接收回答信号。
     CLR SCL     ;将时钟线拉低。
     RET
  功能:STAR是起始信号。
 STAR: SETB SDA     ;将数据线升高。
     SETB SCL     ;将时钟线升高。
     NOP       ;延时。
     CLR SDA     ;将数据线拉低,发出起始信号。
     NOP       ;延时。
     CLR SCL     ;将时钟线拉低。
     RET
  功能:STOP是结束信号。
 STOP: CLR SCL        ;将时钟线拉低。
     CLR SDA     ;将数据线拉低。
     NOP
     SETB SCL     ;将时钟线升高。
     NOP
     SETB SDA     ;将数据线升高,发出结束信号。
     RET
     END

⌨️ 快捷键说明

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