TM57PR40IIC启动条件和停止条件代码理解

代码:


```css
;;*******************I2C 启动条件*********************;是一个时间段
I2C_START:
	BSF PBD,I2C_SDA    ;set  PB.7位为1
	BCF PBD,I2C_SCL 	;set   PB.6位为0
	NOP					;一个指令的周期,如果频率改变就需要增加相应的NOP指令
	NOP
	NOP
	;该开始的时候,SDA和SCL都是的高电平
	BSF PBD,I2C_SDA       ;拉高电平SDA
	NOP
	NOP
	NOP
	NOP
	NOP
	BSF PBD,I2C_SCL       ;拉高电平SCL
	NOP
	NOP
	NOP
	NOP
	NOP					
	BCF PBD,I2C_SDA			;连续几个高电平之后,然后I2C_SDA拉低数据总线之后,开始传输
	NOP
	NOP
	NOP
	NOP
	NOP
	BCF PBD,I2C_SCL     ;因为SCL的上升沿来检测SDA的电平高低,因此最后需要将的SCL电平拉低,才可以实现的电平检测
	RET

;;********************I2C 停止条件*********************
I2C_STOP:
;结束的时候的SCL是高电平,SDA拉高表示结束信号
	BCF PBD,I2C_SDA         ;首先拉低SDA,持续若5个周期后,
	NOP
	NOP
	NOP
	NOP
	NOP
	BSF PBD,I2C_SCL     ;拉高电平SCL5个周期      ;在SCL高电平的时候 进行拉高SDA,并不表示数据 
	NOP
	NOP
	NOP
	NOP
	NOP
	BSF PBD,I2C_SDA     ;在在SCL高电平的时候,进行拉高SDA,并不表示数据,而是表示的数据停止
	NOP
	NOP
	NOP
	NOP
	NOP
	BCF PBD,I2C_SCL                  ;拉低SCL线???(我认为应该可以忽略)
	RET                          ;子程序返回指令
说明:
GPB的引脚6和7分别设置为SCL和SDA线,要想传输数据就需要我们通过的软件改变的,这两个线电平的高低来进行数据的传输。由IIc通信的基本知识我们知道,IIC传输分为的起始位、通信位以及结束位。现在我们主要讲一下我对该程序(起始位和结束位)理解。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191030142340736.jpg)
1、起始位:
首先SDA和SCL线初始应**为高电平**,因此刚开始应该分别拉高SDA和SCL的电平。首先拉高SDA有以下两种情况:
(我的理解)SCL是低电平,拉高SDA(上升沿的时候),表示的实际上是一个的1的数据的传输,但是还未检测到开始信号,因此可以判定不是的有效数据。然后拉高SCL线,经过5个周期之后,程序拉低了SDA表示一个开始位。因为数据的触发应该是在SCL为低电平的时候,检测SDA变化(上升沿或者下降沿),上升沿表示的1,下降沿表示0。

2、结束位:
数据的结束的时候应该是**SCL是高电平**,SDA从低电平上拉为高电平:
首相拉低SDA电平,然后的拉高SCL电平,在SCL为高电平时候,拉低或拉高的SDA不表示数据,因此在SCL为高电平的时拉高SDA表示的数据的结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值