单片机1302编程问题 读取数据求大神解释
发布网友
发布时间:2023-07-12 21:38
我来回答
共3个回答
热心网友
时间:2024-11-10 22:01
for(i=8;i>0;i--)
{
DS1302_IO=1; // 数据线SDA挂高,准备接受数据
ucdat=ucdat>>1; //准备放数的空间左移准备,D7现在移入一个0
if(DS1302_IO) ucdat=ucdat|0x80;
//如果SDA上现在是1,因为总线被DS1302改变了,D7就是1。如果是0,刚才左移进入的0就是。
DS1302_CLK=1; //这下面三行就是SCK的操作了。
_nop_();
DS1302_CLK=0;
}
楼主要明白,但单片机挂高是把总线释放了。现在从机是可以改变总线数值的。不要老把单片机当主角,I2C上的从机有时是要说话的,SDA挂高就是给DS1302说话的机会。
热心网友
时间:2024-11-10 22:02
if语句中DS1302_IO不一定始终是1,该项脚作为输入脚必须先置1,所以前面有一句DS1302_IO=1,
置1只是为了正确输入,如果此时DS1302输出为0,则将DS1302_IO拉低,就变成0了,注意看看51单片机书上关于引脚特性的描述。追问那置一后的io输出是1302控制得么?
热心网友
时间:2024-11-10 22:02
DS1302_IO是DS1302的一个输入输出端口,它与单片机的一个IO口相接,如果读1302的话,必须先把此IO口置高,也就是 DS1302_IO=1;当1302输出低时,此端口的电位会被拉成低,那ucdat就不会是你说的始终是11111111了。