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