久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 關(guān)于單片機(jī)程序運(yùn)行和中斷處理的疑惑 [打印本頁]

作者: HelloPan111    時間: 2018-11-28 13:38
標(biāo)題: 關(guān)于單片機(jī)程序運(yùn)行和中斷處理的疑惑
今天在做按鍵的長短按的程序時,突然有了疑惑。
我的程序流程是:定時器每隔50ms定時一次,計數(shù)器標(biāo)志加1,主程序中判斷計數(shù)器的值,大于60表示按鍵按下到松開時間為3s,判定為長按。
主程序示例代碼:
main(){
     ...
     ...
    while(1){
         if(按鍵按下){
                 開啟定時器;
                 while(等待按鍵松開);
                 關(guān)閉定時器;

                 判斷長短按;
          }

    }
}


我的疑惑是:假如我現(xiàn)在是1s的短按。我的定時中斷程序50ms執(zhí)行一次,我的主程序中在等待按鍵松開需要1s中,是不是說我的程序在這個地方一直等待1s?這時候我的單片機(jī)運(yùn)行情況是什么樣?
如果是一直等待中不干別的,那這種方法對單片機(jī)的利用效率也太低了吧。

作者: qq1965880301    時間: 2018-11-28 14:59
按照你這樣的代碼,主程序就是這么執(zhí)行的。
由于你哪個while(等待按鍵松開)語句,主程序會一直在這個循環(huán)執(zhí)行,直到你按鍵松開,然后跳出循環(huán),接著就是定時器關(guān)閉。
在定時器開始,到關(guān)閉,這段時間,定時器是一直以你定的頻率運(yùn)行的。
然后就是檢測你的按鍵是否達(dá)到3s,按照你的描述,是不足3s的,判斷為短按。
作者: dzbj    時間: 2018-11-28 15:04
不能這么寫吧 while會造成死等

如果 按鍵按下
并且 清零標(biāo)記=0(防止反復(fù)清零計數(shù)器)
{
  如果 清零標(biāo)記=0
  置位 清零標(biāo)記
  清零 計數(shù)器變量(清零后累加的時間即按鍵按下的時間)
}

如果 清零標(biāo)記=1
{
  如果 按鍵松開
{
   比較計數(shù)器值
  {
     如果 計數(shù)器<設(shè)定值
     {短按}
     否則
    {長按}
    清零 清零標(biāo)記(可以再次清零)
   }
}
}

大概的邏輯順序 用for和while的延時基本都是死等 會影響其它步驟工作 尤其是程序?qū)懘罅?盡量養(yǎng)成少用這種方法的習(xí)慣吧 這方法多是初學(xué)為了容易理解 或者在不重要的地方做很短的延時才會用 你這成秒的等通常不這么搞

作者: dsg19951995    時間: 2018-11-28 15:23
在這1s內(nèi)你給它設(shè)定為等待按鍵松開了呀
作者: xuyaqi    時間: 2018-11-28 15:31
你不要 while(一直等待按鍵松開);而是50ms來讀一次鍵狀態(tài),如果還在按下狀態(tài)就繼續(xù)計數(shù),否則停止計數(shù),這樣除了讀數(shù),處理這段時間外,還可以干別的事。
作者: HelloPan111    時間: 2018-11-28 16:02
dzbj 發(fā)表于 2018-11-28 15:04
不能這么寫吧 while會造成死等

如果 按鍵按下

感謝回答,我就是煩惱死等的問題,這樣我的其他處理要等很長時間,對實(shí)際的應(yīng)用來說是不能接受的。
但是你說的這種控制邏輯我還是不太明白,我怎么檢測我的按鍵何時松開的呢?
作者: 看交際    時間: 2018-11-28 16:03
你好,可不可以把程序發(fā)出來。
作者: HelloPan111    時間: 2018-11-28 16:08
xuyaqi 發(fā)表于 2018-11-28 15:31
你不要 while(一直等待按鍵松開);而是50ms來讀一次鍵狀態(tài),如果還在按下狀態(tài)就繼續(xù)計數(shù),否則停止計數(shù),這 ...

謝謝,這也是一種方法,有沒有效率更高的方法呢,因?yàn)槲业恼麄程序要做的事情很多,所以一個循環(huán)周期越短越好
作者: zeroL    時間: 2018-11-28 16:22
在短按一秒的時間內(nèi),你可以做其他事。但是你一直按就有問題了。程序沒有處理好。
作者: Y_G_G    時間: 2018-11-28 17:28
非得是延時嗎?
比如:按鍵按下一次,進(jìn)行一次ADC,把ADC運(yùn)行的時長當(dāng)成是延時,又可以去抖動又可以延時,又不浪費(fèi)MCU的時鐘,還沒有松開的話,再進(jìn)行一次ADC,這不就節(jié)省資源了嗎
作者: HelloPan111    時間: 2018-11-29 09:09
Y_G_G 發(fā)表于 2018-11-28 17:28
非得是延時嗎?
比如:按鍵按下一次,進(jìn)行一次ADC,把ADC運(yùn)行的時長當(dāng)成是延時,又可以去抖動又可以延時, ...

是這樣的,我做的這個產(chǎn)品按鍵比較多,單片機(jī)資源有比較緊張,所以按鍵都是普通讀IO口的方式。
作者: HelloPan111    時間: 2018-11-29 10:27
感謝各位的回答,在網(wǎng)上看到關(guān)于利用狀態(tài)機(jī)處理按鍵的思想,覺得是個不錯的方法,這里分享下
https://blog.csdn.net/xiaocheng_sky/article/details/52146083




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品国产一区二区 | 日韩精品一区二区三区在线观看 | 国产美女一区 | 91精品欧美久久久久久久 | 久草精品视频 | 国产精品日韩欧美一区二区三区 | 亚洲一区二区久久 | 久久高清| 免费成人在线网站 | 国产精品伦理一区 | 成人一区av偷拍 | 成人在线视频网 | 日韩在线视频网址 | 欧美电影大全 | 久久男女视频 | 美女爽到呻吟久久久久 | av毛片| 日韩美女一区二区三区在线观看 | 一区日韩| 伊人久久免费视频 | 夜夜夜夜夜夜曰天天天 | www.色53色.com | 日韩中文字幕2019 | 亚洲免费视频网址 | 亚洲免费网址 | 中文字幕日韩欧美 | 日韩精品一区二区三区 | 国产在线播放一区二区三区 | 国产精品一卡二卡三卡 | 欧美精品在线一区二区三区 | 99精品视频在线 | 日韩欧美一区二区三区免费观看 | 在线成人免费视频 | 午夜视频在线观看网址 | 爱综合 | 一级网站| 理论片免费在线观看 | 狠狠爱网址 | 精品国产一区探花在线观看 | 亚洲精品国产一区 | 999国产精品视频免费 |