单片机学习小组
直播中

周静

7年用户 594经验值
私信 关注

C语言编写程序关闭电源或者是按下reset键后,储存器没有清零是为什么?

C语言编写程序关闭电源或者是按下reset键后,储存器没有清零是为什么?

回帖(1)

张健

2022-1-18 11:56:44
实验现象:C语言编写程序,在51开发版上出现00-99秒,时间变换。关闭电源或者是按下reset键后,储存器没有清零,而是从刚刚结束的地方继续开始计数。
但是我按书上编写后,下载到单片机里,后断电没有发现继续从上一个节点开始,而是从头开始。


仔细研究后发现。原来是函数write_add(uchar address, uchar date) read_add(uchar address)实参选取问题
下面看原代码:


void main()
{
        init();
        sec = read_add(1);
        if(sec>100)
        {sec = 0;}
        TMOD = 0x01;
        ET0 = 1;
        EA = 1;
        TH0 = (65536-50000)/256;
        TL0 = (65536-50000)%256;
        TR0 = 1;
        while (1)
        {
                display(sec/10, sec%10);
                if(write==1)
                {
                        write = 0;
                        write_add(1,sec);
                }
        }
}


注意到,函数write_add(uchar address, uchar date) read_add(uchar address)实参是 “1”。此时函数的作用是在写入之前或是开始读操作之前,选择一个字节的存储器单元字地址,而地址的选取为16进制,显然此时的实参不符合要求
改为***“0x01”***即可


下面看改进后的代码


void main()
{
        init();
        sec = read_add(0x01);
        if(sec>100)
        {sec = 0;}
        TMOD = 0x01;
        ET0 = 1;
        EA = 1;
        TH0 = (65536-50000)/256;
        TL0 = (65536-50000)%256;
        TR0 = 1;
        while (1)
        {
                display(sec/10, sec%10);
                if(write==1)
                {
                        write = 0;
                        **write_add(0x01,sec);**
                }
        }
}


现在就可已实现该有功能
举报

更多回帖

发帖
×
20
完善资料,
赚取积分