我参考的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();
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
配置字寄存器有两个,但是写的时候往往只写一个CONFIG,这与你的头文件中定义的方式有关,建议查看下头文件怎么定义的
好的,谢谢
一周热门 更多>