STC15F104W单片机测量脉冲高电平时间代码
时间: 2023-09-28 10:10:14 浏览: 89
以下是基于STC15F104W单片机的测量脉冲高电平时间的代码:
```c
#include <STC15F104W.h>
#define TRIG P1_2
unsigned long pulse_width = 0;
void delay_us(unsigned int us)
{
unsigned char i;
while(us--)
{
for(i = 0; i < 12; i++);
}
}
void delay_ms(unsigned int ms)
{
unsigned char i, j;
while(ms--)
{
for(i = 0; i < 20; i++)
{
for(j = 0; j < 110; j++);
}
}
}
void timer0_init()
{
TMOD &= 0xF0; //设置定时器0为模式1, TH0的高4位为计数值
TMOD |= 0x01;
TH0 = 0;
TL0 = 0;
TR0 = 1; //启动定时器0
}
void main()
{
TRIG = 0; //将TRIG设置为低电平
delay_ms(1000); //等待传感器稳定
while(1)
{
TRIG = 1; //将TRIG设置为高电平
delay_us(10); //等待10us
TRIG = 0; //将TRIG设置为低电平
while(!INT0); //等待INT0中断触发
TR0 = 0; //停止计时器0
pulse_width = TH0 * 256 + TL0; //计算脉冲宽度
TH0 = 0;
TL0 = 0;
TR0 = 1; //重新启动定时器0
//将脉冲宽度传输到其他设备或进行其他操作
}
}
```
在上述代码中,我们使用定时器0来测量脉冲的高电平时间。在主函数中,我们先将TRIG设置为低电平,并等待传感器稳定。然后不断执行测量脉冲宽度的操作。在操作中,我们先将TRIG设置为高电平,等待10us后将其设置为低电平,然后等待INT0中断触发。当INT0中断触发时,表示脉冲已经结束,我们停止定时器0并计算脉冲宽度。最后,我们将脉冲宽度传输到其他设备或进行其他操作。
阅读全文