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

標題: STC15單片機外部中斷僅上升沿觸發的方法 [打印本頁]

作者: August_cwj    時間: 2017-9-27 15:04
標題: STC15單片機外部中斷僅上升沿觸發的方法
STC15系列單片機的外部中斷0(INT0)和外部中斷1(INT1)的觸發有兩種方式,上升沿和下降沿均可觸發方式和僅下降沿觸發方式。在實際應用中,有時候需要上升沿觸發。這時有兩種方案可以解決。
1.將觸發方式設置成僅下降沿觸發。當外部電路產生一個上升沿時,通過硬件電路加一個三極管進行反向變成下降沿。
2.這種方法不需要改變硬件電路。將觸發方式設置成上升沿和下降沿均可觸發方式。外部中斷產生一個上升沿時,進入中斷服務函數,這時在中斷服務函數里做進一步處理,檢測當前INT0的電平狀態。如果是高電平,則判斷為上升沿。如果是低電平,則判斷為是下降沿。
注意(很重要!): 進入中斷服務函數后,一定要延時幾個毫秒再去做電平檢測。因為不管是上升沿還是下降沿,都不可能是在一個瞬間完成的,中間會經歷一個從高(低)到低(高)的過程。
如果進入中斷服務函數就立刻檢測,可能當時電平還沒有達到滿足高或低電平的默認電壓值或者處于高和低之間的臨界電壓狀態,很可能出現誤判的現象。這樣做的目的是讓跳變后的電平達到穩定狀態再檢測,說白了就是一個去抖動的過程。
下面把初始化和中斷服務函數的代碼貼出來:
  1. void Initial_INT0(void)
  2. {
  3.         INT0=0;
  4.         IT0=0;      // 設置成上升沿和下降沿均觸發
  5.         EX0=1;      //使能INT0中斷
  6.         EA=0;
  7. }

  8. void exint0() interrupt 0  //外部中斷入口
  9. {
  10.         delay_ms(50);       //延時消抖
  11.         if(INT0==1)     //如果檢測到INT0=1,則判斷為上升沿
  12.         {
  13.                 led=0;
  14.                 delay_ms(500);
  15.                 led=1;
  16.         }                                 
  17.         else
  18.             led=1;
  19. }
復制代碼
在實際做東西的過程中遇到的一個小問題,希望對你有幫助。


作者: penjun71    時間: 2018-3-20 10:27
延時50ms 太浪費單片機的時間了吧,而且外部中斷速度都很快,會不會檢測不到下一個中斷





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