您好,欢迎访问上海现易电子元器件有限公司网站!

021-51870898
021-51870898   18019251567
4新闻资讯
您的位置: 首页 ->  新闻资讯 -> 单片机

​AVR 定时器中断程序

文章出处:单片机 责任编辑:上海现易电子元器件有限公司 发表时间:2020-11-10

基于7.3728M晶振作AVR定时器的时钟源进行1S定时! 
实验内容: 
使用AVR的定时器T1做1S定时,并使用PD口的LED指示灯做简单指示。

#include

#include


#define DISP_DDR   DDRD

#define DISP_PORT  PORTD


/*--------------------------------------------------------

程序名称:定时器1初始化程序

--------------------------------------------------------*/

void timer1_init(void)

{

 TCCR1B = 0x00;  //stop timer


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

 TCNT1L = 0xDF;  //设置 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

//选择时钟为晶振1024分频即7372800/1024=7200HZ

//定时1s (65535-初值)/(定时器时钟7200)=1s

//得初值换算十六进制给TCNT1H TCNT1L

 MCUCR = 0x00;  //设置 MCU 的 控制寄存器

 GICR  = 0x00;  //设置 中断控制寄存器

 TIMSK = 0x04;  //设置 定时计数器 的 屏蔽寄存器(TIMSK = BIT(2);)溢出中断使能

 //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

}


void main(void)

{

 DISP_DDR = 0XFF; //设置显示口为输出

 timer1_init();

 SEI();

 while(1);

}



上海现易电子元器件有限公司 版权所有 未经授权禁止复制或镜像

CopyRight 2020-2025 www.xy777.net All rights reserved   沪ICP备2020031792号

友情链接:

电话

易经理

18019251567

微信

易经理

易经理

顶部

咨询