logo

AVR应用笔记 AVR单片机笑傲江湖 AVR 定时器中断程序

AVR 定时器中断程序

以下资料由微雪电子整理并发布,未经许可不得转载,否则追究相应责任!

系统功能

   使用AVR定时器做1S定时,并使用LED作出简单指示!


硬件设计

   本设计基于7.3728M晶振作AVR定时器的时钟源进行1S定时!


AVR主控电路原理图(点击图片放大,不需要放大镜!

LED控制电路原理图(点击图片放大,不需要放大镜!



软件设计

下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解!

//目标系统: 基于AVR单片机
//应用软件: ICC AVRAVR

/*01010101010101010101010101010101010101010101010101010101010101010101
----------------------------------------------------------------------
实验内容:
使用AVR的定时器T1做1S定时,并使用PD口的LED指示灯做简单指示。
----------------------------------------------------------------------
硬件连接:
将PD口的LED指示灯使能开关切换到"ON"状态。
----------------------------------------------------------------------
注意事项:
(1)若有加载库程序,请将光盘根目录下的“库程序”下的“ICC_H”文件夹拷到D盘
(2)请详细阅读:光盘根目录下的“产品资料\开发板实验板\SMK系列\SMK1632\说明资料”
----------------------------------------------------------------------
10101010101010101010101010101010101010101010101010101010101010101010*/

#include <iom16v.h>
#include <macros.h>

#define DISP_DDR   DDRD
#define DISP_PORT  PORTD

/*--------------------------------------------------------------------
程序名称:定时器1初始化程序
程序功能:
注意事项:基于7.3728M晶振
提示说明:晶振不要买到假的,要不然,调不出来还以为电脑有鬼!
输    入:
返    回:
--------------------------------------------------------------------*/
void timer1_init(void)
{
 TCCR1B = 0x00;  //stop timer

 TCNT1H = 0xE3;  //设置 TC1 的 计数寄存器 高8位值,基于7.3728M晶振
 TCNT1L = 0xE1;  //设置 TC1 的 计数寄存器 低8位值,基于7.3728M晶振

 //OCR1AH = 0x1C; //设置 TC1 的 输出比较寄存器A 高8位值
 //OCR1AL = 0x20; //设置 TC1 的 输出比较寄存器A 低8位值

 //OCR1BH = 0x1C; //设置 TC1 的 输出比较寄存器B 高8位值
 //OCR1BL = 0x20; //设置 TC1 的 输出比较寄存器B 低8位值

 //ICR1H  = 0x1C; //设置 TC1 的 输入捕获寄存器 高8位值
 //ICR1L  = 0x20; //设置 TC1 的 输入捕获寄存器 低8位值

 TCCR1A = 0x00;
 TCCR1B = 0x05;  //设置TC1 为 CLK/1024分频,启动TC1

 MCUCR = 0x00;  //设置 MCU 的 控制寄存器
 GICR  = 0x00;  //设置 中断控制寄存器
 TIMSK = 0x04;  //设置 定时计数器 的 屏蔽寄存器
 //SEI();  //enable interrupts
}
/*--------------------------------------------------------------------
程序名称:定时器1中断服务程序
程序功能:
注意事项:
提示说明:
输    入:
返    回:
--------------------------------------------------------------------*/
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
 TCNT1H = 0xE3;  //reload counter high value
 TCNT1L = 0xE1;  //reload counter low value
 DISP_PORT++;  //每加1S,显示加1
}
/*--------------------------------------------------------------------
程序名称:
程序功能:
注意事项:没什么好注意的,不要直接对单片机控制板加220V电压就行了!
提示说明:
输    入:
返    回:
--------------------------------------------------------------------*/
void main(void)
{
 DISP_DDR = 0XFF; //设置显示口为输出
 timer1_init();
 SEI();
 while(1);
}


系统调试

时间在累积,LED也累积向上加,改变定时器的定时时间,LED向上加的速度加快!

 相关AVR资料说明

可作为如下AVR的参考资料: ATtiny13 ATtiny24 ATtiny44 ATtiny84 ATtiny2313 ATtiny26 ATmega48 ATmega88 ATmega168 ATmega8 ATmega16 ATmega32 ATmega64 ATmega128 ATmega162 ATmega169 ATmega169P ATmega8515 ATmega8535

 相关AVR型号资料

ATtiny13 ATtiny24 ATtiny44 ATtiny84 ATtiny26 ATtiny2313
ATmega48 ATmega88 ATmega168 ATmega8 ATmega16 ATmega32
ATmega64 ATmega128 ATmega162 ATmega169 ATmega8515 ATmega8535

AVR 定时器中断程序

——