90 likes | 304 Vues
AVR 单片机软硬件设计教程 - 入门篇 —— 学单片机就要学 AVR !. 主 讲 : 尹延辉 策 划:张 勇 学习板: LT-Mini-M16 力天电子版权所有 技术交流 QQ 群: 31646346 www.lt430.com 2008年 9 月. 第六讲 中断与定时器. 本讲内容: 中断的概念 M16 的外部中断 定时器的概念 M16 的定时器 中断方式使用定时器. 中断的概念. 在程序运行期间,发生非预期的紧急事件 通常是为了避免查询方式的程序设计 用得最多的是外部中断与定时器中断 外部中断:按键程序
E N D
AVR单片机软硬件设计教程-入门篇——学单片机就要学AVR!AVR单片机软硬件设计教程-入门篇——学单片机就要学AVR! 主 讲: 尹延辉 策 划:张 勇 学习板:LT-Mini-M16 力天电子版权所有 技术交流QQ群:31646346 www.lt430.com 2008年9月
第六讲中断与定时器 • 本讲内容: • 中断的概念 • M16的外部中断 • 定时器的概念 • M16的定时器 • 中断方式使用定时器
中断的概念 • 在程序运行期间,发生非预期的紧急事件 • 通常是为了避免查询方式的程序设计 • 用得最多的是外部中断与定时器中断 • 外部中断:按键程序 • 定时器中断:定时与循环扫描等应用场合 • 中断服务程序 • 中断发生时,主程序暂停,跳转到中断服务程序,称为“响应中断” • 执行完毕后返回主程序继续运行
M16的外部中断 • M16具有3个外部中断 • INT0、INT1: • 支持4种触发模式,同步触发 • INT2 • 支持2种触发模式,异步触发 • 中断相关库函数的头文件 • avr/interrupt.h • 中断服务程序 SIGNAL(SIG_INTERRUPT0) { //此处添加中断服务代码 } • 中断有关的寄存器 • MCUCR • MCUCSR • GICR
外部中断使用步骤 • 第1步:包含头文件 • #include <avr/interrupt.h> • 第2步:设置中断触发方式 • 任意逻辑电平变化: MCUCR |= (1 << ISC10); • 下降沿触发:MCUCR |= (1 << ISC10)|(1 << ISC11); • 上升沿触发:MCUCR |= (1 << ISC11); • 第3步:使能响应相应外部中断 • GICR |= (1 << INT0); • 第4步:使能全局中断 • sei(); • 第5步:编写中断服务程序 • SIGNAL(SIG_INTERRUPT0){}
定时器的概念 • 8位定时/计数器的模型 • 1个8位长度计数寄存器,可以对其进行读写 • 1个时钟输入端口,计数寄存器对时钟输入端口的时钟脉冲个数进行加1计数,即每来一个时钟脉冲,寄存器的数值自加1 • 如何实现精确定时? • 给计数寄存器设定初值n0 • 给时钟输入端口输入一个频率精确的方波方波周期为t0 • 计数器计数到256时定时器溢出,时间间隔为: △T = (256 – n0) ×t0 • 定时器溢出时可以产生中断
定时器溢出方式的应用 • M16的定时器0 • 8位定时器 • 具有PWM功能 • 定时器0相关寄存器 • T/C 控制寄存器- TCCR0 • 设置时钟源频率 • T/C 寄存器- TCNT0 • 计数寄存器 • T/C 中断屏蔽寄存器- TIMSK • 需要使用溢出中断时 • T/C 中断标志寄存器- TIFR • 查询是否溢出
定时器0溢出方式查询模式使用步骤 • 第1步:设置TC寄存器初值 • TCNT0 = 55; • 第2步:开启时钟,同时TC0启动 • TCCR0 |= (1 << CS01); • 第3步:查询TIFR寄存器的TOV0位 • while(!(TIFR & TOV0));
定时器0溢出方式中断模式使用步骤 • 第1步:包含中断函数头文件 • #include <avr/interrupt.h> • 第2步:设置TC寄存器初值 • TCNT0 = 55; • 第3步:使能TC0溢出中断 • TIMSK |= (1 << TOIE0); • 第4步:编写TC0溢出中断服务程序 SIGNAL(SIG_SIG_OVERFLOW0) {//此处添加中断服务程序代码} • 第5步:开启时钟,同时TC0启动 • TCCR0 |= (1 << CS01); • 第6步:使能全局中断 • sei();