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

標(biāo)題: 串口中斷和while循環(huán)哪個優(yōu)先級高一點 [打印本頁]

作者: hkoos    時間: 2017-8-20 10:31
標(biāo)題: 串口中斷和while循環(huán)哪個優(yōu)先級高一點
為啥一有while循環(huán)  串口中斷就接不到數(shù)據(jù)了





只要前進(jìn)  就停止不了了   只要一前進(jìn) 任何操作都執(zhí)行不了了


求大神幫助



完整程序代碼:
#include<reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
                                               
//小車輪子接線方式:in1=p1.2 in2=p1.3 in3=p1.6 in4=p1.7

sbit wleft0=P1^2;sbit wleft1=P1^3;//左輪
sbit wright0=P1^6;sbit wright1=P1^7;//右輪

sbit d0=P1^4;sbit d1=P1^5;//右輪


bit startBit = 0;                                  //串口接收開始標(biāo)志位
bit newLineReceived = 0;                 //串口一幀協(xié)議包接收完成

unsigned char inputString[50];  //接收數(shù)據(jù)協(xié)議

uchar f=1;//0為前進(jìn) 1為后退
uchar al=0;
uchar ar=0;
uchar l=10;                 //左輪速度 0~20內(nèi)調(diào)節(jié),控制輸出電壓,參數(shù)過低輪子不動,注意調(diào)試。
uchar r=10;                //右輪速度 0~20內(nèi)調(diào)節(jié),控制輸出電壓,參數(shù)過低輪子不動,注意調(diào)試。



/******************************************************************/
/* 串口中斷程序*/
/******************************************************************/

void UART_SER () interrupt 4
{
        unsigned char n;         //定義臨時變量
        static int num = 0;

        if(RI)                 //判斷是接收中斷產(chǎn)生
        {
                RI = 0;         //標(biāo)志位清零
                n = SBUF; //讀入緩沖區(qū)的值

                //control=n;
            if(n == '$')
            {
              startBit = 1;
                  num = 0;
            }
            if(startBit == 1)
            {
               inputString[num] = n;     
            }  
            if (n == '#')
            {
               newLineReceived = 1;
               startBit = 0;
            }
                num++;
                if(num >= 50)
                {
                        num = 0;
                        startBit = 0;
                        newLineReceived        = 0;
                }
        }

}


//WIFI、藍(lán)牙初始化
void WifiInit(void)
{

           SCON = 0x50;         // SCON: 模式1, 8-bit UART, 使能接收
        TMOD |= 0x20;
        TH1=0xfd;                 //波特率9600 初值
        TL1=0xfd;
        TR1= 1;
        EA = 1;                    //開總中斷
        ES= 1;                         //打開串口中斷


}



void delay_ms(uint k)//延時函數(shù)
{
uint i,j;
        for(i=0;i<k;i++)
        {
                for(j=0;j<113;j++)
                {
                ;
                }
        }

}





uint a=0;
uint i=0;
void turn_left(){         //2.5v
        while(a<15){
                  wleft0=1;
                delay_ms(10);
                wleft0=0;
                delay_ms(10);
                a++;
        }
        if(wright1==1){
                wleft0=1;       
        }else{
                wleft0=0;
        }
   a=0;
}



void round_left(){//原地左轉(zhuǎn)       
        P1=0x77;
}

void round_right(){//原地右轉(zhuǎn)
        P1=0xbb;       
}

void stop(){
        P1 = 0xff;           //關(guān)閉所有LED和風(fēng)扇
       
}


void run(uint r){//前進(jìn)
        while(r){
                P1=0x7b;         
        }       
}

void retreat(){//后退
        P1=0xb7;;
}


main(){
        P1 = 0xff;           //關(guān)閉所有LED和風(fēng)扇
        WifiInit();

        //循環(huán)接收藍(lán)牙數(shù)據(jù)
        while(1){
                if (newLineReceived)
                   {
                        switch(inputString[1])

                        {
                                case '0':  run(0);break;//停止
                                case '1':  run(1);break;//前進(jìn)
                                case '2':  retreat();break;//后退
                                case '3':  round_left();break;//原地左轉(zhuǎn)
                                case '4':  round_right();break;//原地右轉(zhuǎn)
                                case '5':  turn_left();break;
                                case '6':  ;break;//開燈
                                default:P1 = 0xff;break;
                        }
               newLineReceived = 0;  
         
            }       
        }
       
       
}





作者: yzwzfyz    時間: 2017-8-20 12:17
語句無優(yōu)先級之分,看你把哪個寫在前面,哪個就先被執(zhí)行。
作者: hkoos    時間: 2017-8-20 12:59
yzwzfyz 發(fā)表于 2017-8-20 12:17
語句無優(yōu)先級之分,看你把哪個寫在前面,哪個就先被執(zhí)行。

