![]() |
發布時間: 2021-7-9 10:04
正文摘要:上圖我做的,平均1秒轉一圈,每轉一圈磁鐵觸發傳感器輸出一個低電平, 若 3秒內檢測不到觸發電平就證明電機卡主了。輸出信號控制電機停止,朋友們,怎么寫個程序呢?求的思路,謝謝! sbit KEY1=P2^0; ... |
你把霍爾傳感器的引腳接到外部中斷上,用中斷檢測下降沿 |
|
|
#include "STC12C52xx.H" //根據實際芯片修改頭文件 #define Delay_Time 200 //(需要檢測時間(單位:秒) - 1) * 100 sbit Key = P2^0; //修改需要檢測引腳 unsigned int Counter = 0; unsigned char Key_Loop = 0; //----------------------------------------------- void Timer0_Init() //12MHz 10ms { AUXR &= 0x7F; TMOD |= 0x01; TL0 = 0xF0; TH0 = 0xD8; TR0 = 1; ET0 = 1; } void Read_Key() { switch(Key_Loop) { case 0: { if(!Key) { Counter = 0; } else if(Counter >= Delay_Time) { Key_Loop = 1; } break; } case 1: { //加入電機堵轉后的處理程序 break; } default: { Key_Loop = 0; break; } } } void main(void) { P2M1 |= (1<<0); //將檢測引腳設置為高阻輸入 P2M0 &= ~(1<<0); //將檢測引腳設置為高阻輸入 Timer0_Init(); EA = 1; while (1) { Read_Key(); } } void tm0_isr() interrupt 1 //定時器每10ms中斷一次 { TL0 = 0xF0; TH0 = 0xD8; Counter++; } |
shumivan 發表于 2021-7-9 16:22 來一段代碼。我參考參考。謝謝 |
使用外部中斷,設置為上升沿和下降沿觸發,那么就可以完整地提取出脈沖的寬度 |
1543330241 發表于 2021-7-9 12:42 百度搜破了也沒有找到相關例子, 大師,來個例子。這樣我也學會了。全網的人也學會了。不勝感激 |
你把霍爾傳感器的引腳接到外部中斷上,用中斷檢測下降沿 |