标题: 52单片机重新上电后不执行while(1)语句 [打印本页]

作者: duziqulinyu    时间: 2019-12-15 23:11
标题: 52单片机重新上电后不执行while(1)语句
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;
                                        }
                                       
                        }
                         


作者: pcbboy    时间: 2019-12-16 08:07
重上电时间间隔多少?确认单片机VCC供电电压到0V再上电看看。
作者: wulin    时间: 2019-12-16 09:25
仅凭这点程序片段不足以证明楼主的判断。
作者: pcbboy    时间: 2019-12-16 09:53
你读的时1302的时间啊,1302即使掉电很长时间电源脚的电容都可以提供能量的,1-2分钟不掉电都是有可能的,看你的电容大小了。
作者: duziqulinyu    时间: 2019-12-16 22:37
pcbboy 发表于 2019-12-16 08:07
重上电时间间隔多少?确认单片机VCC供电电压到0V再上电看看。

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

作者: duziqulinyu    时间: 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
作者: duziqulinyu    时间: 2019-12-17 19:26
哪位大神了帮帮忙  为什么是这样?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1