求教16f1823 I2C问题

2020-02-08 09:06发布

我参考的16f877a 写的16f1823 IIC程序,但是不出结果,在proteus仿真的时候要出现错误,请问在对16f1823iic读写时候要怎么配置寄存器?下面是我的proteus仿真的样子和那个让我不知道怎么办的程序,请大家指点!!谢谢
#include<pic.h>
__CONFIG(0X3B31);
#define uchar unsigned char
#define uint unsigned int
#define addr 0xaa
const uchar data[4]={0b11100001,0b11010010,0b10110100,0b01111000};
uchar read_data[4];
void delay(uchar x)
{
        char i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}
void init()
{
        TRISC=0x03;
        PORTC=0x00;
        SSP1CON1=0X38;
        SSP1CON2=0;
        SSP1CON3=0X60;;
        SSP1STAT=0X80;
        SSP1MSK=0;
        SSP1ADD=9;
       
}
void write()
{
        SSP1IF=0;
        SEN=1;
        while(!SSP1IF);
                SSP1IF=0;
        SSP1BUF=0XA0;
        while(!SSP1IF);
                SSP1IF=0;
        SSP1BUF=addr;
        while(!SSP1IF);
                SSP1IF=0;

                SSP1BUF=0b00111100;
                while(!SSP1IF);
                        SSP1IF=0;

        PEN=1;
        while(!SSP1IF);
                SSP1IF=0;
}
void read()
{


        SSP1IF=0;
        SEN=1;     
        while(!SSP1IF);
                SSP1IF=0;
        SSP1BUF=0XA0;
        while(!SSP1IF);
                SSP1IF=0;
        SSP1BUF=addr;
        while(!SSP1IF);
                SSP1IF=0;
                RSEN=1;
        while(!SSP1IF);
                SSP1IF=0;
        SSP1BUF=0XA1;
        while(!SSP1IF);
                SSP1IF=0;

                RCEN=1;
                  while(!SSP1IF);   

                read_data[0]=SSP1BUF;
                while(!SSP1IF);
                        SSP1IF=0;

                        ACKDT=1;

                ACKEN=1;
                while(!SSP1IF);
                        SSP1IF=0;

        PEN=1;
        while(!SSP1IF);
                SSP1IF=0;
}
void disp()
{
        uint i=0;
        for(i=0;i<4;i++)
        {
                PORTC=read_data[i];
                delay(100);
        }
}
void main()
{
        init();

        write();

        delay(100);
        read();       


        while(1)
        {
                PORTC=read_data[0];//disp();
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
surf_131
1楼-- · 2020-02-08 11:44
 精彩回答 2  元偷偷看……
xuzc
2楼-- · 2020-02-08 12:57
surf_131 发表于 2012-7-26 21:50
iic拿个仿真软件玩,有什么意义?

查我前些日子贴的iic程序吧。不过好像是pic18的?再早的帖子贴过iic接口 ...

你好,我只是想看下这个程序能不能写进数据去。。现在数据是写进去了。问题是一直重复写数据?这大概是什么原因呢?能给分析下吗?
surf_131
3楼-- · 2020-02-08 15:02
这种仿真的东西,完全不懂。
millwood0
4楼-- · 2020-02-08 17:19
__CONFIG(0X3B31);


may god help you.
xuzc
5楼-- · 2020-02-08 17:39
millwood0 发表于 2012-7-27 05:19
may god help you.

看门狗的问题?我去看下配置字。。谢谢!
xuzc
6楼-- · 2020-02-08 22:07
 精彩回答 2  元偷偷看……

一周热门 更多>