PIC16F887 I2C通讯请教

2019-03-25 18:50发布

刚学单片机不久,最近有一个项目是用触摸板进行控制。
1、触摸板与主板之间是通过I2C进行通讯(触摸板芯片为从机);
2、目前想法是用PIC16F887单片机模拟触摸板;
3、现在有写了一个单片机(主机)与触摸板通讯的程序(如下所示),发送数据完毕后SDA还有个高电平(NG无应答.jpg图片),不知道怎么消除,所以想请教下各位前辈们。
4、附件中OK.jpg图片为实际产品与触摸板通讯波形。
程序如下:
#include <pic.h>
//__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<n;j++)
for(k=246;k>0;k--)
NOP();
}

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
Wangyuhua
1楼-- · 2019-03-27 03:37
he282942873 发表于 2017-3-21 08:27
谢谢指点,另外拉高我指的是图片标示出来的部分,按道理应该是一直为低电平直到结束。

感觉是应答出了问题, 具体原因就不知道了
13430885511
2楼-- · 2019-03-27 09:10
谢谢,楼主提供的场地。如果需要PIC原装正品的单片机或者可以替代的单片机可以联系我(不需要修改PCB资料,程序可以共用),电话13430885511(微信同号)颜生

一周热门 更多>