久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 關于單片機定時器與中斷的問題 [打印本頁]

作者: LYN123188    時間: 2021-10-4 12:06
標題: 關于單片機定時器與中斷的問題
大佬們好,如果定時器T0已經初始化后,開始運行,這時候我一直初始化會發生什么樣的情況。原本代碼是將Timert0_init(); 放在while外面上電初始化,但是我想試一試放在按鍵里面會是什么樣的效果。結果就是按鍵1需要一直按下,按鍵2只需點動,按鍵3,4在初始化后與按鍵2一樣的效果。有沒有大佬解釋一下其中的原理。感謝
下面是單片機測試代碼:

#include "regx52.h"
#include "timer0.h"
#include "keynum.h"
#include "intrins.h"
#include "Delay.h"

unsigned char wl,mode;//waterfall light 流水燈
void main()
{        
        P2=0xfe;
        while(1)
        {
                wl=keynum();
               
                if(wl>0)
                {
                        if(wl==1)
                        {
                                mode=1;
                                Timert0_init();      //這里按鍵一直按下流水燈一直工作,松手停下。
                        }
                        if(wl==2)
                        {
                                mode=2;
                                Delay(1);             //這里按鍵按下,松開流水燈繼續工作
                                Timert0_init();
                        }
                        if(wl==3)
                        {
                                mode=3;
                        }
                        if(wl==4)
                        {
                                mode=4;
                        }
                }
        }
}
void Timer0_Rountine(void)        interrupt 1
{
        static unsigned int t0count;        //靜態函數static,保證退出中斷時t0count不清零。
        TL0 = 0x66;                //設置定時初始值
        TH0 = 0xFC;                //設置定時初始值                        //定時器溢出后的值會變成0,需要重新賦初值;        
        t0count++;
        if(t0count>=1000)
        {
                t0count=0;
                if(mode==1)
                {
                        P2=_crol_(P2,1);
                }
                                if(mode==2)
                {
                        P2=_cror_(P2,1);
                }
                if(mode==3)
                {
                        P2=_crol_(P2,1);
                }
                if(mode==4)
                {
                        P2=_cror_(P2,1);
                }

        }
}





作者: LYN123188    時間: 2021-10-4 12:07
有沒有大佬幫下忙,解決一下我的困惑
作者: npn    時間: 2021-10-4 14:57
你的文件不全,需要有 timer0.h 等頭文件的內容才知道是什么問題。
作者: 188610329    時間: 2021-10-4 18:36
LYN123188 發表于 2021-10-4 12:07
有沒有大佬幫下忙,解決一下我的困惑

先說單片機具體型號,

然后說,希望達到的效果,
然后,說一下實際效果。

最后,標注一下,哪個是按鍵1,2,3,4
作者: LYN123188    時間: 2021-10-5 11:29
npn 發表于 2021-10-4 14:57
你的文件不全,需要有 timer0.h 等頭文件的內容才知道是什么問題。

好的,我馬上補發
作者: LYN123188    時間: 2021-10-5 11:29
188610329 發表于 2021-10-4 18:36
先說單片機具體型號,

然后說,希望達到的效果,

普中51單片機,stl89c51
作者: xstong    時間: 2021-10-5 11:55
單片機執行的每一個行為均是由程序邏輯所控制的,無論是放在循環外還是循環體內,其對執行結果的影響是由具體代碼決定。你先搞明白TimerInit干了些什么事情,會給程序帶來什么樣的執行過程,同時你又希望怎么執行才能實現你的控制思路!!
作者: LYN123188    時間: 2021-10-5 11:57
希望大佬們指導指導

定時器中斷問題.zip

43.24 KB, 下載次數: 5


作者: LYN123188    時間: 2021-10-5 15:43
xstong 發表于 2021-10-5 11:55
單片機執行的每一個行為均是由程序邏輯所控制的,無論是放在循環外還是循環體內,其對執行結果的影響是由具 ...

我現在分析不出原因,希望大佬指點。文件已經補發了
作者: robinsonlin    時間: 2021-10-5 16:28
看了一下你的程序,問題很多,按鍵的響應程序效率太低了,主程序里面的判斷語句也不嚴謹。建議你還是多看懂幾個范列程序,再自己著手寫功能。  
作者: cn_zhx    時間: 2021-10-5 16:33
可以將初始化程序放在外邊,先不要啟動定時器,需要的時候再打開,在條件滿足時在關閉,控制定時器的開關就行了。
作者: lkc8210    時間: 2021-10-5 16:44
LYN123188 發表于 2021-10-5 15:43
我現在分析不出原因,希望大佬指點。文件已經補發了

                        if(wl==1)
                        {
                                mode=1;
                                Timert0_init();      //這里按鍵一直按下流水燈一直工作,松手停下。
                        }
                        if(wl==2)
                        {
                                mode=2;
                                Delay(1);             //這里按鍵按下,松開流水燈繼續工作
                                Timert0_init();
                        }
