PIC16F887模拟I2C通讯实现自动控制
1、控制板触摸的,控制板与主板之间是I2C通讯;
2、用单片机取代触摸板;
3、电脑串口同单片机通讯实现自动控制;
4、还想写一段单片机(从机)与触摸板通讯代码。
我之前自己写了一段代码但没模拟成功,现在手上刚好又有其它项目没时间弄(我自己是主要做labview上位机程序,平常用用单片机也是配合labview控制,对一些高级点用法也不太懂。),哪位大大能帮忙做下,如必要可以酬谢,可以提供下硬件用于调试。
最近有自己在摸索写下程序,但还有些小问题如下图所示,在数据发送完后后SDA会出现一个高电平,不知道怎么去消除(NG无应答(局面).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();
}
刚忘了上传图片,补充如下。
谢谢,小编提供的场地。
MICROCHIP 原装正品,另有可替换单片机(无需修改PCB资料,程序可共用PIC的) 有用到的兄弟多多支持! 电话13430885511(微信同号),QQ2355910801