这是我参照16f877a写的16f1823 iic主模式程序。在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();
}
} |