|
發(fā)布時間: 2022-7-19 11:32
正文摘要:想要實現(xiàn)的功能同步檢測和輸出,檢測到充電3次高電平,IO口開啟輸出高電平等待200ms關(guān)閉輸出,充電工作原理必須開關(guān)一次,才能繼續(xù)循環(huán)充電,太菜了沒寫出來,退而求其次寫了一個 檢測3次 定時器定時3s開啟IO口輸出 ... |
| 樓上的,用心去評論,非常到位非常牛逼。我很少夸人,不得不給你點贊。 |
|
其實這個是可以很簡單的去實現(xiàn)的,你這個搞得看起來好恐怖方便的話,把硬件電路上傳一下,把涉及商業(yè)機密抹去就行如果是直接檢測充電電源的話,中斷是一定會有抖動的 那么,中斷被觸發(fā)之后,只作清除標(biāo)志位和置位一個觸發(fā)標(biāo)志位,用來告訴主程序:充電線插入或者拔出了,并清除定時器控制的某個變量 主函數(shù)再通過定時器變量和觸發(fā)標(biāo)志位來進行操作 這是我一個8051的充電檢測,只有高電平充電檢測,沒有拔出檢測,但原理是差不多的,你參考一下就知道了 如果是要檢測插入和拔出,就增加對應(yīng)的檢測就可以了 KEY為中斷端口 void main(void) { Mcu_Rst(); //單片機初始化 while(1) { if(key_press&&(key_10ms>=30)&&KEY)key_disp(); //處理 //key_press中斷觸發(fā)標(biāo)志位,只在key_disp();函數(shù)中清除 } } //─────────────────────────────────────────────── void Int0_isr() interrupt 0 //外部中斷0 { key_press=1; //中斷觸發(fā) key_10ms=0x00; //每次進入中斷都清除定時器變量,這樣定時器就會在抖動之后才開始計時,從最后一次退出中斷開始計時 IE0=0;//清除中斷標(biāo)志位 } //──────────────────────────────────────────────── void key_disp()//處理 { key_press=0; //清標(biāo)志位 } |
lkc8210 發(fā)表于 2022-7-19 13:31 time_3s_ok置1 只有在定時器中斷到時間后才置1 其余代碼都是配置 設(shè)置不影響 目前功能就是寫了我上面發(fā)的這些,我把定時器中斷的代碼也發(fā)出來
|
|
代碼不全 單看你提供的代碼 KG在三秒內(nèi)只會出現(xiàn)一次高電平 懷疑time_3s_ok被重復(fù)置1 |
Powered by 單片機教程網(wǎng)