LPC2000中利用定时器/计数器 0 进行系统定时,完成下面各部分内容 (Fpclk=11.0592MHZ)。 (1)写出定时器时钟为 2 分频,实现定时 1 秒时长的定时器初始化程序。 (2)写出定时器时钟不分频的情况下,使用T0TC代替T0TCR,每两秒时长利用外部匹配 0 实现匹配输出为方 波的初始化程序。 3)写出定时器时钟为不分频,测量下图脉冲宽度的程序段。
时间: 2024-02-16 10:00:07 浏览: 110
使用定时器0以方式1产生周期为20ms的等宽正方波连续脉冲,并由P1.2输出,以查询方式完成。
(1)定时器时钟为2分频,实现定时1秒时长的定时器初始化程序:
```c
#include <lpc214x.h>
void timer0_init(void) {
T0CTCR = 0x0; // 选用定时器模式
T0PR = 0x0; // 定时器不分频
T0MR0 = 11059200 * 2 - 1; // 定时1秒
T0MCR = 0x3; // 设置为复位模式
T0TCR = 0x1; // 定时器0开始计时
}
```
(2)定时器时钟不分频的情况下,使用T0TC代替T0TCR,每两秒时长利用外部匹配0实现匹配输出为方波的初始化程序:
```c
#include <lpc214x.h>
void timer0_init(void) {
T0CTCR = 0x0; // 选用定时器模式
T0PR = 0x0; // 定时器不分频
T0MR0 = 11059200 * 2 - 1; // 定时2秒
T0MCR = 0x2; // 设置为中断模式
T0EMR = 0x5; // 外部匹配0输出为方波
T0TCR = 0x1; // 定时器0开始计时
}
```
(3)定时器时钟为不分频,测量脉冲宽度的程序段:
```c
#include <lpc214x.h>
unsigned int pulse_width = 0;
void timer0_init(void) {
T0CTCR = 0x0; // 选用定时器模式
T0PR = 0x0; // 定时器不分频
T0MCR = 0x4; // 设置为停止模式
T0TCR = 0x1; // 定时器0开始计时
}
void measure_pulse_width(void) {
IO0DIR &= ~(1 << 1); // P0.1设置为输入
IO0PIN &= ~(1 << 1); // P0.1设置为低电平
IO0DIR |= (1 << 1); // P0.1设置为输出
IO0SET = (1 << 1); // P0.1设置为高电平
T0TC = 0x0; // 定时器计数器清零
IO0CLR = (1 << 1); // P0.1设置为低电平
while ((IO0PIN & (1 << 1)) == 0x0); // 等待上升沿
T0TCR = 0x1; // 定时器开始计时
while ((IO0PIN & (1 << 1)) != 0x0); // 等待下降沿
pulse_width = T0TC; // 计算脉冲宽度
T0TCR = 0x2; // 定时器暂停计时
}
```
阅读全文