標(biāo)題: 這個單片機(jī)程序的執(zhí)行的過程?請盡量說詳細(xì)些。 [打印本頁]

作者: 51stm    時間: 2018-1-18 21:06
標(biāo)題: 這個單片機(jī)程序的執(zhí)行的過程?請盡量說詳細(xì)些。
#include <reg52.h>
typedef unsigned char u8;
void delay_1s();
void main()
{
        EA=1;
        ET1=1;
        TMOD=0x10;
        while(1)
        {
                        P1=0xfe;
                        delay_1s();
                        P1=0x7f;
                        delay_1s();
        }
}
void delay_1s()
{
        u8 i;
        for(i=0;i<2000;i++)
        {
                TH1=(65536-50000)/256;
                TL1=(65536-50000)%256;
                TR1=1;
                while(!TF1);
        }
}
void int_0()interrupt 3
{
        P1=0xf7;
}

有什么錯誤請指出來,謝謝!


作者: wulin    時間: 2018-1-19 08:43
你沒有說明你想達(dá)到什么目的,單從main函數(shù)內(nèi)容看你是用100秒的長延時控制兩個端口交替輸出低電平,但由于開了中斷,你想得到的延時實現(xiàn)不了。程序會死在while(!TF1);,另外u8 i;的賦值范圍只能是0~255,你按2000計算,永遠(yuǎn)也跳不出for循環(huán)。
作者: HC6800-ES-V2.0    時間: 2018-1-19 08:53
你的程序,我詳細(xì)看了,并且在我的板子上,還試過。
是不是程序卡在什么地方了?
錯誤在20行:for(i=0;i<2000;i++)
你的i變量,定義為U8,即最大只有255,而你用了2000,當(dāng)然就死在這里了。
我將它改為100,就好了;蛘吣惆阉x為unsigned int也行,這個我沒試,要等100多秒,時間太長。
作者: wxxl    時間: 2018-1-19 11:23
P1=0xfe, P1=0x7f;交替運行,每次中斷后P1=0xf7;
看不出程序干什么用的!
作者: yzwzfyz    時間: 2018-1-19 12:18
無錯!打100分,鼓勵你一下。
錯誤是相對于標(biāo)準(zhǔn)才有的,無標(biāo)準(zhǔn)就無所謂錯誤了。
作者: ahshmj    時間: 2018-1-19 20:09
不知道你的程序的功能。但就程序而言,重裝初值后TF1必須清零。
                TH1=(65536-50000)/256;
                TL1=(65536-50000)%256;
                TF1=0;
                TR1=1;
                while(!TF1);
作者: 聽說不能用真名    時間: 2018-1-19 21:59
那位老鐵,重裝初值以后好像不用置零吧,他不是機(jī)器自動就置零的嘛?另外,你這個!TF1真的有毒,TF1置1的時候不是就應(yīng)該進(jìn)入中斷程序了嗎?等從中斷程序出來TF1又是零了。我看啊,你要是想隔一秒的話,不如把程序直接寫在中斷程序里面,或者寫一個標(biāo)志位也可以的嘛,檢測標(biāo)志位,等程序運行過了再清除也挺好。
作者: 51stm    時間: 2018-1-19 23:13
問題已解決,謝謝大家!




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