已知振荡频率为12MHz,用定时器/计数器T0,工作于方式1,实现从P1.0口输出周期为2004ms的方波。用c语言,用中断方式和用查询方式编制程序84c51
时间: 2024-05-02 20:17:13 浏览: 321
使用中断方式的程序:
```c
#include <regx52.h>
unsigned int count = 3686; // 定时器初值,计算公式:65536 - (2000000 / (2 * 12) = 3686
void timer0_init() {
TMOD |= 0x01; // T0工作于方式1
TH0 = count / 256; // 定时器初值高8位
TL0 = count % 256; // 定时器初值低8位
TR0 = 1; // 启动定时器
ET0 = 1; // 允许定时器T0中断
EA = 1; // 允许总中断
}
void timer0_isr() interrupt 1 {
static unsigned char flag = 0;
TH0 = count / 256; // 定时器初值高8位
TL0 = count % 256; // 定时器初值低8位
flag = !flag;
P1_0 = flag; // 设置P1.0口输出方波
}
void main() {
timer0_init();
while (1);
}
```
使用查询方式的程序:
```c
#include <regx52.h>
unsigned int count = 3686; // 定时器初值,计算公式:65536 - (2000000 / (2 * 12) = 3686
void timer0_init() {
TMOD |= 0x01; // T0工作于方式1
TH0 = count / 256; // 定时器初值高8位
TL0 = count % 256; // 定时器初值低8位
TR0 = 1; // 启动定时器
}
void main() {
unsigned char flag = 0;
timer0_init();
while (1) {
if (TF0) { // 判断定时器T0是否溢出
TF0 = 0; // 清除溢出标志
TH0 = count / 256; // 定时器初值高8位
TL0 = count % 256; // 定时器初值低8位
flag = !flag;
P1_0 = flag; // 设置P1.0口输出方波
}
}
}
```
阅读全文