STC89C52单片机控制发动机转速代码
时间: 2023-09-03 17:16:34 浏览: 52
以下是一个简单的STC89C52单片机控制发动机转速的代码示例:
```c
#include <reg52.h>
// 定义端口及常数
#define FREQ_IN P3_2
#define FREQ_OUT P3_3
#define MAX_FREQ 65535
// 定义变量
unsigned int freq = 0;
unsigned char speed = 0;
// 延时函数
void delay(unsigned int n) {
unsigned int i, j;
for (i = n; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
// 定时器0中断服务函数
void timer0_isr() interrupt 1 {
TH0 = (MAX_FREQ - freq) / 256;
TL0 = (MAX_FREQ - freq) % 256;
FREQ_OUT = !FREQ_OUT;
speed = freq / 20; // 每20ms计算一次转速
freq = 0;
}
// 外部中断0服务函数
void ext0_isr() interrupt 0 {
freq++;
}
// 主函数
void main() {
TMOD = 0x01; // 定时器0工作在模式1,16位定时器
TH0 = 0;
TL0 = 0;
EA = 1; // 开启总中断
ET0 = 1; // 开启定时器0中断
EX0 = 1; // 开启外部中断0
IT0 = 1; // 外部中断0触发方式为下降沿触发
TR0 = 1; // 启动定时器0
while (1) {
delay(100); // 延时100ms
}
}
```
上述代码的原理是通过外部中断来计算发动机每秒的脉冲数,然后根据计算出的脉冲数来控制定时器0的频率,从而控制发动机的转速。在定时器0中断服务函数中,每20ms计算一次转速,并将结果存储到speed变量中。在主函数中可以根据需要进行相应的处理,比如输出转速值到LCD显示屏上。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)