PIC单片机william hill官网
直播中

he282942873

10年用户 101经验值
擅长:电源/新能源 测量仪表
私信 关注
[问答]

PIC16F887模拟I2C通讯实现自动控制

手上有个简单的项目想要实现自动控制:
1、控制板触摸的,控制板与主板之间是I2C通讯;
2、用单片机取代触摸板;
3、电脑串口同单片机通讯实现自动控制;
4、还想写一段单片机(从机)与触摸板通讯代码。
我之前自己写了一段代码但没模拟成功,现在手上刚好又有其它项目没时间弄(我自己是主要做labview上位机程序,平常用用单片机也是配合labview控制,对一些高级点用法也不太懂。),哪位大大能帮忙做下,如必要可以酬谢,可以提供下硬件用于调试。
  • KEY1.jpg

回帖(3)

he282942873

2017-3-20 14:56:54
最近有自己在摸索写下程序,但还有些小问题如下图所示,在数据发送完后后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         for(k=246;k>0;k--)
        NOP();
}
举报

he282942873

2017-3-20 14:57:45
刚忘了上传图片,补充如下。
举报
  • NG无应答(局部).jpg
  • NG无应答.jpg
  • OK.jpg
  • 有应答NG.jpg

颜生

2017-8-24 14:09:53
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

更多回帖

发帖
×
20
完善资料,
赚取积分