全球旧事资料 分类
i
cludereg51h
defi
eucharu
sig
edchar
defi
eui
tu
sig
edi
t
defi
ewrite_ADD0xa0
defi
eread_ADD0xa1
uchara
sbitSDAP20
sbitSCLP21
voidSomeNop
短延时
voidi
it初始化
voidcheck_ACKvoid;
voidI2CStartvoid
voidI2cStopvoid
voidwrite_byteuchardat写字节
voiddelayui
tz
ucharread_byte
读字节
voidwriteucharaddruchardat指定地址写
ucharreaducharaddr
指定地址读
bitflag应答标志位
voidmai


i
it
write_add50xaa向地址5写入0xaa
delay10
延时否则被坑呀!!!
P1read_add5
读取地址5的值
while1

voiddelay简单延时函数voidstart开始信号SCL在高电平期间,SDA一个下降沿则表示启动信号
sda1释放SDA总线delayscl1delaysda0delay
fvoidstop停止SCL在高电平期间,SDA一个上升沿则表示停止信号
sda0delayscl1delaysda1delayvoidrespo
s应答SCL在高电平期间,SDA被从设备拉为低电平表示应答uchariscl1delay至多等待250个CPU时钟周期whilesda1i250iscl0delayvoidi
it总线初始化将总线都拉高一释放总线发送启动信号前,要先初始化总线。即总有检测到总线空闲才开始发送启动信号sda1delayscl1delayvoidwrite_byteuchardate写一个字节ucharitemptempdate
fori0i8i
ftemptemp1scl0拉低SCL,因为只有在时钟信号为低电平期间按数据线上的高低电平状态才允许变化;并在此时和上一个循环的scl1一起形成一个上升沿delaysdaCYdelayscl1拉高SCL,此时SDA上的数据稳定delayscl0拉低SCL,为下次数据传输做好准备delaysda1释放SDA总线,接下来由从设备控制,比如从设备接收完数据后,在SCL为高时,拉低SDA作为应答信号delayucharread_byte读一个字节ucharikscl0delaysda1delayfori0i8iscl1上升沿时,IIC设备将数据放在sda线上,并在高电平期间数据已经稳定,可以接收啦delaykk1sdascl0拉低SCL,使发送端可以把数据放在SDA上delayretur
kr
好听全球资料 返回顶部