不是語句 是串口中斷  串口中斷好像不能中斷while循環(huán)
作者: 常沉    時間: 2017-8-20 13:00
一個中斷,一個主循環(huán),沒有比較價值啊
作者: hkoos    時間: 2017-8-20 14:42
常沉 發(fā)表于 2017-8-20 13:00
一個中斷,一個主循環(huán),沒有比較價值啊

可是while一循環(huán) 串口中斷里就沒法接受藍(lán)牙數(shù)據(jù)了是咋回事啊
作者: oo0o_11    時間: 2017-8-20 15:49
問題出在你這個run函數(shù)里面,里面的while循環(huán)跳不出來,不能那么寫。
void run(uint r){//前進(jìn)
        while(r){
                P1=0x7b;         
        }        
}
前進(jìn)過程中來串口中斷,需要做其他動作需要在這個while里面講你的r置0 跳出循環(huán)


作者: hkoos    時間: 2017-8-20 20:54
oo0o_11 發(fā)表于 2017-8-20 15:49
問題出在你這個run函數(shù)里面,里面的while循環(huán)跳不出來,不能那么寫。
void run(uint r){//前進(jìn)
        w ...

可是怎么在外部中斷這個while啊
作者: yzwzfyz    時間: 2017-8-21 01:12
如果WHILE不在一個更高級或等級的中斷服務(wù)程序中,必被串口中斷打斷。
作者: hkoos    時間: 2017-8-21 10:04
yzwzfyz 發(fā)表于 2017-8-21 01:12
如果WHILE不在一個更高級或等級的中斷服務(wù)程序中,必被串口中斷打斷。

可是打斷不了啊
作者: sgq657785    時間: 2017-8-21 10:09
中斷高
作者: hkoos    時間: 2017-8-21 10:22
oo0o_11 發(fā)表于 2017-8-20 15:49
問題出在你這個run函數(shù)里面,里面的while循環(huán)跳不出來,不能那么寫。
void run(uint r){//前進(jìn)
        w ...

void run(){//前進(jìn)
        while(1){
                P1=0x7b;
                if(rw==0){
                        break;
                }         
        }       
}



case '0':  rw=0;break;//停止
case '1':  rw=1;run();break;//前進(jìn)

我改成這樣還是不行啊  只要一執(zhí)行ruin 其他的任何操作都執(zhí)行不了了
作者: oo0o_11    時間: 2017-8-21 11:13
hkoos 發(fā)表于 2017-8-21 10:22
void run(){//前進(jìn)
        while(1){
                P1=0x7b;

這樣寫當(dāng)然不會跳出循環(huán)了,串口中斷是執(zhí)行了,但是程序一直還在run函數(shù)的while(1)里面。。。沒有執(zhí)行到case語句那里。兩種方法,把串口處理那部分語句寫進(jìn)run函數(shù)while里面;或者,你把所有的轉(zhuǎn)動程序?qū)懺谝粋函數(shù)里面,設(shè)置同一個變量,不要有循環(huán),然后把這個函數(shù)放主函數(shù)while里面運(yùn)行,串口命令去改變這個變量就好了。
作者: jianhua5ok    時間: 2017-8-21 21:26
中斷高的,只是進(jìn)去了你這程序體現(xiàn)不出來,程序沒寫好。
作者: yzwzfyz    時間: 2017-8-21 22:59
樓主:你能證明打不斷嗎?(樓主9樓問題)。

進(jìn)入?yún)R編級調(diào)試:
在中斷處設(shè)斷點,改單步運(yùn)行,執(zhí)行到中斷返回RETI后,看是不是回到你的程序中去了。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 毛片资源 | 欧美成人精品一区二区三区在线看 | 亚洲国产精品一区 | 日韩在线精品视频 | 欧美日韩精品一区二区在线播放 | 日韩免费精品视频 | 精品少妇一区二区三区免费观 | 亚洲一区二区免费 | 91精品国产日韩91久久久久久 | www.com黄| 欧美特黄一级片 | 国产一级生活片 | 亚欧av在线| 欧美日本在线观看 | 中文字幕免费观看 | 色综合久久综合 | a级片在线免费观看 | 亚洲欧美日韩一区二区三区四区 | av一道本 | 99视频在线观看免费 | 色婷婷av一区二区三区之e本道 | 欧美日韩在线一区二区 | 色综合天天综合网天天狠天天 | 国产免费一区二区三区免费视频 | 国产在线成人 | 男女插插插视频 | 日韩精品成人 | av一区二区三区四区 | 久久夜色精品国产欧美乱极品 | 欧美三级在线视频 | 女同一区二区三区 | 国产黄色片在线观看 | 欧美日韩一区二区在线观看 | 午夜黄色影院 | 男女瑟瑟视频 | 天天爽夜夜爽夜夜爽 | 亚洲黄色录像 | 80日本xxxxxxxxx96| 最新免费黄色网址 | 午夜av片 | 欧美在线一区二区 |