久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5026|回復: 7
打印 上一主題 下一主題
收起左側

為啥我的51單片機程序會跳出while(1)不斷復位?

[復制鏈接]
跳轉到指定樓層
樓主
100黑幣
現象如下


不斷復位
順序執行到一半就總是莫名其妙復位
單片機源代碼如下
#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;
         }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:564242 發表于 2019-6-17 10:03 | 只看該作者
1.看門狗定時器是否關閉
2.復位電路設計是否合理
回復

使用道具 舉報

板凳
ID:564333 發表于 2019-6-17 10:49 來自手機 | 只看該作者
qinimo2002 發表于 2019-6-17 10:03
1.看門狗定時器是否關閉
2.復位電路設計是否合理

看看程序是否寫錯
回復

使用道具 舉報

地板
ID:160500 發表于 2019-6-17 11:13 | 只看該作者
1、沒有說明單片機型號和完整電路圖,一切靠猜
2、沒有看到有喂狗代碼,或者喂狗時間超時
回復

使用道具 舉報

5#
ID:546325 發表于 2019-6-17 12:06 | 只看該作者
還是要具體點把問題描述清楚,復位不止軟件問題,還有可能硬件問題
回復

使用道具 舉報

6#
ID:552614 發表于 2019-6-17 16:15 | 只看該作者
你的復位電路是不是一直連高電平了?
回復

使用道具 舉報

7#
ID:542954 發表于 2019-8-11 20:42 | 只看該作者
sfr WDT_CONTR=0xe1;
我看到了你定義了一個看門狗寄存器,這個寄存器的值為11100001
第7位為看門狗溢出位,溢出置1,需要軟件清0,
第5位為看門狗使能位,置1啟動看門狗
第4位為看門狗清零位,置1清0看門狗,看門狗重新計數后硬件自動清0該位,
第3位為看門狗模式位,置1時為在空閑模式也計數,
后面三位是看門狗定時器分頻值。
意思是你啟動了看門狗,但是我并沒有在你后面的程序中看到喂狗的程序,看門狗計數器清零之后會自動觸發復位中斷,你需要在你的while(2)里面反復喂狗才可以
回復

使用道具 舉報

8#
ID:599517 發表于 2019-8-12 22:25 | 只看該作者
沒復位啊,沒跳出循環,一直在while (1) 里面運行你的AT指令啊,你的功能思維好像需要改變一下!不要一直這樣發送AT啊,那邊回復是需要時間的,給個延時或者判斷接收到的數據啊!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人免费一区二区60岁 | 久久久久久国产精品免费免费男同 | 国产一区二区中文字幕 | 色视频一区二区 | 99成人免费视频 | 国产在线观看一区二区 | 最新国产精品精品视频 | 亚洲成av片人久久久 | 亚洲天堂二区 | 国产精品久久久久久亚洲调教 | 精品日本久久久久久久久久 | 日韩精品一区二区三区在线播放 | 日本三级全黄三级三级三级口周 | 91精品国产综合久久婷婷香蕉 | 91精品国产综合久久久动漫日韩 | 欧美性受xxx | 在线视频成人 | 欧美啪啪 | 高清成人av | 性国产xxxx乳高跟 | 日韩欧美亚洲 | 国产精品一区二区久久 | 欧美视频免费在线 | 亚洲欧美视频一区 | www.成人在线视频 | 欧洲毛片| 青青草av在线播放 | 日日骚网| 久久久久久久久久久久久久久久久久久久 | 国产精品亚洲一区 | 人人操日日干 | 久久久久一区二区 | 欧美精品二区 | 日本综合在线观看 | 99久久日韩精品免费热麻豆美女 | 国产视频观看 | 在线观看欧美一区 | 日韩在线精品视频 | 婷婷色国产偷v国产偷v小说 | 黄色一级大片在线免费看产 | 久久久久久久91 |