我程序用protues仿真出来后,P1口显示的是0x81,请问是什么原因!
我的程序如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar f;
sbit sda=P2^6;
sbit scl=P2^7;
void delayus()//五微秒
{;;}
void delayms(uint z)//一毫秒
{
uint x,y;
for(y=z;y>0;y--)
for(x=110;x>0;x--);
}
void init()//初始化
{
scl=1;
delayus();
sda=1;
delayus();
}
void start()//开始信号
{
scl=1;
delayus();
sda=1;
delayus();
sda=0;
delayus();
}
void stop()//停止信号
{
scl=1;
delayus();
sda=0;
delayus();
sda=1;
delayus();
}
void response()//应答信号
{
uchar a;
scl=1;
while((sda==1)&&(a<250))a++;
scl=0;
delayus();
}
void write_byte(uchar dat)//写一个字节
{
uchar b,c;
scl=0;
delayus();
sda=1;
for(b=0;b<8;b++)
{
c=dat&(0x80<<1);
delayus();
sda=c;
delayus();
scl=1;
delayus();
scl=0;
delayus();
}
scl=0;
delayus();
sda=1;
}
uchar read_byte()//读一个字节
{
uchar d,e;
scl=0;//数据可以变化
delayus();
sda=1;
delayus();
for(d=0;d<8;d++)
{
scl=1;//数据稳定的时候可以进行对数据的操作,但是不可以改变数据状态
delayus();
e=sda|(0x01<<d);
delayus();
scl=0;//来个脉冲把数据发送出去(低电平时数据可变)
delayus();
}
return e;
delayus();
}
/*
void write_24c02(uchar address,uchar dat)
{
start();
write_byte(0xa0);
response();
write_byte(address);
response();
write_byte(dat);
response();
stop();
}
uchar read_24c02(uchar address)
{
start();
write_byte(0xa0);
response();
write_byte(address);
response();
start();
write_byte(0xa1);
response();
f=read_byte();
stop();
return f;
}
*/
void main()
{
while(1)
{
init();
start();
write_byte(0xa0);//器件地址
response();
write_byte(3);//芯片存储的地址
response();
write_byte(0xf0);//存放的数据
response();
stop();
delayms(1000);//读写之间延时1S
start();
write_byte(0xa0);
response();
write_byte(3);
response();
start();
write_byte(0xa1);//改为读方式
response();
f=read_byte();
P1=f;//把读出来的数据赋给P1口
stop();
/*
write_24c02(3,0xf0);
delayms(10);
P1=read_24c02(3);
*/
}
}
不胜感激...........