2019-07-15 18:09发布
qq12516 发表于 2014-11-15 23:20 51还是stm32或者其他ARM的单片机?
菜鸟学单片机 发表于 2014-11-20 09:46 说白了关键就两个信号,数据给定后,然后时钟上升沿读数据。
最多设置5个标签!
51的单片机 谢谢
unsigned char ReadData()
// 从AT24Cxx移入数据到MCU
{
unsigned char i;
unsigned char x; //储存从AT24Cxx中读出的数据
for(i = 0; i < 8; i++)
{
SCL = 1; //SCL置为高电平
x<<=1; //将x中的各二进位向左移一位
x|=(unsigned char)SDA; //将SDA上的数据通过按位“或“运算存入x中
SCL = 0; //在SCL的下降沿读出数据
}
return(x); //将读取的数据返回
}
上面这个子程序的x|=(unsigned char)SDA;这一句没理解,把SDA强制转换成无符号类型后和X做按位或运算之后X的值是多少?是几位的数?而且SDA只有高电平和低电平两个数据啊!
bit WriteCurrent(unsigned char y)
{
unsigned char i;
bit ack_bit; //储存应答位
for(i = 0; i < 8; i++) // 循环移入8个位
{
SDA = (bit)(y&0x80); //通过按位“与”运算将最高位数据送到S
//因为传送时高位在前,低位在后
_nop_(); //等待一个机器周期
SCL = 1; //在SCL的上升沿将数据写入AT24Cxx
_nop_(); //等待一个机器周期
_nop_(); //等待一个机器周期
SCL = 0; //将SCL重新置为低电平,以在SCL线形成传送数据所需的8个脉冲
y <<= 1; //将y中的各二进位向左移一位
}
上面这个子函数SDA = (bit)(y&0x80); 的这一句,通过bit强制转换后,SDA的值应该是多少?是几位的一个数据?
还有bit WriteCurrent(unsigned char y) 为什么用bit来定义这个函数,效果是什么?
一周热门 更多>