这个24C02的程序错误太多了能不能帮忙看一下.
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit ASDA=P1^0;
sbit ACLK=P1^1;
sbit kd_key=P1^2;
sbit LEDP=P1^7;
sbit SDA=P3^4;
sbit SCL=P3^5;
extern void Read24c02(unsigned char *RamAddress,
unsigned char RomAddress,unsigned char bytes);
extern void Write24c02(unsigned char *RamAddress,
unsigned char RomAddress,unsigned char bytes);
/****************************************************************/
#define WriteDeviceAddress 0xa0
#define ReadDviceAddress 0xa1
uchar i,k,second=0,minute=0;
uint time;
uchar data display_bit ,display_buffer[4];
uchar code led[10]=
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void send(uchar a);
void delay(uint n);
void display(void);
void start(void);
void stop(void);
void ACK(void);
void NOACK(void);
void TESTACK(void);
bit Write8Bit(unsigned char input);
unsigned char Read8Bit();
void delay(uint n)
{
unsigned char i,j;
for(i=0;i <n;i++)
{
for(j=0;j <250;j++);
}
}
void send(uchar a)
{
uchar k;
for (k=0;k <8;k++)
{
if(_crol_(a,k)&0x80)
ASDA=1;
else
ASDA=0;
ACLK=1;
ACLK=0;
}
}
void display()
{
display_bit=0xbf;
// uchar i,k;
for(i=0;i <4;i++)
{
P1=0XFF;
k=led[display_buffer[i]];
send(k);
delay(1);
P1=display_bit;
display_bit=_cror_(display_bit,1);
}
}
void time0(void)interrupt 1 using 1
{
TH0=-9216/256;
TL0=-9216%256;
if(++time==100)
{
++second;
time=0;
}
if(second==60)
{
++minute;
second=0;
}
if(minute==59)
{
minute=0;
}
//*******************************************************************
/********************/
void Start() {
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
/*********************/
void Stop() {
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
/**********************/
void Ack() {
SDA=0;
SCL=1;
SCL=0;
SDA=1;
}
/***********************/
void NoAck() {
SDA=1;
SCL=1;
SCL=0;
}
//************************//
/*************************************/
bit TestAck() {
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
/*************************************/
bit Write8Bit(unsigned char input) {
unsigned char temp;
for(temp=8;temp!=0;temp--) {
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input < <1;
}
}
//******************************************
/****************************************/
void Write24c02(unsigned char *Wdata,unsigned char RomAddress,
unsigned char number) {
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(RomAddress);
TestAck();
for(;number!=0;number--) {
Write8Bit(*Wdata);
TestAck();
Wdata++;
}
Stop();
delay(10);
}
//****************************************
//***************************************************/
unsigned char Read8Bit() {
unsigned char temp,rbyte=0;
for(temp=8;temp!=0;temp--) {
SCL=1;
rbyte=rbyte < <1;
rbyte=rbyte|((unsigned char)(SDA));
SCL=0;
}
return(rbyte);
}
//************************************************
void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,
unsigned char bytes) {
unsigned char temp,rbyte;
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(RomAddress);
TestAck();
Start();
Write8Bit(ReadDviceAddress);
TestAck();
while(bytes!=1) {
*RamAddress=Read8Bit();
Ack();
RamAddress++;
bytes--;
}
*RamAddress=Read8Bit();
NoAck();
Stop();
}
//**************************************************
void main()
{
TH0=-9216/256;
TL0=-9216%256;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
while(1) {
display_buffer[0]=minute/10;
display_buffer[1]=minute%10;
display_buffer[2]=second/10;
display_buffer[3]=second%10;
Write24c02(0x00,0xa0,second);
Write24c02(0x01,0xa0,minute);
Read24c02(0x00,0xa1,second);
Read24c02(0x00,0xa1,minute);
display();
}
}
发表时间:2004年3月24日22:11:43