📄 24c16.txt
字号:
#include <reg51.h>
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define HIGH 1
#define LOW 0
sbit SCL =P1^6;
sbit SDA =P1^7;
sbit led =P1^4;
void delay(uint x)
{
uint i;
for(i=0;i<x;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
delay1ms(uint t)
{
uint i,j;
for( i=0;i<t;i++)
for( j=0;j<120;j++)
;
}
void I_start(void) //起始条件
{
SDA=HIGH;
SCL=HIGH;
delay(1);
SDA=LOW;
delay(1);
}
void I_stop(void) //停止条件
{
SDA=LOW;
SCL=HIGH;
delay(1);
SDA=HIGH;
delay(1);
}
void Ack(void) //应答位
{
SDA=LOW;
delay(1);
SCL=HIGH;
delay(1);
SCL=LOW;
}
void NoAck(void) //反向应答位
{
SDA=HIGH;
delay(1);
SCL=HIGH;
delay(1);
SCL=LOW;
}
void I_send(uchar Data) //发送数据子程序,Data为要求发送的数据
{
uchar BitCounter=8; //位数控制
uchar temp; //中间变量控制
do
{
temp=Data;
SCL=LOW;
delay(1);
if((temp&0x80)==0x80) //如果最高位是1
SDA=HIGH;
else
SDA=LOW;
SCL=HIGH;
temp=Data<<1;
Data=temp;
BitCounter--;
}while(BitCounter);
SCL=LOW;
}
uchar Read(void) //读一个字节的数据,并返回该字节值
{
uchar temp=0,temp1=0;
uchar BitCounter=8;
SDA=HIGH;
do
{
SCL=LOW;
delay(1);
SCL=HIGH;
delay(1);
if(SDA) //如果SDA=1
temp=temp|0x01; //temp的最低位置1
else
temp=temp&0xfe; //否则temp的最低位清0
if(BitCounter-1)
{ temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}while(BitCounter);
return(temp);
}
void WrToROM(uchar Data[],uchar Address,uchar Num)
{
uchar i=0;
uchar * PData;
PData=Data;
I_start();
I_send(0xa0);
Ack();
I_send(Address);
Ack();
for(i=0;i<Num;i++)
{
I_send(*(PData+i));
Ack();
}
I_stop();
}
void RdFromROM(uchar Data[],uchar Address,uchar Num)
{
uchar i=0;
uchar * PData;
PData=Data;
for(i=0;i<Num;i++)
{
I_start();
I_send(0xa0);
Ack();
I_send(Address+i);
Ack();
I_start();
I_send(0xa1);
Ack();
*(PData+i)=Read();
SCL=LOW;
NoAck();
I_stop();
}
}
void main()
{
uchar code ROMDat[4]={0xe2,0xe2,0x10,0xef};
uchar code ROMDat1[4];
WrToROM(ROMDat,0x0000,4);
RdFromROM(ROMDat1,0x8000,4);
for(;;)
{
{if(ROMDat1[0]==0xe2){led=0;delay1ms(1000);}
else {led=1;delay1ms(1000);}
}
{if(ROMDat1[1]==0xe2){led=1;delay1ms(1000);}
else{led=0;delay1ms(1000);}
}
{if(ROMDat1[2]==0x10){led=0;delay1ms(1000);}
else {led=1;delay1ms(1000);}
}
{if(ROMDat1[3]==0xef){led=1;delay1ms(1000);}
else{led=0;delay1ms(1000);}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -