我又编写了下面的定时器程序
- /* 测试定时器 */
- #include <avr/io.h>
- #define uchar unsigned char
- #define SET_LED PORTA&=0xFE;
- #define CLR_LED PORTA|=0x01;
- int main(void)
- {
- uchar i, j=0;
-
- DDRA = 0xFF;
-
- // 配置T/C0
- TCNT0 = 0; // T/C0开始值
- TCCR0 = _BV(CS02) | _BV(CS00); // 预分频ck/1024,计数允许
-
- while(1)
- {
- // 查询定时器方式等待1s
- // 12000000/1024/256/45=1s
- for(i=0;i<45;i++)
- {
- loop_until_bit_is_set(TIFR,TOV0);
- //写入逻辑1,清零T0V0位
- TIFR|=_BV(TOV0);
- }
-
- if(j)
- {
- SET_LED;
- j=0;
- }
- else
- {
- CLR_LED;
- j=1;
- }
- }
- }
本应该是1s,可实际的定时时间是10多s
|