在你第一次貼的代碼中
mode1 和 mode2 的分別就是多了Delay(1);
說個比喻:
Timert0_init();->網貸收錢
Delay(1);->讓你有時間掙錢
mode1:
當你掙到一兩毛的時候網貸收錢把你的戶口清零了,你只好繼續去搬磚
mode2:
Delay(1)讓你有時間掙錢,等你掙到一千零一毛的時候網貸才來收錢,你有一毛留下,立刻走去消費(流水燈位移)

如果有鍵按著
因為鍵按程序中有松開等待
就等于白白延長了還款時間
讓你有錢(時間)去消費(流水燈位移)

然而,在你上傳的Keil 文件中已經在mode1中補回了Delay(1);
別人重現不了你的問題

如何驗證我的比喻?
可以把Delay()函數中的i=2改為i=1(縮短還款期)
就會令到按鍵1和2都要按著才能流水



作者: 45sdf    時間: 2021-10-6 08:53
你的文件不全,需要有 timer0.h 等頭文件的內容才知道是什么問題。
作者: LYN123188    時間: 2021-10-8 15:23
lkc8210 發表于 2021-10-5 16:44
if(wl==1)
                        {
                                mode ...

你好,你說的非常好,就是有一點我不明白,mode1的定時計數一直在清零,我一直按著流水燈流動,我松開他就不動是為什么,不是已經初始化過了嗎
作者: lkc8210    時間: 2021-10-8 21:46
LYN123188 發表于 2021-10-8 15:23
你好,你說的非常好,就是有一點我不明白,mode1的定時計數一直在清零,我一直按著流水燈流動,我松開他 ...

對不起,原來我分析錯了
我上個回覆只找到為什么按著會流水
而沒有找到真正的原因
剛剛再看一次代碼
才發現keynum.c里
反回的keynumber不會清零
只會維持上一次按鍵的數值
引致if(wl==1)不斷成立
不斷初始化,進不了中斷

解決方法是把keynumber放到keynum()內
  1. int keynum()
  2. {
  3. unsigned char keynumber=0;
  4.         if(P3_1==0){Delay(200);while(P3_1==0);Delay(20);keynumber=1;}
  5.         if(P3_0==0){Delay(200);while(P3_0==0);Delay(20);keynumber=2;}
  6.         if(P3_2==0){Delay(200);while(P3_2==0);Delay(20);keynumber=3;}
  7.         if(P3_3==0){Delay(200);while(P3_3==0);Delay(20);keynumber=4;}
  8.         return keynumber;
  9. }
復制代碼

作者: LYN123188    時間: 2021-10-14 15:46
lkc8210 發表于 2021-10-8 21:46
對不起,原來我分析錯了
我上個回覆只找到為什么按著會流水
而沒有找到真正的原因

大佬,照你這么說,按完之后和一直按著應該一個效果啊,為什么一直按著流水燈會動,松開就不行了。
作者: LYN123188    時間: 2021-10-14 15:47
lkc8210 發表于 2021-10-8 21:46
對不起,原來我分析錯了
我上個回覆只找到為什么按著會流水
而沒有找到真正的原因

mode1那里的delay(1)去掉后
作者: LYN123188    時間: 2021-10-14 15:48
LYN123188 發表于 2021-10-14 15:46
大佬,照你這么說,按完之后和一直按著應該一個效果啊,為什么一直按著流水燈會動,松開就不行了。

感謝大佬的細心解答
作者: LYN123188    時間: 2021-10-14 15:51
lkc8210 發表于 2021-10-8 21:46
對不起,原來我分析錯了
我上個回覆只找到為什么按著會流水
而沒有找到真正的原因

大佬,剛開機需要先按一下,然后松開,再一直按就能動,第1下百分百不能動




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 午夜小视频在线观看 | 日韩和的一区二区 | 一级a性色生活片久久毛片 一级特黄a大片 | 一区二区三区播放 | 日韩亚洲一区二区 | 免费观看一级毛片视频 | 国产亚洲欧美在线 | 一区二区三区在线 | 欧 | 日韩欧美精品一区 | 成人国产精品一级毛片视频毛片 | 欧洲一区二区三区 | 天天干天天操天天看 | 欧美视频在线看 | 成人在线视频免费播放 | 91一区二区三区 | 亚洲国产精品一区二区www | 久久99精品久久久久久秒播九色 | 黄网站在线播放 | 国产精品国产三级国产aⅴ无密码 | 久久久福利 | 天天曰天天曰 | 亚洲免费精品 | 日韩在线第一 | 逼逼网 | 午夜精品一区二区三区在线观看 | 99九色| 一区二区精品 | 国产成人99久久亚洲综合精品 | 色久影院 | 精品国产欧美 | 成人综合在线视频 | 国产91在线精品 | 国产乱码精品1区2区3区 | av一区二区三区四区 | 日本一区二区三区在线观看 | 91精品国产色综合久久 | 激情a| 免费黄篇 | av天天爽 | 亚洲免费视频在线观看 | 91在线精品视频 |