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

標題: 新人求救,51單片機定時器0關(guān)閉再開啟以后不工作 [打印本頁]

作者: YokeHickt    時間: 2020-6-15 16:29
標題: 新人求救,51單片機定時器0關(guān)閉再開啟以后不工作


如題,子函數(shù)中因為要執(zhí)行串口發(fā)送就先關(guān)閉了定時器0開啟定時器1(兩個同時開啟總出問題),發(fā)送完畢后關(guān)閉定時器1再開啟定時器0,可是接下來定時器0都不再工作,主函數(shù)工作正常(出了有關(guān)定時器0的)。P2是控制LED燈亮滅的端口,定時器不工作的話P2默認全滅。


作者: mffking    時間: 2020-6-15 17:08
你把最后兩行代碼的順序倒過來試一下。即:
flag4=0;
timer0_init();
作者: YokeHickt    時間: 2020-6-15 17:49
經(jīng)過檢測TMOD已經(jīng)被重新定義為0x01,可是定時器0依舊不工作
作者: MikeCai    時間: 2020-6-16 10:13
檢查與定時器相關(guān)的驅(qū)動時鐘是否符合要求,并查該時鐘在定時器 開關(guān)的變化
作者: yzwzfyz    時間: 2020-6-16 15:36
你是證明它沒有工作的呢?
LED燈亮何時滅?何時亮?滅后何時又被明亮的呢?
作者: wufeng391    時間: 2020-6-17 21:25
修改定時器0模式時,TMOD&=0xF0; TMOD|=0x01;
修改定時器1模式時,TMOD&=0x0F; TMOD|=0x20;
這樣修改定時器模式時不會互相干擾。你可以試下。
作者: wufeng391    時間: 2020-6-17 21:29
應(yīng)該是你修改定時器工作模式的方法有問題,你的這種操作方法,如果只是一個定時器的話決什么問題,如果是兩個使用同一個模式寄存器的定時器就不好用了,可能在打開一個定時器的同時會關(guān)閉另一個定時器。這時候應(yīng)用用與或方式操作修改TMOD寄存器。網(wǎng)上應(yīng)該有相關(guān)的視頻。
作者: SKYLAR123    時間: 2020-6-18 15:15
wufeng391 發(fā)表于 2020-6-17 21:25
修改定時器0模式時,TMOD&=0xF0; TMOD|=0x01;
修改定時器1模式時,TMOD&=0x0F; TMOD|=0x20;
這樣修改定時 ...

你這個不就是TMOD=0X21;
作者: SKYLAR123    時間: 2020-6-18 15:26
直接在開啟定時器1初始化的時候TMOD|=0X20;你第二個初始化相當于給第一個給覆蓋了也可以兩個初始化放在一起寫;

作者: 單片機愛好者223    時間: 2020-6-30 13:55
TIME1的初始化把    Time0給關(guān)了。。。。
作者: 不要黑    時間: 2020-6-30 14:30
在timer0_init()中把timer1的中斷和串口中斷關(guān)掉試一下
作者: 長生殿啊    時間: 2020-6-30 15:24
應(yīng)該是初始化的問題,用之前在初始化一次呢?
作者: 青桑葉    時間: 2020-6-30 17:48
既然不需要兩個定時器同時工作,除了工作模式變動外。可以分別控制 TR0 和 TR1 吧
作者: YokeHickt    時間: 2020-7-3 18:58
已經(jīng)過去蠻久了,之前一直給忘了,我把兩個兩個定時器同時開啟,也就是像前面各位說的方法我都嘗試過,而測試方法就是兩個定時器各控制一個led燈的亮滅,各自執(zhí)行的時候會使對應(yīng)的led燈亮,使另一個定時器的led滅,而在這里會出現(xiàn)定時器0結(jié)束定時器1開啟的過程都正常,而當定時器1語句結(jié)束后,定時器0就失去效用,對應(yīng)的led不再亮起
作者: wulin    時間: 2020-7-3 20:48
YokeHickt 發(fā)表于 2020-7-3 18:58
已經(jīng)過去蠻久了,之前一直給忘了,我把兩個兩個定時器同時開啟,也就是像前面各位說的方法我都嘗試過,而測 ...

樓上的壇友基本把問題都講清楚了,樓主還沒搞定可能與你把T0設(shè)置周期太短有關(guān)。進程調(diào)度得當串口與T0不會互擾。如實在搞不定可以設(shè)置兩個定時器開關(guān)互斥。基本構(gòu)架如下:

void InitTimer(void)
{
        TMOD = 0x22;//8位自動重裝
        PCON = 0x00;
        SCON = 0x50;
        TH0 = 0xA4;//定時100us
        TL0 = 0xA4;
        TH1 = 0xFD;//比特率9600
        TL1 = 0xFD;
        TR0 = 0;//關(guān)T0
        TR1 = 0;//關(guān)T1
        EA = 1;
        ES = 1;
        ET0 = 1;
        ET1 = 0;
}

void main(void)
{
        InitTimer();
        while(1)
        {
                //相應(yīng)任務(wù)中加二選一
                if(TR1==1)
                        TR0=0;               
                else TR0=1;
        }
}

void Timer0Interrupt(void) interrupt 1
{
        //不需重裝
        //中斷任務(wù)
}

void UARTInterrupt(void) interrupt 4
{
        RI=0;
        x=SBUF;
        //中斷任務(wù)
}
作者: 不要黑    時間: 2020-7-4 11:22
還沒解決么?實在不行就把仿真圖和程序發(fā)上來吧
作者: 飲酒作樂    時間: 2020-7-4 17:03
要不你把整個程序貼上來。這一點,確識沒看出來可以不執(zhí)行的錯誤
作者: 魏海龍    時間: 2020-7-7 11:13
TOMD 只需要定義一次  你在兩個初始化都有,你在開定時器0的時候關(guān)了1 你在開定時器1的時候關(guān)了0 ,所以會導(dǎo)致你一直都只是一個定時器工作。如果你關(guān)掉0就開1的話可以,關(guān)掉1就開0的話 也可以 兩個同時打開的話就不行。都是TMOD的原因。

上次我犯了這個錯誤,師傅讓我自賞兩個大嘴巴子。
作者: 樂兒翅    時間: 2020-7-28 10:15
修改定時器0模式時,TMOD&=0xF0; TMOD|=0x01; 修改定時器1模式時,TMOD&=0x0F; TMOD|=0x20;




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