今天只向大家分享入门程序,试用定时器控制LED流水灯;创建led_timer工程后,创建main.c主函数文件,并仿造官方例程文件,加载avr_compiler.h头文件;主函数中作IO端口初始化和定时器1初始化程序,并且最重要一步sei(); //中断使能,并添加相应中断处理函数。通过AVR911下载程序后,按RESET键,可看到4个指示灯顺时针、逆时针点亮。
序代码如下: #include "avr_compiler.h" //LED顺时针方向 ED0-PB0LED2-PB1 LED3-PB2 LED1-PB3 //LED接上拉电阻,低电平点亮;引脚配置为输出时,向PINX对应引脚写入1,会自动翻转TOGGLING引脚电平 static volatile bool Time1s_flag=0; static volatile bool LedDis_flag=0; static volatile unsigned char Time10ms_cnt=0; //定时10ms计数变量 static volatile unsigned char tmp=0; //led显示计数变量 const unsigned char ledbuf[14]={0,0x01,0x02,0x04,0x08,0x04,0x02,0x01,0x03,0x06,0x0c,0x06,0x03,0x01}; ISR(TIMER1_COMPA_vect) { Time10ms_cnt++; if(Time10ms_cnt >=100) { Time10ms_cnt = 0; Time1s_flag = 1; } if((Time10ms_cnt %50)==0) { LedDis_flag = 1; } } void mega1284p_init(void) { DDRA = 0x00; //0为输入,1为输出,默认为上拉输入 DDRB = (1 << DDB3)| (1 << DDB2) | (1 << DDB1) | (1 << DDB0); //B口对应位作为输出,关闭输入上拉电阻 DDRC = 0x00; DDRD = 0x00; PORTA = (1 << ORTA5) | (1 << PORTA4) | (1 << PORTA3) | (1 << PORTA2) | (1 << ORTA1) | (1 << PORTA0); //A口作为输入,向PORTA对应位写1激活输入上拉电阻,写1关闭输入上拉电阻 PORTB = 0xFF; //向PINX对应引脚写入1,会自动翻转TOGGLING引脚电平 PORTC = 0xFF; PORTD = 0xFF; PRR0 &= ~(1 << RTIM1); //写入0允许定时器模块;低功耗寄存器写1关闭相应模块功能 // Set timer comparevalue (how often timer ISR will fire) OCR1A = 0x3600; //10ms中断一次,100*13824*8=11059200,输出匹配寄存器 // Enable timer1 outputcompare match A ISR TIMSK1 = (1 <<OCIE1A); //比较中断允许,Bit 1 – OCIE1A: Timer/Counter1, Output Compare A MatchInterrupt Enable // Timer1 prescaler =system clock / 8 TCCR1B |= (0 <<CS12) | (1 << CS11) | (0 << CS10); //CSn2-CSn0:010,8分频 // Timer1 mode = CTC(count up to compare value, then reset) TCCR1B |= (1 <<WGM12); //定时器工作在CTC计数模式;计数到匹配后,自动清零 sei(); //中断使能 } int main(void) { mega1284p_init(); while(1) { if(LedDis_flag) { LedDis_flag= 0; PORTB =~ledbuf[tmp++]; if(tmp>13) tmp= 0; } // PINB |= (1<< PINB3) | (1 << PINB2) | (1 << PINB1) | (1 << PINB0); // delay_us(20000); } } 注释: 1) ledbuf[14]为定义的LED花样流水灯显示数组,可根据兴趣手动修改。 2) 定时器1采用的A通道捕获匹配方式,所以中断入口使用ISR(TIMER1_COMPA_vect) 3) 这是我编写的第一个AVR程序,可能理解有错误,欢迎大家拍砖! 工程文件见附件:
led_timer_131123.rar
(16.78 KB, 下载次数: 8)
|