初学单片机求大神指点迷津。我按照教程抄了个EEPROM的读写程序,对EEPROM写入一个字节后挂起SDA=1,然后置SCL=0等待SDA响应(即SDA会变为0).
可是我用Keil4做单步运行,发现SDA=1后SDA就一直为1, SCL=0后SDA也还是为0. 这究竟是怎么回事? 难道用Keil4调试是没有响应的吗?一定要烧录到开发板后才有反应?
- /*******************************************************************************
- * 函数名 : I2cSendByte(unsigned char dat)
- * 函数功能 : 通过I2C发送一个字节。在SCL时钟信号高电平期间,保持发送信号SDA保持稳定
- * 输入 : num
- * 输出 : 0或1。发送成功返回1,发送失败返回0
- * 备注 : 发送完一个字节SCL=0,SDA=1
- *******************************************************************************/
- unsigned char I2cSendByte(unsigned char dat)
- {
- unsigned char a=0,b=0;//最大255,一个机器周期为1us,最大延时255us。
- for(a=0;a<8;a++)//要发送8位,从最高位开始
- {
- SDA=dat>>7; //起始信号之后SCL=0,所以可以直接改变SDA信号
- dat=dat<<1;
- Delay10us();
- SCL=1;
- Delay10us();//建立时间>4.7us
- SCL=0;
- Delay10us();//时间大于4us
- }
- SDA=1;
- Delay10us();
- SCL=1;
- while(SDA)//等待应答,也就是等待从设备把SDA拉低
- {
- b++;
- if(b>200) //如果超过2000us没有应答发送失败,或者为非应答,表示接收结束
- {
- SCL=0;
- Delay10us();
- return 0;
- }
- }
- SCL=0;
- Delay10us();
- return 1;
- }
复制代码
|