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

標題: STC12C5A60單片機寫的一個用定時器消抖,有點問題請指教 [打印本頁]

作者: hxszrb    時間: 2020-3-7 16:41
標題: STC12C5A60單片機寫的一個用定時器消抖,有點問題請指教
定義一個按鍵和一個LED,按一下按鍵LED亮再按一下LED滅,用定時器消抖。下載后試了,可以實現但有時需要按好幾下才會亮或滅,不知是哪里代碼有問題
--------------------------------下面是main.c文件----------------------------------
#include <reg52.h>
#include <dingyi.h>
#include <timer.h>

void main(void)
{  
          LED=1;
        
   timer0();
         
         while(1){  anjian_0();   }
}


--------------------------下面是timer.c文件--------------------------------

#include <reg52.h>
#include <dingyi.h>

void anjian_0(void)
{
   if(KEY==0)
         {
            TR0  = 1;        //啟動定時器0
         }
}

void anjian_1(void)
{
        
  while(1){ if(KEY==0)    LED=~LED;   }
         
}
void timer0(void)      //配置定時器0
{
   TMOD &= 0xf0;      
         TMOD |= 0x01;    //TMOD 是定時器選擇及工作方式選擇,此是選擇定時器0工作在方式1,16位計數器
         TH0  = 0xF8;        //給高8位賦初值
         TL0  = 0xCC;         //給低8位賦初值
//         TR0  = 1;        //啟動定時器0
         ET0  = 1;        //開定時器0中斷
         EA   = 1;        //開總中斷
}

void timer0zd(void) interrupt 1    //定時器0中斷標志
{
  //static uchar i=0;
         TH0  = 0xF8;
         TL0  = 0xCC;
         LED=0;
         TR0=0;
         anjian_1();
}



作者: tyrl800    時間: 2020-3-7 17:28
看你的程序真費勁,按鍵去抖就三條語句的事情
作者: hantu    時間: 2020-3-7 20:29
那你這個根本無須中斷嘛,搞復雜還寫錯了去了
作者: hxszrb    時間: 2020-3-7 21:17
tyrl800 發表于 2020-3-7 17:28
看你的程序真費勁,按鍵去抖就三條語句的事情

是因為我要用這個來實現其它功能,而我想要的功能說起來費勁。這個說著簡單點,
作者: wulin    時間: 2020-3-8 07:19
hxszrb 發表于 2020-3-7 21:17
是因為我要用這個來實現其它功能,而我想要的功能說起來費勁。這個說著簡單點,

使用定時器中斷服務函數的一般要求:函數中任務盡可能簡短,俗稱打一槍就跑,不可久留。更不能接近或大于中斷周期。不是必須不要在中斷函數中執行具體任務,只要設置個標志,具體任務放在main函數主循環中完成。更不能調用帶有阻滯型延時函數和while(1)死循環的子函數。在中斷任務沒有完成前CPU不會響應再入中斷請求。除非有更高優先級中斷才能打斷此中斷。
作者: hxszrb    時間: 2020-3-8 12:22
wulin 發表于 2020-3-8 07:19
使用定時器中斷服務函數的一般要求:函數中任務盡可能簡短,俗稱打一槍就跑,不可久留。更不能接近或大于 ...

非常感謝你的解釋,學習了。也大概知道我這個問題在那了,非常感謝




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