微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 结合单片机用汇编实现I2CBUS总线协议

结合单片机用汇编实现I2CBUS总线协议

时间:02-16 来源:互联网 点击:

始、停止、读、写、应答的程序。

  (1)启始位程序:

  ACK:CLR P1.3

  NOP

  NOP

  SETB P1.2

  NOP

  NOP

  NOP

  CPL P1.3 ;P1.3=1

  NOP

  NOP

  NOP

  DENGDAI:JB P1.2,DENGDAI RET

  (2)读数据程序:

  读字节可以在当前地址读(CURRENT READ),可以随机读(RANDOM READ),读出数据的最后一个字节后不用加应答信号。

  READ:PUSH 0EH

  CLR P1.4

  LCALL BSTART;START

  MOV A,#0A0H;SEND

  THE CONTROL BYTE

  LCALL SENDBYTE

  LCALL ACK

  MOV A,R1;SEND THE ADDRESS

  LCALL SENDBYTE

  LCALL ACK

  LCALL BSTART;START

  MOV A,#0A1H;SEND THE CONTROL BYTE

  LCALL SENDBYTE

  LCALL ACK

  LCALL READBYTE

  LCALL BSTOP

  POP 0EH

  RET

  送字节子程序:

  SENDBYTE:PUSH 0EH

  PUSH 00H

  MOV R0,#08H

  LOOP1:CLR P1.3

  NOP

  NOP

  RLC A

  MOV P1.2,C

  CPL P1.3; P1.3=1

  NOP

  NOP

  DJNZ R0,LOOP1

  POP 00H

  POP 0EH

  RET

  读字节子程序:

  READBYTE:PUSH 0EH

  PUSH 00H

  MOV R0,#08H;

  READ THE CONTENT

  CLR A

  LOOP4:CLR P1.3

  NOP

  NOP

  NOP

  SETB P1.3;P1.3=1

  MOV C,P1.2

  RLC A

  DJNZ R0,LOOP4

  MOV R2,A

  POP 00H

  POP 0EH

  RET

  (3)写数据程序:

  WRITE:PUSH 0EH

  CLR P1.4

  LCALL BSTART

  MOV A,#0A0H

  LCALL SENDBYTE;

  SEND CONTROL BYTE

  LCALL ACK

  MOV A,R1;SEND THE ADDRESS

  LCALL SENDBYTE

  CLALL ACK

  MOV A,R2;WERITE THE CONTENT

  LCALL SENDBYTE

  LCALL ACK

  LCALL BSTOP

  POP 0EH

  RET

  连续写的两个字节之间最好是要有10ms的延时。当然,也可以进行页写(PAGE WTITE),一次性连续写8个字节,每个字节后要一个应答信号。

  (4)停止位程序:

  BSTOP:CL的P1.3

  NOP

  NOP

  CLR P1.2

  NOP

  NOP

  NOP

  SETB P1.3

  NOP

  NOP

  NOP

  SETB P1.2

  RET

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top