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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5178|回復: 7
收起左側

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

[復制鏈接]
ID:328334 發表于 2019-6-16 20:12 | 顯示全部樓層 |閱讀模式
100黑幣
現象如下
無標題.png

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

回復

使用道具 舉報

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、沒有看到有喂狗代碼,或者喂狗時間超時
回復

使用道具 舉報

ID:546325 發表于 2019-6-17 12:06 | 顯示全部樓層
還是要具體點把問題描述清楚,復位不止軟件問題,還有可能硬件問題
回復

使用道具 舉報

ID:552614 發表于 2019-6-17 16:15 | 顯示全部樓層
你的復位電路是不是一直連高電平了?
回復

使用道具 舉報

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)里面反復喂狗才可以
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色毛片一级 | 欧美色性 | 91精品国产91久久综合桃花 | 国产精品特级毛片一区二区三区 | 中文字幕久久精品 | 亚洲黄色av网站 | 精品伊人 | 日本在线黄色 | 成人在线免费电影 | 欧美一区二区久久 | 日韩精品 电影一区 亚洲 | 人人做人人澡人人爽欧美 | 国产在线资源 | 在线亚洲一区二区 | 久久免费精品 | 成人免费视频在线观看 | 亚洲精品9999久久久久 | 午夜综合 | 亚洲一区三区在线观看 | 欧洲色综合 | 国产成人精品免高潮在线观看 | 日本精品在线播放 | 国产一区二区三区免费观看视频 | 亚洲黄色成人网 | 天堂在线www| 日韩精品视频在线免费观看 | 一区二区三区亚洲视频 | 成人久久久 | 亚洲欧美综合精品久久成人 | av网站免费 | 免费在线成人 | 亚洲精品一 | 盗摄精品av一区二区三区 | 最新av在线网址 | 成年网站在线观看 | 欧美国产视频 | 午夜精品一区二区三区在线 | 亚洲第1页 | 91精品国产一区二区在线观看 | 日韩精品一区二区久久 | 我爱操|