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

標(biāo)題: 求助各位大佬,這是用單片機(jī)定時(shí)器控制跑馬燈程序,不知道問題出在哪? [打印本頁]

作者: wangzhe212    時(shí)間: 2020-3-1 00:52
標(biāo)題: 求助各位大佬,這是用單片機(jī)定時(shí)器控制跑馬燈程序,不知道問題出在哪?
單片機(jī)源程序如下:
#include<reg52.h>


typedef unsigned char u8;
typedef unsigned int u16;


void main(void)
{
        u8 led;
        u8 cnt;
        u8 num;

        TMOD=1;
        TH0=0XB8;    //20ms
        TL0=0X00;
        TR0=1;        //定時(shí)器開啟

        led=0xfe;
        num=8;
        while(num>0)
        {
                if(1==TF0)
                {
                        TF0=0;
                        TH0=0XB8;
                        TL0=0X00;
                        cnt++;
                        if(cnt>=50)
                        {
                                cnt=0;
                                P2=led;
                                led=led<<1;                //左移
                                led=led|0x01;
                                num--;
                                if(num==1)               
                                {
                                         num--;                 //8個(gè)led移動(dòng)完畢,跳出while循環(huán)
                                }
                        }
                }
        }
        
        num=8;
        while(num>0)                                 //燒錄到開發(fā)板,現(xiàn)象也只運(yùn)行的上面一段while循環(huán)
        {
                if(1==TF0)                                //調(diào)試到這里就進(jìn)不去if判斷了,為什么?
                {
                        TF0=0;
                        TH0=0XB8;
                        TL0=0X00;
                        cnt++;
                        if(cnt>=50)                //1s移動(dòng)一次
                        {
                                cnt=0;
                                P2=led;
                                led=led>>1;                //右移
                                led=led|0xfe;
                                num--;
                                if(num==1)
                                {
                                         num--;
                                }
                        }
                }
        }               
}

作者: wangzhe212    時(shí)間: 2020-3-1 00:53
為啥表情包變這樣了……,跪求大佬幫幫忙
作者: wulin    時(shí)間: 2020-3-1 07:06
樓主的核心錯(cuò)誤在這一條 led=led|0xfe; 如果改成 led=led|0x80; 右移后最高位補(bǔ)1就可以正常顯示。但總體來說程序結(jié)構(gòu)明顯不合理。初始化完成以后所有程序都要約束在主循環(huán)while(1)中運(yùn)行。改這樣試試:
  1. #include<reg52.h>

  2. typedef unsigned char u8;
  3. typedef unsigned int u16;
  4. #define led P2 //宏定義led=P2

  5. void main(void)
  6. {
  7.         u8 cnt,num;

  8.         TMOD=1;
  9.         TH0=0XB8;    //20ms
  10.         TL0=0X00;
  11.         TF0=0;
  12.         TR0=1;       //定時(shí)器開啟
  13.         led=0xfe;

  14.         while(1)
  15.         {
  16.                 if(TF0)
  17.                 {
  18.                         TF0=0;
  19.                         TH0=0XB8;
  20.                         TL0=0X00;
  21.                         cnt++;
  22.                         if(cnt>=50)
  23.                         {
  24.                                 cnt=0;
  25.                                 if(led==0xfe)
  26.                                 {
  27.                                         num=1;
  28.                                 }
  29.                                 if(led==0x7f)
  30.                                 {
  31.                                         num=0;
  32.                                 }
  33.                                 if(num==1)
  34.                                 {
  35.                                         led=led<<1|0x01;
  36.                                 }
  37.                                 if(num==0)
  38.                                 {
  39.                                         led=led>>1|0x80;
  40.                                 }
  41.                         }
  42.                 }
  43.         }
  44. }
復(fù)制代碼

作者: 之一知足    時(shí)間: 2020-3-1 09:50
為啥你不直接用定時(shí)器中斷服務(wù)函數(shù)么?你這種用查詢的方式不斷查詢TF0著實(shí)沒有必要,在中斷服務(wù)函數(shù)里想寫什么就寫什么了。你整個(gè)程序沒有while(1),走一遍main就停了
作者: wangzhe212    時(shí)間: 2020-3-1 10:47
wulin 發(fā)表于 2020-3-1 07:06
樓主的核心錯(cuò)誤在這一條 led=led|0xfe; 如果改成 led=led|0x80; 右移后最高位補(bǔ)1就可以正常顯示。但總體來 ...

非常感謝,我明白了
作者: wangzhe212    時(shí)間: 2020-3-1 10:49
之一知足 發(fā)表于 2020-3-1 09:50
為啥你不直接用定時(shí)器中斷服務(wù)函數(shù)么?你這種用查詢的方式不斷查詢TF0著實(shí)沒有必要,在中斷服務(wù)函數(shù)里想寫 ...

我想先用定時(shí)器寫一遍,再加中斷,這兩我剛學(xué),都不太熟練,非常感謝你的回答




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