欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

            標(biāo)題: 為啥我的51單片機(jī)程序會(huì)跳出while(1)不斷復(fù)位? [打印本頁(yè)]

            作者: madnick16    時(shí)間: 2019-6-16 20:12
            標(biāo)題: 為啥我的51單片機(jī)程序會(huì)跳出while(1)不斷復(fù)位?
            現(xiàn)象如下


            不斷復(fù)位
            順序執(zhí)行到一半就總是莫名其妙復(fù)位
            單片機(jī)源代碼如下
            #include "reg52.h"  

            typedef unsigned int u16;   
            typedef unsigned char u8;

            #define GPIO_KEY P1

            sfr WDT_CONTR=0xe1;

            sbit LSA=P2^2;
            sbit LSB=P2^3;
            sbit LSC=P2^4;

            sbit IN1=P1^5;
            sbit IN2=P1^6;
            sbit IN3=P1^7;
            sbit IN4=P1^0;

            u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                                    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};


            u8 KeyValue;                        
            u8 kkj[4];
            u16 k=0;
            u16 pn=0;
            u8 qw1,qw2,qw3,qw4;
            u8 redata;

            u8 rst[]="AT+RST\r\n";
            u8 mod[]="AT+CWMODE=3\r\n";
            u8 wico[]="AT+CWJAP=\"Nick\",\"qweasdzxc\"\r\n";
            u8 sev[]="AT+CIPSTART=\"TCP\",\"192.168.43.31\",8080\r\n";
            u8 mods[]="AT+CIPMODE=1\r\n";
            u8 sen[]="AT+CIPSEND\r\n";
            u8 idre[]="This is vehicle\r\n";                        
            void UsartInit()
            {
                            SCON=0X50;               
                            T2CON=0X34;            
                            PCON=0X80;               
                            RCAP2H=(65536-39)/256;               
                RCAP2L=(65536-39)%256;
                ES=1;                                
                            EA=1;
                            WDT_CONTR=0x01;
            }

            void delay(u16 i)
            {
                    while(i--);        
            }


            void Delay_xms(u16 x)
            {
            u16 i,j;
            for(i=0;i<x;i++)
              for(j=0;j<112;j++);
            }

            void KeyDown(void)
            {
                    char a=0;
                    GPIO_KEY=0x0f;
                    if(GPIO_KEY!=0x0f)
                    {
                            delay(1000);
                            if(GPIO_KEY!=0x0f)
                            {        
                                    //2aêÔáD
                                    GPIO_KEY=0X0F;
                                    switch(GPIO_KEY)
                                    {
                                            case(0X07):        KeyValue=0;break;
                                            case(0X0b):        KeyValue=1;break;
                                            case(0X0d): KeyValue=2;break;
                                            case(0X0e):        KeyValue=3;break;
                                    }
                                    //2aêÔDD
                                    GPIO_KEY=0XF0;
                                    switch(GPIO_KEY)
                                    {
                                            case(0X70):        KeyValue=KeyValue;break;
                                            case(0Xb0):        KeyValue=KeyValue+4;break;
                                            case(0Xd0): KeyValue=KeyValue+8;break;
                                            case(0Xe0):        KeyValue=KeyValue+12;break;
                                    }
                                            if(KeyValue==10)
                                            {
                                              k=k;
                                              }
                                            else
                                            {
                                                    kkj[k]=KeyValue;
                                                    k=k+1;
                                                    if(k==4)
                                                    {
                                                            k=0;
                                                    }
                                            }        
                                    while((a<50)&&(GPIO_KEY!=0xf0))   
                                    {
                                            delay(1000);
                                            a++;
                                            
                                    }
                            }
                    }
            }


            void send_byte(u8 by)
            {
                            SBUF = by;
                while(!TI);
                TI = 0;      
            }

            void send_string(u8 *p)
            {
                while(*p!= '\0')
                                    {
                    send_byte(*p);
                    p++;
                }
            }

            void MotorCW(void)
            {
            u8 i;
            for(i=0;i<4;i++)
              {
               if(i==0)
                     {
                            IN1=1;
                            IN2=0;
                            IN3=0;
                            IN4=0;
                     }
                     if(i==1)
                     {
                            IN1=0;
                            IN2=1;
                            IN3=0;
                            IN4=0;
                     }
                     if(i==2)
                     {
                            IN1=0;
                            IN2=0;
                            IN3=1;
                            IN4=0;
                     }
                     if(i==3)
                     {
                            IN1=0;
                            IN2=0;
                            IN3=0;
                            IN4=1;
                     }
                            Delay_xms(4);
                    }
                    pn=pn+1;
            }

            void del(u16 n)
            {
                    unsigned int i=0;
              for(i=0;i<n;i++)
                    {
                            #pragma asm
                            DEL3:MOV R0,#100
                            DEL2:MOV R1,#100
                            DEL1:MOV R2,#25
                      DEL0:NOP
                           NOP
                           DJNZ R2,DEL0
                           DJNZ R1,DEL1
                           DJNZ R0,DEL2
                            #pragma endasm
                    }
            }
            /**************************************************************************************************************************************************************/
            void main()
            {        
                    UsartInit();
                    del(1);
                    send_string(rst);
                    del(1);
                    send_string(mod);
                    del(1);
                    send_string(wico);
                    del(10);
                    send_string(sev);
                    del(10);
                    send_string(mods);
                    del(5);
                    send_string(sen);
                    del(3);
                    send_string(idre);
                    del(1);
                    while(1)
                    {        
                            KeyDown();
                            if(KeyValue==11)
                            {
                            kkj[0]=0;
                            kkj[1]=0;
                            kkj[2]=0;
                            kkj[3]=0;
                                    k=0;
                            }
                            if(KeyValue==10)
                            {
                            kkj[0]=kkj[0]+48;
                            kkj[1]=kkj[1]+48;
                            kkj[2]=kkj[2]+48;
                            kkj[3]=kkj[3]+48;
                            send_string(kkj);
                            kkj[0]=0;
                            kkj[1]=0;
                            kkj[2]=0;
                            kkj[3]=0;
                            k=0;
                            KeyValue=0;
                            }
                            qw1=kkj[0];
                            qw2=kkj[1];
                            qw3=kkj[2];
                            qw4=kkj[3];
                            LSA=1;LSB=1;LSC=0;
                            P0=smgduan[qw1];
                            delay(100);
                            P0=0x00;
                            LSA=0;LSB=1;LSC=0;
                            P0=smgduan[qw2];
                            delay(100);        
                            P0=0x00;
                            LSA=1;LSB=0;LSC=0;
                            P0=smgduan[qw3];
                            delay(100);      
                            P0=0x00;
                            LSA=0;LSB=0;LSC=0;
                            P0=smgduan[qw4];
                            delay(100);      
                            P0=0x00;
                            if(redata=='B')
                                    {
                                                    MotorCW();   
                                                    if(pn==256)
                                                    {
                                                    Delay_xms(1000);
                                                    pn=0;
                                                    redata='A';
                                                    }
                                    }
                    }               
            }

            void Usart() interrupt 4
            {
                     if(RI!=0)
                     {
                             redata=SBUF;
                             RI=0;
                     }
            }


            作者: qinimo2002    時(shí)間: 2019-6-17 10:03
            1.看門(mén)狗定時(shí)器是否關(guān)閉
            2.復(fù)位電路設(shè)計(jì)是否合理
            作者: 15936529590    時(shí)間: 2019-6-17 10:49
            qinimo2002 發(fā)表于 2019-6-17 10:03
            1.看門(mén)狗定時(shí)器是否關(guān)閉
            2.復(fù)位電路設(shè)計(jì)是否合理

            看看程序是否寫(xiě)錯(cuò)
            作者: liuzx66    時(shí)間: 2019-6-17 11:13
            1、沒(méi)有說(shuō)明單片機(jī)型號(hào)和完整電路圖,一切靠猜
            2、沒(méi)有看到有喂狗代碼,或者喂狗時(shí)間超時(shí)
            作者: hwb_51hei    時(shí)間: 2019-6-17 12:06
            還是要具體點(diǎn)把問(wèn)題描述清楚,復(fù)位不止軟件問(wèn)題,還有可能硬件問(wèn)題
            作者: charles11    時(shí)間: 2019-6-17 16:15
            你的復(fù)位電路是不是一直連高電平了?
            作者: witheMe    時(shí)間: 2019-8-11 20:42
            sfr WDT_CONTR=0xe1;
            我看到了你定義了一個(gè)看門(mén)狗寄存器,這個(gè)寄存器的值為11100001
            第7位為看門(mén)狗溢出位,溢出置1,需要軟件清0,
            第5位為看門(mén)狗使能位,置1啟動(dòng)看門(mén)狗
            第4位為看門(mén)狗清零位,置1清0看門(mén)狗,看門(mén)狗重新計(jì)數(shù)后硬件自動(dòng)清0該位,
            第3位為看門(mén)狗模式位,置1時(shí)為在空閑模式也計(jì)數(shù),
            后面三位是看門(mén)狗定時(shí)器分頻值。
            意思是你啟動(dòng)了看門(mén)狗,但是我并沒(méi)有在你后面的程序中看到喂狗的程序,看門(mén)狗計(jì)數(shù)器清零之后會(huì)自動(dòng)觸發(fā)復(fù)位中斷,你需要在你的while(2)里面反復(fù)喂狗才可以
            作者: qzwddf    時(shí)間: 2019-8-12 22:25
            沒(méi)復(fù)位啊,沒(méi)跳出循環(huán),一直在while (1) 里面運(yùn)行你的AT指令啊,你的功能思維好像需要改變一下!不要一直這樣發(fā)送AT啊,那邊回復(fù)是需要時(shí)間的,給個(gè)延時(shí)或者判斷接收到的數(shù)據(jù)啊!




            歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1