自己写的PWM 模拟比较等 AVR16的子程序 供大家参考

源代码在线查看: avr中断嵌套.txt

软件大小: 5 K
上传用户: wodn76
关键词: PWM AVR 16 模拟
下载地址: 免注册下载 普通下载 VIP

相关代码

				  
				AVR中断嵌套
				 
				 
				 
				    昨天写了个AVR的红外的遥控的闹钟程序,开发板要个综合程序.就随便写了个.
				    主程序开了两个中断,一个输入捕获中断,供红外使用.另外开了个定时中断,为系统其他地方使用,如蜂鸣器,键盘扫描,软件定时器等使用.
				      捕获中断接收到数据就压入一个队列中,然后在10ms的系统中断函数中处理队列的数据.发现接收很不稳定,有时行,有时不行.但是将队列处理函数放在程序主循环中,接收就特别稳定.后来在10ms的定时中断服务函数中将全局中断使能打开,再队列处理函数放在10ms里边,这样接收也很稳定.问题解决.
				    
				   AVR中断优先级以及中断嵌套处理
				 
				   1.AVR中断的优先级由该中断向量在中断向量区中的位置确定,处于低地址的中断向量所对应的中断拥有高优先级,所以,系统复位RESET拥有最高优先级。 
				   2.当两个中断同时发生申请中断时,MCU先响应中断优先级高的中断。低优先级的中断一般将保持中断标志位的状态(外部低电平中断除外),等待MCU响应处理。 
				   3.MCU响应一个中断后,在进入中断服务前已由硬件自动清零全局中断允许位。因此此时即使有更高优先级的中断请求发生,MCU也会不响应,要等执行到RETI指令,从本次中断返回,并执行了一条指令后,才能继续响应中断。所以,在缺省情况下,AVR的中断不能嵌套。AVR中断的优先级只是在有多个中断同时发生时才起作用,此时MCU将首先响应高优先级的中断。 
				   4.AVR中断嵌套处理是通过软件方式实现的。如在B中断服务中,如需要MCU能及时的响应A中断(不是等本次中断返回后再响应),B中断的服务程序应这样设计:(1)B中断的现场保护;(2)屏蔽除A以外其它的中断允许标志;(3)用指令SEI开放允许全局中断;(4)B中断服务;(5)用指令CLI禁止全局中断(6)恢复在本中断程序被屏蔽的中断允许标志;(7)B中断现场恢复;(8)B中断返回。 
				   5.采用软件方式实现中断嵌套处理的优点,是能够让程序员可以根据不同的实际情况和需要来决定中断的重要性,有更加灵活的手段处理中断响应和中断嵌套,如让低优先级的中断(此时很重要)打断高优先级中断的服务等,但同时也增加了编写中断服务程序的复杂性。 
				   6.由于AVR的指令执行速度比较高,因此在一般情况下,不建议使用中断嵌套的处理方法。当然,这还需要用户在编写中断处理服务程序中,应遵循中断服务程序尽量要短的原则。
				中断中关总中断 最后出中断时硬件自动开总中断的
				
				 
				 
				 
							

相关资源