你把霍尔传感器的引脚接到外部中断上,用中断检测下降沿 |
|
|
#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 百度搜破了也没有找到相关例子, 大师,来个例子。这样我也学会了。全网的人也学会了。不胜感激 |
你把霍尔传感器的引脚接到外部中断上,用中断检测下降沿 |