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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

在前幾篇文章,GPIO的使用:點(diǎn)亮LED!中只講述了IO口的輸出,并沒(méi)有輸入,因?yàn)镮O作為輸入我建議采用中斷方式,可以大大減輕CPU的運(yùn)行時(shí)間。最常用的就是按鈕的功能了,當(dāng)然還有和其他芯片通信的功能。

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

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

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

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

  • 這里需要注意的是,中斷向量指定的是PC,也就是說(shuō) 如果有幾個(gè)PC口都設(shè)置為中斷的話,只要其中一個(gè)中斷響應(yīng),就會(huì)進(jìn)入同一個(gè)函數(shù)

    如果你有好幾個(gè)按鍵在同一個(gè)port口的話,可以在進(jìn)入中斷函數(shù)之后做一個(gè)IO口狀態(tài)的獲取,判定哪個(gè)IO進(jìn)行了中斷,再對(duì)應(yīng)相應(yīng)的操作。

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

    總結(jié)

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

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。