STC15F104W单片机测量外部中断输入脉冲高电平时间代码
时间: 2023-09-28 10:10:17 浏览: 138
以下是一个简单的STC15F104W单片机测量外部中断输入脉冲高电平时间的代码示例:
```c
#include <stc15.h>
// 定义外部中断引脚和计数器
sbit INT_PIN = P3^2;
unsigned int counter = 0;
// 定义延时函数
void delay(unsigned int n) {
while(n--);
}
// 中断服务函数
void int_isr(void) interrupt 0 {
if (INT_PIN == 1) {
TR0 = 1; // 开始计时
} else {
TR0 = 0; // 停止计时
counter = (TH0 << 8) | TL0; // 读取计时器值
TH0 = 0;
TL0 = 0;
}
}
// 主函数
void main() {
// 初始化定时器0
TMOD = 0x01; // 16位定时器
TH0 = 0;
TL0 = 0;
// 初始化外部中断0
IT0 = 1; // 下降沿触发
EX0 = 1; // 开启中断
EA = 1; // 开启总中断
while(1) {
// 测量完成后输出计数器值
if (counter != 0) {
// 将计数器值转换为时间(假设使用12MHz晶振)
unsigned int time_us = counter * 8;
counter = 0;
// 输出时间
// TODO: 输出到LCD或串口等设备
}
delay(1000); // 延时1秒
}
}
```
该代码通过定时器0来测量脉冲高电平时间,并通过外部中断0来触发测量。当外部中断0触发时,定时器0开始计时,当外部中断0再次触发时,定时器0停止计时并读取计时器值。计时器值可以表示脉冲高电平时间,通过转换可以得到实际时间。在主循环中,可以通过输出到LCD或串口等设备来显示测量结果。
阅读全文