求教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();
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。