找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2187|回復(fù): 9
收起左側(cè)

C51單片機(jī)注解處的書(shū)寫(xiě)合理不?

[復(fù)制鏈接]
ID:483865 發(fā)表于 2021-1-17 19:48 | 顯示全部樓層 |閱讀模式
單片機(jī)源程序如下:
#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;
        }

}
回復(fù)

使用道具 舉報(bào)

ID:68468 發(fā)表于 2021-1-17 20:23 | 顯示全部樓層
注解處問(wèn)題不大吧,但LedBuf[]數(shù)組只有8個(gè),i累加超過(guò)7以后就.......

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:483865 發(fā)表于 2021-1-17 20:35 | 顯示全部樓層
wysh_2004 發(fā)表于 2021-1-17 20:23
注解處問(wèn)題不大吧,但LedBuf[]數(shù)組只有8個(gè),i累加超過(guò)7以后就.......

代碼是我參考師傅的代碼編的,在開(kāi)發(fā)板上跑正常。讓我自己懷疑這個(gè)i值,要不要加歸零的語(yǔ)句。
回復(fù)

使用道具 舉報(bào)

ID:415064 發(fā)表于 2021-1-17 21:30 | 顯示全部樓層
這個(gè)EA是什么我沒(méi)看懂啊,可以看下內(nèi)存EA 或者ENLED 的地址,大概率LedBuf后面的地址是ENLED或者是沒(méi)有用賦過(guò)初值的。也就是i到7之后就去了LedBuf[8],而LedBuf[8]在內(nèi)存的值恰好是0.所以說(shuō)此時(shí)i=0;也就解釋了為什么程序可以正常運(yùn)行
如果你在 unsigned char LedBuf[8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}后,EA = 1前加一句 unsigned char j = 7;這樣就會(huì)一直為L(zhǎng)edBuf[7],但是程序沒(méi)有卡死的
回復(fù)

使用道具 舉報(bào)

ID:483865 發(fā)表于 2021-1-18 08:03 | 顯示全部樓層
謝謝你的回復(fù),這樣改代碼能跑是巧合。我改用數(shù)碼管顯示,發(fā)現(xiàn)這樣的錯(cuò)誤了。
回復(fù)

使用道具 舉報(bào)

ID:592807 發(fā)表于 2021-1-18 08:55 | 顯示全部樓層
你的  i 是哪來(lái)的?聲明了沒(méi)有?哪種類型?超出數(shù)組范圍怎么處理?
回復(fù)

使用道具 舉報(bào)

ID:367934 發(fā)表于 2021-1-18 09:09 | 顯示全部樓層
要是循環(huán)必須歸零,否則會(huì)超出數(shù)組范圍?梢栽谂袛嗄睦锛右粋(gè)條件,
回復(fù)

使用道具 舉報(bào)

ID:483865 發(fā)表于 2021-1-18 14:46 | 顯示全部樓層
適得府君書(shū) 發(fā)表于 2021-1-18 09:09
要是循環(huán)必須歸零,否則會(huì)超出數(shù)組范圍。可以在判斷哪里加一個(gè)條件,

嗯,明白了。謝謝。
回復(fù)

使用道具 舉報(bào)

ID:872416 發(fā)表于 2021-1-18 14:55 來(lái)自手機(jī) | 顯示全部樓層
i循環(huán)8次后重新賦值0
回復(fù)

使用道具 舉報(bào)

ID:878845 發(fā)表于 2021-1-19 13:44 | 顯示全部樓層
只是書(shū)寫(xiě)規(guī)范問(wèn)題,實(shí)際這里運(yùn)行沒(méi)問(wèn)題,但寫(xiě)軟件來(lái)說(shuō)防呆是必要的,否則以后出什么事還是要回來(lái)找的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表