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

標題: 單片機外部中斷計數時消除抖動的方法 很好用 [打印本頁]

作者: forest415    時間: 2021-3-20 19:59
標題: 單片機外部中斷計數時消除抖動的方法 很好用
馬達上轉一圈會壓到限位開關然后發一個+12的電壓,我用7805接的取一個5V電壓用來連單片機,聽說這樣的話共地會有影響有干擾然后我又加了個光藕,現在開關抖動的問題搞了半天也沒搞好都是用延時的教程但用延時又影響CPU和其它事件的執行,偶然發現大神們有用電容來做硬件延時的我也照著弄了一個簡直太好了,發來給大家看下。

一個12V的東東怎么和5V的單片機簡單相連呢我的這種方法可以嗎?或者有其它什么更好的方法嗎?希望大神們幫我一下。還有雖然用了電容可是程序里還得寫延時雖然時間很短,要是不寫延時的話有機率會出現該亮不亮,不亮又亮的情況,怎么才能避免呢?

電路原理圖如下:


單片機源程序如下:
  1. #include<reg52.h>
  2. sbit LED=P1^0; //定義LED端口

  3. void DelayUs2x(unsigned char t);//us級延時函數聲明
  4. void DelayMs(unsigned char t); //ms級延時

  5. main()
  6. {
  7.   LED=0;         //LED燈點亮
  8.   EA=1;          //全局中斷開
  9.   EX1=1;         //外部中斷1開
  10.   IT1=1;         //IT1=1表示邊沿觸發
  11.   while(1)
  12.   {
  13.                  
  14.   }
  15. }


  16. void ISR_INT1(void) interrupt 2
  17. {

  18. if(!INT1)
  19.    {
  20.    DelayMs(20);//在此處可以添加去抖動程序,防止按鍵抖動造成錯誤
  21.    if(!INT1)
  22.    //while(!INT1);//等待按鍵釋放
  23.      {
  24.      LED=!LED;   
  25.      }
  26.    }
  27. }


  28. void DelayUs2x(unsigned char t)
  29. {   
  30. while(--t);
  31. }

  32. void DelayMs(unsigned char t)
  33. {
  34.      
  35. while(t--)
  36. {
  37.      //大致延時1mS
  38.      DelayUs2x(245);
  39.          DelayUs2x(245);
  40. }
  41. }
復制代碼


作者: xxpp2011    時間: 2021-3-20 21:37
可以用繼電器控制12V的電機
作者: forest415    時間: 2021-3-20 21:51
xxpp2011 發表于 2021-3-20 21:37
可以用繼電器控制12V的電機

12V的電機要返回信號的,控制我就用繼電器,返回信號的過程弄不好了
作者: 人人學會單片機    時間: 2021-3-20 23:04
你可以參考 框架式編程方式 學會少用死等延遲

作者: liugao888    時間: 2021-3-20 23:06
限位開關輸出out直接接光耦,中間串電阻限流,在光耦兩端加電容濾波消抖
作者: liugao888    時間: 2021-3-20 23:12
如果一定要延時消抖,可以使用定時器延時。外部中斷進去啟動定時器,定時時間到了以后再檢測電壓。
作者: wulin    時間: 2021-3-21 08:02
機械開關肯定會有抖動問題,用硬件或軟件濾波對于低速或對響應速度要求不高的場合沒有什么問題。否則得用光電或霍爾較佳。




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