- 1、本文档共125页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 ATmega单片机的中断系统及定时器;4.1 ATmega单片机的中断系统;中断设置;当MCU响应一个中断请求后,会自动将全局中断允许位I自动清零,此时后续中断的响应被屏蔽。
当MCU执行中断返回指令RETI时,会将全局中断允许位I自动置“1”,以允许响应下一个中断。
用户可在中断处理程序中I位置“1”,打开中断响应,这样MCU就可以再次响应中断,实现了中断嵌套处理。;中断源的类型:
一类是时间触发型中断:如时钟、计数、比较等,一旦事件产生后会将相应的中断标志位置位,申请中断处理,当MCU响应中断,跳转到实际中断向量,开启相应的中断处理程序时,硬件自动清除对应的中断标志,这些中断标志位也可通过软件写“1”来清除。
另一类是条件中断:当一个符合条件的中断触发置位了中断标志位,但相应的中断允许位为“0”,此时,这个中断标志将挂起为“1”,一直保持到该中断被响应或中断标志被软件清为“0”。
有些没有中断标志位,在中断条件成立时,将一直不断的向MCU申请中断,如果在中断允许响应前,中断条件由成立状态变成不成立状态,该中断即宣告终止了。;4.1.2 外部中断;当外部中断使能并且配置为电平触发(INT0/INT1),只要引脚电平为低,中断就会产生。因为中断检测是异步的,可以用来将器件从睡眠模式唤醒。
若要求INT0,INT1在信号下降沿或上升沿触发,I/O 时钟必须工作(睡眠过程中I/O时钟是停止的)。;1、中断寄存器;例4.1 设置寄存器MCUCR,响应外部中断INT1为上升沿产生中断。
MCUCR |= 0x0c; ;例4.2 利用寄存器MCUCR,响应外部中断INT0,上升沿有效。
MCUCR |= 0x03; ;(2)通用中断控制寄存器(GICR);(3)通用中断标志寄存器(GIFR);4.1.3 中断响应;(2) 设置中断屏蔽触发器
在实际系统中,往往有多个中断源。在每一个外设的接口电路中增加了一个中断屏蔽触发器,只有当此触发器为“1”时,外设的中断请求才能被送出至CPU。;(3) 设置中断允许触发器
在CPU内部有一个中断允许触发器。只有当其为“1”时,CPU才能响应中断;若其为“0”,即使INTR线上有中断请求,CPU也不响应。而这个触发器的状态可由软件指令来改变。
当CPU复位???,中断允许触发器为“0”,所以必须要用软件指令来开中断。当中断响应后,CPU就自动关中断,所以在中断服务程序中也必须要用软件指令来开中断。CPU在现行指令结束后即响应中断。;2、中断响应过程;(3)保护现场:为了使中断处理程序不影响主程序的运作,故要把断点处的有关寄存器的内容和标志位的状态全部推入堆栈保护起来,即在中断服务程序中把这些寄存器的内容推入堆栈。这样,当中断处理完成后返回主程序时,CPU能够恢复主程序的中断前的状态,保证主程序的正确动作。
(4)给出中断入口,转入相应的中断服务程序:系统由中断源提供的中断向量形成中断入口地址,使CPU能够正确进入中断服务程序。
;
(5)恢复现场:把所保存的各个内部寄存器的内容和标志位的状态,从堆栈弹出,送回CPU中原来的位置。这个操作在系统中也是由服务程序来完成的。
(6)开中断与返回:在中断服务程序的最后,要开中断(以便CPU能响应新的中断请求)和安排一条中断返回指令,将堆栈内保存的主程序被中断的位置值弹出,运行被恢复到主程序。;例4.6 使用中断进行计数程序实例:
void extint_init(void)//中断初始化设置
{
MCUCR |= 0x03;//上升沿触发
MCUCSR |= 0x00;//控制和状态寄存器
GICR = 0x40;//开??中断0使能
}
SIGNAL(SIG_INTERRUPT0)//外部中断0程序
{
uint k;//设置变量k来记录中断的次数
k++;
};ATmega16 控制和状态寄存器MCUCSR?
AVR 控制和状态寄存器提供了有关引起AVR复位的复位源的信息。
Bit 4 – JTRF: JTAG 复位标志通过JTAG 指令AVR_RESET 可以使JTAG 复位寄存器置位,并引发MCU 复位,并使JTRF 置位。上电复位将使其清零,也可以通过写”0” 来清除。
Bit 3 – WDRF: 看门狗复位标志看门狗复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。
Bit 2 – BORF: 掉电检测复位标志掉电检测复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。
Bit 1 – EXTRF: 外部复位标志外部复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。
Bit 0 – PORF: 上电复位标志上电复位发生时置位。只能通
文档评论(0)