如何实现单片机实时测量输入中断口的脉冲宽度
1个回答
展开全部
您好!可以分以下几步来解决这个问题!
1、首先设置一个定时器,1us中断一次,然后每次中断检测IO的电平。
2、在定时中断函数内定义一个static 的int类型静态变量 count;
3、每次检测到IO口为高电平(假设为高电平脉冲)的时候,count++;
4、在IO口重新回到低电平的时候,count的值就是时间了,比如count为1000,那么脉冲宽度就是1000*1us=1ms
5、在读取count的值之后,复位count为0;继续测量下一个脉冲宽度。
纯手打,给个采纳呗~
1、首先设置一个定时器,1us中断一次,然后每次中断检测IO的电平。
2、在定时中断函数内定义一个static 的int类型静态变量 count;
3、每次检测到IO口为高电平(假设为高电平脉冲)的时候,count++;
4、在IO口重新回到低电平的时候,count的值就是时间了,比如count为1000,那么脉冲宽度就是1000*1us=1ms
5、在读取count的值之后,复位count为0;继续测量下一个脉冲宽度。
纯手打,给个采纳呗~
更多追问追答
追问
您的意思是给定时器计数器0设置1us的初值,然后当中断0为高电平时,开启中断,开启定时器,请问count怎么定义的EA=1;
TMOD=0x01;
TH0=(65535-10)/256;
TL0=(65535-10)%256;
while(!P32)
ET0=1;
TR0=1; 然后count怎么计时啊?
追答
在定时器中断函数里设置一个静态变量
static int count = 0;
if(P10 ==1)//若高电平,count增加
{
count++;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询