AVR单片机ATMEAG16L定时和计数器的应用方法解析

2.定时/计数器0的中断实验之前的数码管扫描都是点亮数码管后再延时一段时间(如1ms)来实现的,如果CPU要处理的事情很多会造成编程困难或显示闪烁。现在使用定时/计数器0的中断处理来实现数码管的扫描,那么编程会轻松许多。

在我的文档中新建一个acl0的文件夹。建立一个Ac1O.prj的工程项目,最后建立源程序文件ac1O.c。输入下面的程序(程序2)。

编译通过后,将ac1O.hex文件下载到AVR单片机综合试验板上进行实际演示。注意,标示“LED-MOD-DISP”及“LEDMOD-COM”的双排针应插上短路块。我们可看到,8个数码管从低位(右)至高位(左)稳定地显示O~9这8个数。

AVR单片机ATMEAG16L定时和计数器的应用方法解析

3.4位显示秒表实验 在体育课或田径比赛时,老师经常会使用秒表来记录同学们的成绩。这里,我们也来做一个秒表的设计实验。我们使用INTO键进行计时的开始#停止。使用S1键作计时值的清除。

在我的文档中新建一个ac11的文件夹。建立一个ac11.prj的工程项目,最后建立源程序文件ac11.c。输入下面的程序(程序3)。

编译通过后,将ac11.hex文件下载到AVR单片机综合试验板上进行实际的操作演示。注意,标示“KEY”、“LEDMOD_DISP”、“LEDMOD_COM”及“INTO”的双排针应插上短路块。接通5V电源后,右边4个数码管显示0000,按动“INTO”键,数码管开始显示增加的计时值。再按一下“INTO”键,数码管显示停止的计时值。此时按下S1键,可清除计时值。

AVR单片机ATMEAG16L定时和计数器的应用方法解析

DDRA = OxFF;//将 PA端口设为输出

PORTC = OxFF;//PC端口初始化输出 1 1 1 1 1 1 1 1DDRC = OxFF;//将 PC端口设为输出

PORTD = OxFF;//PD 端口初始化输出 1 1 1 1 1 1 1 1DDRD = OxOO;//将 PD 端口设为输入

}

void timerO_init(void)//定时器0初始化子函数{

TCNTO = Ox83;//1 mS 的定时初值

TCCRO = OxO3;//定时器 0的计数预分频取64

}

#pragma interrupt_handler timerO_ovf_isr:1 0//定时器0中断服务子函数

void timer0_ovf_isr(void)

{

SREG=Ox80;//重新开放总中断,确保计时准确TCNTO = Ox83;//重装 1mS 的定时初值