完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
3个回答
|
|
最近有自己在摸索写下程序,但还有些小问题如下图所示,在数据发送完后后SDA会出现一个高电平,不知道怎么去消除(NG无应答(局面).jpg),程序如下,请高手帮忙抓抓虫子。
#include //__CONFIG(0x20f2); //__CONFIG(0x3fff); #define _XTAL_FREQ 16000000 void DELAY(unsigned int); void IIC_SEND(char); void IIC_Init(void); char READ_EEPROM(char); //unsigned char read(char); void main(void) { char i,j,R1; char addr; addr=0x0d; IIC_Init(); DELAY(10); while(1) { READ_EEPROM(addr); DELAY(100); } } void IIC_SEND(char R) { SSPBUF=R; while(SSPIF==0); while(ACKSTAT==1); } char READ_EEPROM(char addr) { char R; SEN=1; while(SEN==1); IIC_SEND(addr); /*RSEN=1; while(RSEN==1); IIC_SEND(0xc1);*/ SSPIF=0; RCEN=1; while(SSPIF==0); R=SSPBUF; PEN=1; while(PEN==1); return(R); } void IIC_Init(void) { TRISC=0xff; SSPCON=0x28; //初始化SSPCON寄存器 00101000 //SSPM=1000,I2C主模式 SSPCON2=0X00; //初始化SSPCON2寄存器 //SSPADD = 0x09; // 当主频为16Mhz时波特率为400kbps,I2C波特率=Fosc/(4*(SSPADD+1)),SSPADD=[(Fosc/(BandRate*4)]-1 SSPADD = 0x39; // 当主频为16Mhz时波特率为100kbps,I2C波特率=Fosc/(4*(SSPADD+1)),SSPADD=[(Fosc/(BandRate*4)]-1 SSPSTAT=0X80; //初始化SSPSTAT寄存器 SSPIF=0; WCOL=0; // 写冲突检测位清零,若发送数据不正确请检查此位 SMP=1; CKP=1; CKE=0; // 使用I2C协议规范电平 关闭斜率控制 SSPEN=1; //使能I2C模块*/ } void DELAY(unsigned int n) { unsigned int j; char k; for(j=0;j NOP(); } |
|
|
|
刚忘了上传图片,补充如下。
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2076 浏览 1 评论
3484 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2329 浏览 2 评论
2754 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4011 浏览 5 评论
956浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6342浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 19:20 , Processed in 0.504181 second(s), Total 53, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号