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

標題: C51單片機注解處的書寫合理不? [打印本頁]

作者: 茶水    時間: 2021-1-17 19:48
標題: C51單片機注解處的書寫合理不?
單片機源程序如下:
#include<reg52.h>

sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;

bit flag500ms = 0;
unsigned char T0RH = 0;
unsigned char T0RL = 0;

void ConfigTimer0(unsigned int ms);

void main()
{
        unsigned char i = 0;
        unsigned char LedBuf[8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
        EA = 1;
        ConfigTimer0(10);
        ENLED = 0;
        ADDR3 = 1;
        ADDR2 = 1;
        ADDR1 = 1;
        ADDR0 = 0;
        while(1)
        {
                if(flag500ms == 1)
                {
                        flag500ms = 0;
                        P0 = LedBuf[i++];        //這里合理不?
                }
        }
}

void ConfigTimer0(unsigned int ms)
{
        unsigned long tmp;
        tmp = 11059200/12;
        tmp = (tmp * ms)/1000;
        tmp = 65536 - tmp;
        tmp = tmp + 12;
        T0RH = (unsigned char)(tmp >> 4);
        T0RL = (unsigned char)tmp;
        TMOD &= 0xF0;
        TMOD |= 0x01;
        TH0 = T0RL;
        TL0 = T0RL;
        ET0 = 1;
        TR0 = 1;
}

void interruptTimer0() interrupt 1
{
        static unsigned char tmr500ms = 0;
        TH0 = T0RH;
        TL0 = T0RL;
        tmr500ms++;
        if(tmr500ms >= 50)
        {
                tmr500ms = 0;
                flag500ms = 1;
        }

}
作者: wysh_2004    時間: 2021-1-17 20:23
注解處問題不大吧,但LedBuf[]數組只有8個,i累加超過7以后就.......
作者: 茶水    時間: 2021-1-17 20:35
wysh_2004 發表于 2021-1-17 20:23
注解處問題不大吧,但LedBuf[]數組只有8個,i累加超過7以后就.......

代碼是我參考師傅的代碼編的,在開發板上跑正常。讓我自己懷疑這個i值,要不要加歸零的語句。
作者: wojiaoguogai    時間: 2021-1-17 21:30
這個EA是什么我沒看懂啊,可以看下內存EA 或者ENLED 的地址,大概率LedBuf后面的地址是ENLED或者是沒有用賦過初值的。也就是i到7之后就去了LedBuf[8],而LedBuf[8]在內存的值恰好是0.所以說此時i=0;也就解釋了為什么程序可以正常運行
如果你在 unsigned char LedBuf[8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}后,EA = 1前加一句 unsigned char j = 7;這樣就會一直為LedBuf[7],但是程序沒有卡死的
作者: 茶水    時間: 2021-1-18 08:03
謝謝你的回復,這樣改代碼能跑是巧合。我改用數碼管顯示,發現這樣的錯誤了。
作者: 黃youhui    時間: 2021-1-18 08:55
你的  i 是哪來的?聲明了沒有?哪種類型?超出數組范圍怎么處理?
作者: 適得府君書    時間: 2021-1-18 09:09
要是循環必須歸零,否則會超出數組范圍。可以在判斷哪里加一個條件,

作者: 茶水    時間: 2021-1-18 14:46
適得府君書 發表于 2021-1-18 09:09
要是循環必須歸零,否則會超出數組范圍。可以在判斷哪里加一個條件,

嗯,明白了。謝謝。
作者: 盧盧    時間: 2021-1-18 14:55
i循環8次后重新賦值0
作者: 猴子大王    時間: 2021-1-19 13:44
只是書寫規范問題,實際這里運行沒問題,但寫軟件來說防呆是必要的,否則以后出什么事還是要回來找的




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