单片机计时器的完整代码
时间: 2024-12-16 11:11:31 浏览: 16
单片机计时器的完整代码会因具体的型号而异,比如常见的Arduino Uno使用的Timer1为例,以下是简单的C语言代码示例:
```c
#include <avr/io.h>
#include <util/delay.h>
void setup() {
// 配置定时器1为模式1,8位自动装载,分频系数为16(TCNT1=OCR1A)
TCCR1B = (1 << WGM12) | (0 << CS12); // CTC模式
OCR1A = 255; // 设置比较值为最大,即计数从0到255
DDRB |= (1 << PB3); // 设置PB3为输出,用于显示计数值
PORTB &= ~(1 << PB3); // 初始状态清零
sei(); // 开启中断
}
ISR(TIMER1_COMPA_vect) { // 当计数器溢出时触发此中断
uint8_t count = TCNT1; // 获取当前计数值
PORTB |= (1 << PB3); // 点亮LED
_delay_ms(1); // 暂停一段时间
PORTB &= ~(1 << PB3); // 熄灭LED
TCNT1 = 0; // 重置计数器
if(count == 255) { // 如果计数到达最大值,重新开始计时
OCR1A = 255;
}
}
int main(void) {
while (1);
return 0;
}
```
在这个例子中,定时器1每计满256次就会触发中断,LED会闪烁一次。`_delay_ms()`函数是一个延时宏,实际实现可能会因为硬件的不同而不同。
阅读全文