#include
#define uchar unsigned char
#define uint unsigned int
sbit a=P2^2; //138编码器
sbit b=P2^3; //138编码器
sbit c=P2^4; //138编码器
sbit scl=P2^1;
sbit sda=P2^0;
bit write=0;
uchar num1,num;
uchar code d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay()
{ ;;}
void start()
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop()
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
unsigned char writebyte (unsigned char dat)
{
unsigned char a=0,b=0;//最大255,一个机器周期为1us,最大延时255us。
for(a=0;a<8;a++)//要发送8位,从最高位开始
{
sda=dat>>7; //起始信号之后SCL=0,所以可以直接改变SDA信号
dat=dat<<1;
delay();
scl=1;
delay();//建立时间>4.7us
scl=0;
delay();//时间大于4us
}
sda=1;
delay();
scl=1;
while(sda)//等待应答,也就是等待从设备把SDA拉低
{
b++;
if(b>200) //如果超过2000us没有应答发送失败,或者为非应答,表示接收结束
{
scl=0;
delay();
return 0;
}
}
scl=0;
delay();
return 1;
}
uchar readbyte()
{
uchar i,k;
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1)|sda;
delay();
scl=0;
delay();
}
return k;
}
void write_byte(uchar address,uchar date)
{
start();
writebyte(0xa0);
writebyte(address);
writebyte(date);
stop();
}
uchar read_byte(uchar address)
{
uchar date;
start();
writebyte(0xa0);
writebyte(address);
start();
writebyte(0xa1);
date=readbyte();
stop();
return date;
}
void display(uchar shi,uchar ge)
{
a=0;
b=0;
c=0;
P0=d[ge]; // 将数据送到P0口的数码管
P0=0;
a=1;
b=0;
c=0;
P0=d[shi];
P0=0;
}
void ahead()
{
sda=1;
delay();
scl=1;
delay();
}
void main()
{
ahead();
num=read_byte(2);
if(num>100)
num=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65336-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
display(num/10,num%10);
if(write==1)
{
write=0;
write_byte(2,num);
}
}
}
void t0()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65336-50000)%256;
num1++;
if(num1==20)
{
num1=0;
write=1;
num++;
if(num==100)
num=0;
}
}
无法进行掉电后数据的保护
共2条
1/1 1 跳转至页
单片机中模拟I2C总线来控制E2pROM芯片进行掉电保护?
关键词: 模拟 总线 E2pROM 掉电 保护
2楼
上面的代码读取,写入功能可以实现了?先要确定IIC通信部分没问题了,再走下一步。。
而且这么看也不好判断是不是代码问题,,但是我发现你那个num变量中断里又动过。。
能不能先写入固定的值比如128,再读取看看读到的是不是128?如果可以了,再在别的地方用这个代码来进行掉电保护什么的。。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |