设MCS51单片机的晶振fosc=6MHz,试对定时器T1初始化,使之工作在模式2,产生200微秒的定时,并用查询T1溢出标志位的方法,控制P1.0输出周期为2ms的方波。
时间: 2024-05-08 15:17:17 浏览: 215
由于fosc=6MHz,所以每个机器周期为1/6MHz=166.67ns。
要产生200微秒的定时,需要计数的数值为:
200微秒/166.67ns=1200
因为MCS51单片机的定时器T1是16位的,所以计数器的初值为:
65535-1200+1=64336
在模式2下,T1的计数器值从初始值开始计数,直到溢出,再从初始值重新开始计数。因此,T1的中断周期为:
65536*166.67ns=10.922ms
为了控制P1.0输出周期为2ms的方波,每隔5个T1的中断周期(5*10.922ms=54.61ms)取反一次P1.0的电平即可。具体实现代码如下:
```c
#include <reg52.h>
void init_timer1() {
TMOD |= 0x10; // 设置T1为模式2
TH1 = 0xFC; // 设置计数器初值为64336
TL1 = 0x00;
EA = 1; // 允许中断
ET1 = 1; // 允许T1中断
TR1 = 1; // 启动T1
}
void timer1_ISR() interrupt 3 {
static unsigned char cnt = 0;
static bit level = 0;
TF1 = 0; // 清除T1中断标志位
cnt++;
if (cnt == 5) { // 每5个T1中断周期取反一次P1.0
cnt = 0;
level = !level;
P1_0 = level;
}
}
int main() {
init_timer1();
while (1);
return 0;
}
```
阅读全文