ATmega32的有三个定时器,T0和T2是8位的,T1是16位的,各自提供了很多功能
都是以前用studio写的,那时还没用iar
*****************************************************************
//定时器0溢出中断
//CPU:mega32
//编译器:winavr
#include #include int main(void) { DDRC |= (1 << 7);//PC7置为输出 TIMSK |= 1< sei();//使能全局中断 while(1); } SIGNAL(SIG_OVERFLOW0)//TIMER0 溢出中断服务程序 { PORTC ^= 1<<7;//PC7取反 } ****************************************************************** ***************************************************************** //定时器0普通匹配模式中断 //CPU:mega32 //编译器:winavr #include #include int main(void) { DDRC |= (1 << 7);//PC7置为输出 TIMSK |= 1< TCCR0 |= (1 << CS02) |(0 << CS01) | (1 << CS00);//1024分频 sei();//使能全局中断 while(1); } SIGNAL(SIG_OUTPUT_COMPARE0)//TIMER0 匹配中断服务程序 { TCNT0 = 0;//计数值清0 PORTC ^= 1<<7;//PC7取反 } ****************************************************************** ***************************************************************** //定时器0匹配时清零模式(CTC)中断 //CPU:mega32 //编译器:winavr #include #include int main(void) { DDRC |= (1 << 7);//PC7置为输出 DDRB |= (1 << 3);//PC7置为输出 TIMSK |= 1< TCCR0 |= (1 << WGM01) | (0 << WGM00) | (1 << CS02) | (0 << CS01) | (1 << CS00);//CTC模式,1024分频 sei();//使能全局中断 while(1); } SIGNAL(SIG_OUTPUT_COMPARE0)//TIMER0 匹配中断服务程序 { PORTC ^= 1<<7;//PC7取反 } ****************************************************************** ***************************************************************** //定时器0输出正弦波 //CPU:mega32 //编译器:winavr #include #include const char sindata[128] = {128,134,140,147,153,159,165,171,177,182,188, 193,199,204,209,213, 218,222,226,230,234,237,240,243,245,248,250,251,253,254, 254,255, 255,255,254,254,253,251,250,248,245,243,240,237,234,230,226,222, 218, 213,209,204,199,193,188,182,177,171,165,159,153,147,140,134, 128,122,116,109, 103,97,91,85,79,74,68,63,57,52,47,43, 38,34,30,26,22,19,16,13,11,8,6,5,3,2,2,1, 1,1,2,2,3,5,6,8,11,13,16,19,22,26,30,34, 38,43,47,52,57,63,68,74,79,85,91,97, 103,109,116,122}; unsigned char x=0; int main(void) { DDRB |= (1 << 3);//PB3 (OC0) 置为输出 TIMSK |= 1< sei();//使能全局中断 while(1); } SIGNAL(SIG_OUTPUT_COMPARE0)//TIMER0 匹配中断服务程序 { OCR0 = sindata[x]; if( ++x > 127 ) x=0; } ****************************************************************** ***************************************************************** //定时器1捕捉中断 //CPU:mega32 //编译器:winavr #include #include int main(void) { TIMSK |= 1< while(1); } SIGNAL(SIG_INPUT_CAPTURE1)//TIMER1 捕捉中断服务程序 { //…… } ****************************************************************** ***************************************************************** //定时器1溢出中断 //CPU:mega32 //编译器:winavr #include #include int main(void) { DDRC |= (1 << 7);//PC7置为输出 TIMSK |= 1< while(1); } SIGNAL(SIG_OVERFLOW1)//TIMER1 溢出中断服务程序 { TCNT1H = 0X99;//先写高位,后写低位 TCNT1L = 0X88; PORTC ^= 1<<7;//PC7取反 } ****************************************************************** ***************************************************************** //定时器测频率 //定时器1计数,定时器2定时 //CPU:mega32 //编译器:winavr #include #include #define F 1000000 int main(void) { DDRC |= (1 << 7);//PC7置为输出 TIMSK |= 1< TCCR2 |= (1 << WGM01) | (0 << WGM00) | (1 << CS02) | (1 << CS01) | (1 << CS00);//CTC模式,1024分频 sei();//使能全局中断 TCCR1A |= (0< while(1); } SIGNAL(SIG_OUTPUT_COMPARE2)//TIMER2 匹配中断服务程序 { PORTC ^= 1<<7;//PC7取反 TCNT1H = 0; TCNT1L = 0; } ****************************************************************** ***************************************************************** //定时器测1捕捉中断 //可以测周期用 //CPU:mega32 //编译器:winavr #include #include int main(void) { TIMSK |= 1< while(1); } SIGNAL(SIG_INPUT_CAPTURE1)//TIMER1 捕捉中断服务程序 { TCNT1H = 0; TCNT1L = 0; } ******************************************************************
上一篇:ATmega32单片机最简单的程序—闪烁灯
下一篇:avr单片机mega32基于状态机的按键设计
推荐阅读最新更新时间:2024-11-07 10:42
设计资源 培训 开发板 精华推荐
- ATMEGA128A开发板第三版
- 带板载 L4940 和 L4941 低压降稳压器的分布式电源典型应用电路
- AD8618ARZ 二阶低通滤波器运算放大器的典型应用电路
- L7809C 固定输出稳压器的典型应用
- 90W、19V AC 到 DC 单路输出电源,用于适配器 AC 到 DC 电源
- LT1021DCS8-5 负串联电压基准的典型应用
- ADA4000-4ARUZ 运算放大器缓冲网络配置的典型应用电路
- 具有 8.5V 欠压锁定阈值的 LTC3119EFE 12V 至 12V、1MHz 线路调节器的典型应用电路
- 使用 Diodes Incorporated 的 PT8A 3518CPE 的参考设计
- LT1171IQ、-10 至 -26/2.5A LCD 对比度电源的典型应用