完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
pic16877a 硬件I2C写AT24C512时,发送起始信号,然后发送器件寻址,但24C512没有返回应答位,不知道是怎么回事?
上面黄色的波形是SCL,下面蓝色的是SDA,在SCL第九个波形时,SDA应该被24C512拉低为低电平,但现在没有拉低的 |
|
相关推荐
|
|
#include __CONFIG(0x3b31); /************************************************* 函数功能:延时1MS 4MHz 函数输入: n 1MS延时的整数倍 函数返回: *************************************************/ void delay_1ms(unsigned int n) { unsigned int j; unsigned char i; for(j=0;j NOP(); } /************************************************* 函数功能:延时微秒 函数输入: 函数返回: *************************************************/ void delay_us(void) { NOP(); NOP(); } /************************************************* 函数功能:初始化 函数输入: 函数返回: *************************************************/ void init(void) { TRISC =0b00011000; //SCL,SDA设置为输入 SSPCON =0b00101000; //设置I2C主模式 SSPCON2 =0b00000000; //波特率=Fosc/(4*(SSPADD+1))=>SSPADD+1=(Fosc/Band Rate)/4 SSPADD =0x09; //当主频为4MHz时波特率为100kbps CKE=0; //使用I2C协议规范电平 SMP=1; //关闭斜率控制 // SSPIF=0; //入使用SSPIF作为信号发送状态位则需要清空此位 // BCLIF=0; //清空总线冲突标志位 } /************************************************* 函数功能:主机发送起始信号 函数输入: 函数返回: *************************************************/ void I2C_Start(void) { SEN=1; //SEN置1使硬件发送起始信号 //发送完毕后硬件自动把SEN清零 while(SEN) //SEN=1说明正在发送中 ; //循环结束说明SEN=0,即起始信号发送完毕 } /************************************************* 函数功能:主机发送重新起动信号 函数输入: 函数返回: *************************************************/ void I2C_RptStart(void) { RSEN=1; //RSEN置1使硬件发送重启信号 while(RSEN) //RSEN=1说明正在发送中 ; //循环结束说明RSEN=0,即重启信号发送完毕 } /************************************************* 函数功能:主机发送停止信号 函数输入: 函数返回: *************************************************/ void I2C_Stop(void) { PEN=1; //PEN置1使硬件发送停止信号 while(PEN) //PEN=1说明正在发送中 ; //循环结束说明PEN=0,即停止信号发送完毕 } /************************************************* 函数功能:主机发送一位数据 函数输入: cData 待发送的数据 函数返回: *************************************************/ void I2C_Write_Byte(unsigned char cData) { SSPBUF =cData; // while(RW==1); //主动模式下,判断发送是否完成 while(SSPIF==0); while(ACKSTAT==1); //等待从机发送应答信号 } /************************************************* 函数功能:主机向AT24C512写一个字节 函数输入: dat dat 待发送的数据 函数返回: *************************************************/ void I2C_Write_AT24C512_Byte(unsigned char dat) { I2C_Start(); delay_us(); I2C_Write_Byte(0XA0); //向AT24C512发送写命令 I2C_Write_Byte(0x00); //向AT24C512发送待写入数据的地址 I2C_Write_Byte(0x00); //必须先发高8位地址,再发低8位地址 I2C_Write_Byte(dat); //对地址写入数据 I2C_Stop(); //发送停止位 delay_1ms(10); } void main(void) { TRISB=0X00; PORTB =0x00; init(); delay_1ms(100); I2C_Write_AT24C512_Byte(0xaa); } |
|
|
|
|
|
请问下PIC单片机做从机的例程有没有,现在卡在这里了
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2097 浏览 1 评论
3650 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2348 浏览 2 评论
2775 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4062 浏览 5 评论
1004浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6388浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 02:34 , Processed in 0.587068 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号