日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm8s开发(六) EXIT的使用:做一个外部中断的按钮!

發布時間:2025/3/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm8s开发(六) EXIT的使用:做一个外部中断的按钮! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在前幾篇文章,GPIO的使用:點亮LED!中只講述了IO口的輸出,并沒有輸入,因為IO作為輸入我建議采用中斷方式,可以大大減輕CPU的運行時間。最常用的就是按鈕的功能了,當然還有和其他芯片通信的功能。

前篇文章講過GPIO可以通過寄存器設置為中斷輸入。(參考http://blog.csdn.net/devintt/article/details/50818494

配置模式DDRCR1CR2配置模式上拉電阻
輸入000懸浮輸入?OFF
010上拉輸入ON
001中斷懸浮輸入?OFF
011中斷上拉輸入ON
輸出100開漏輸出?OFF
110推挽輸出
1x1輸出(最快速度10MHZ)?
xxx真正的開漏輸出未采用

這里我們選用PC3作為外部中斷

  • void EXIT_GPIO_Init(void)
  • {
  • PC_DDR &= 0xf7;
  • PC_CR1 |= 0x08; // 將PC3設置成中斷上拉輸入
  • PC_CR2 |= 0x08;
  • EXTI_CR1 = 0x20; //PC設置為下降沿觸發
  • }

  • 這里需要注意的是,中斷向量指定的是PC,也就是說 如果有幾個PC口都設置為中斷的話,只要其中一個中斷響應,就會進入同一個函數 。

    如果你有好幾個按鍵在同一個port口的話,可以在進入中斷函數之后做一個IO口狀態的獲取,判定哪個IO進行了中斷,再對應相應的操作。

  • #pragma vector = EXIT_PORTC_vector //0x07
  • __interrupt void EXIT_PORTC_RQHandler(void) //中斷服務函數
  • {
  • if((PC_IDR & 0x08)==0)
  • {
  • delay_nms(50); //延時50ms,消抖
  • if((PC_IDR & 0x08)==0) //再判斷是否按下
  • {
  • while(!(PC_IDR & 0x08)); //松手檢測
  • //TODO
  • }
  • }
  • }
  • 由于使用了機械按鈕,一般都會有一個機械抖動的過程,所以進入了中斷函數之后,我們先做一個消抖處理,這樣就可以判斷按鈕的狀態,同時也防止抖動造成了多次中斷函數的反復進入。最后加入松手檢測,判定按鈕動作完成。(TODO這里就可以加入你需要的操作了)

    總結

    以上是生活随笔為你收集整理的stm8s开发(六) EXIT的使用:做一个外部中断的按钮!的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。