找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1493|回复: 6
收起左侧

52单片机重新上电后不执行while(1)语句

[复制链接]
ID:664691 发表于 2019-12-15 23:11 | 显示全部楼层 |阅读模式
52单片机重新上电后不执行while(1)语句 (重新上电8个数码管只显示:85-62-32) 而重新烧录程式会显示 00-00-00   
按道理重新上电显示 00-00-00   才是正确的啊
void main()
{
                        InitTIMER0(); //定时器0初始化

                         a_tmpdisplay[0]= 2;  //数据的转换,因我们采用数码管1~9的显示,将数据分开
                         a_tmpdisplay[1]= 3;
                        a_tmpdisplay[2]= 10;
                        a_tmpdisplay[3]= 2;
                        a_tmpdisplay[4]= 6;          
                        a_tmpdisplay[5]= 10;
                        a_tmpdisplay[6]= 5;
                        a_tmpdisplay[7]= 8;                          //初始化不能放在while 语句里,如放在while语句里数码管会不显示          
        while(1)
        {
               
                        if(ReadRTC_Flag)
                {
                        ReadRTC_Flag = 0 ;
                        tiaoshi();       
                        a_tmpdisplay[0]= miao%10;  //数据的转换,因我们采用数码管1~9的显示,将数据分开
                        a_tmpdisplay[1]= miao/10;
                        a_tmpdisplay[2]= 10;
                        a_tmpdisplay[3]= fen%10;
                        a_tmpdisplay[4]= fen/10;          
                        a_tmpdisplay[5]= 10;
                        a_tmpdisplay[6]= shi%10;
                        a_tmpdisplay[7]= shi/10;
                                                                  
                        if(shan==1)
                        {
                                shanshuo();
                                if(mie==1)
                                {
                                //        if(xuan>3) xuan=1;       
                                   switch(xuan)
                                   {
                                                case 1: a_tmpdisplay[7]=11,a_tmpdisplay[6]=11;break;
                                                case 2:        a_tmpdisplay[4]=11,a_tmpdisplay[3]=11;break;
                                                case 3:        a_tmpdisplay[1]=11,a_tmpdisplay[0]=11;break;
               
                                        }
                                                     
                                  }
                        }                                 
                }  
        }                       
}

void tim(void) interrupt 1 using 1   //中断,用于数码管扫描
{
        static unsigned char i,num;
        TH0=0xf5;
        TL0=0xe0;
        P0=smgduan[a_tmpdisplay[i]]; //查表法得到要显示数字的数码段
        switch(i)
                        {
                                case(0):
                                                LC = 0; LB = 0; LA = 0; break;
                                case(1):
                                                LC = 0; LB = 0; LA = 1; break;
                                case(2):
                                                LC = 0; LB = 1; LA = 0; break;
                                case(3):
                                                LC = 0; LB = 1; LA = 1; break;
                                case(4):                       
                                                LC = 1; LB = 0; LA = 0; break;
                                case(5):                       
                                                LC = 1; LB = 0; LA = 1; break;
                                case(6):                 
                                                LC = 1; LB = 1; LA = 0; break;
                                case(7):                 
                                                LC = 1; LB = 1; LA = 1; break;       
                        }
                        i++;
                        if(i==8)
                        {
                                i=0;
                                        num++;
                                if(10==num)                   // 隔断时间读取1302数据, 时间间隔可以调整
                                        {
                                                ReadRTC_Flag=1;          //使用标志位判断
                                                num=0;
                                        }
                                       
                        }
                         

回复

使用道具 举报

ID:25310 发表于 2019-12-16 08:07 | 显示全部楼层
重上电时间间隔多少?确认单片机VCC供电电压到0V再上电看看。
回复

使用道具 举报

ID:213173 发表于 2019-12-16 09:25 | 显示全部楼层
仅凭这点程序片段不足以证明楼主的判断。
回复

使用道具 举报

ID:25310 发表于 2019-12-16 09:53 | 显示全部楼层
你读的时1302的时间啊,1302即使掉电很长时间电源脚的电容都可以提供能量的,1-2分钟不掉电都是有可能的,看你的电容大小了。
回复

使用道具 举报

ID:664691 发表于 2019-12-16 22:37 | 显示全部楼层
pcbboy 发表于 2019-12-16 08:07
重上电时间间隔多少?确认单片机VCC供电电压到0V再上电看看。

1.只是一个开发板,带上重新烧录程式显示 00-00-00  按键功能正常,断电后重新上电(间隔无论多长时间都一样)就显示 85-62-32,按键功能也无反应,所以我认为重新上电后while语句没执行。
回复

使用道具 举报

ID:664691 发表于 2019-12-16 22:45 | 显示全部楼层
pcbboy 发表于 2019-12-16 09:53
你读的时1302的时间啊,1302即使掉电很长时间电源脚的电容都可以提供能量的,1-2分钟不掉电都是有可能的, ...

1. 其实我没读1302时间的(我准备去做这个程式:1302调时间)
2. 我只是先写一个这样的:上电数码管显示 00-00-00 然后通过3个按键来改变这3位数字显示
3.之前一上电也是显示(我一开始就设定显示): 00-00-00  因为一上电后按键无功能(重新烧录程式有功能)。为了区分while语句是否被执行,所以我开开始就把显示定义为:85-62-32
回复

使用道具 举报

ID:664691 发表于 2019-12-17 19:26 | 显示全部楼层
哪位大神了帮帮忙  为什么是这样?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表