基于STC8H8K的HC-SR04超声波测距模块代码使用定时器1
时间: 2024-02-19 19:58:33 浏览: 86
HAL库实现定时器实现多个超声波(HC-SR04)测距
5星 · 资源好评率100%
好的,下面是基于STC8H8K的HC-SR04超声波测距模块代码使用定时器1:
```c
#include <reg52.h>
sbit Trig = P2^0; // 发射引脚
sbit Echo = P2^1; // 接收引脚
unsigned char time_high; // 定时器高8位
unsigned char time_low; // 定时器低8位
void timer1_init() // 定时器1初始化
{
TMOD |= 0x10; // 工作模式设置为16位定时器模式
TH1 = 0x00; // 定时器初值设为0
TL1 = 0x00;
ET1 = 1; // 开启定时器1中断
TR1 = 1; // 启动定时器1
EA = 1; // 开启总中断
}
void main()
{
timer1_init(); // 定时器1初始化
while (1)
{
Trig = 1; // 发射超声波
delay_ms(10); // 等待10毫秒
Trig = 0;
while (!Echo); // 等待Echo变高
TR1 = 1; // 启动定时器1
while (Echo); // 等待Echo变低
TR1 = 0; // 关闭定时器1
unsigned int dis = (time_high<<8) | time_low; // 计算距离
dis = dis / 58; // 距离换算,单位为cm
// 这里可以将距离输出到LCD屏幕或者串口等
}
}
void timer1_isr() interrupt 3 // 定时器1中断服务程序
{
time_high = TH1; // 保存定时器高8位
time_low = TL1; // 保存定时器低8位
TH1 = 0x00; // 定时器复位
TL1 = 0x00;
}
```
这段代码实现了通过HC-SR04超声波测距模块进行距离测量,并且使用定时器1来计时,最后将距离输出到LCD屏幕或者串口等。其中定时器1的计时时间为1微秒,所以每个计数器的值代表1微秒。
阅读全文