51单片机超声波用完定时器0后,还可以用定时器0计时吗而且不影响主函数,如果可以代码怎么写
时间: 2024-03-09 18:51:20 浏览: 38
可以使用定时器0计时,但需要重新配置定时器0的工作模式和计时时间。下面是一个示例代码:
```c
#include <reg51.h>
sbit TRIG = P1^0; // 超声波模块的触发引脚
sbit ECHO = P1^1; // 超声波模块的回响引脚
unsigned int time_count; // 定时器计时变量
void init_timer0() {
TMOD &= 0xF0; // 清空定时器0的工作模式
TMOD |= 0x01; // 设置定时器0为模式1(16位定时器)
TH0 = 0xFC; // 定时器0计时初值,定时1ms
TL0 = 0x18;
ET0 = 1; // 允许定时器0中断
TR0 = 1; // 启动定时器0
}
void timer0_isr() interrupt 1 {
time_count++; // 定时器计时变量加1
}
void main() {
init_timer0(); // 初始化定时器0
while(1) {
// 超声波测距函数,需要用到定时器计时变量
// ...
}
}
```
在上面的代码中,我们重新配置了定时器0的工作模式为模式1,计时时间为1ms。在主函数中,我们可以通过超声波测距函数利用定时器计时变量进行计时,而定时器0的计时不会受到影响。当定时器0计时器溢出时,中断函数`timer0_isr()`会被触发,更新定时器计时变量的值。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)