⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 一个很好用的中断程序
💻 C
字号:
/***********************************************
****      AVR 外部中断使用范例                 ***
****  	                                     ***
**** 作者:  HJJourAVR                        ***
**** 编译器:WINAVR20050214                   ***
****                                         ***
****  	www.OurAVR.com	 2005.8.31           ***
***********************************************/
/*
本程序简单的示范了如何使用ATMEGA16的外部中断
	中断的设置
	按键的简单延时防抖动
	中断的嵌套
	变量在中断中的应用---如果变量会在中断服务程序中被修改,须加volatile限定
	
本范例可直接使出厂状态的新M16芯片,无需对芯片的熔丝位进行配置。
出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器
	
关于外部中断作唤醒源的条件:(将会在后面的电源管理和睡眠模式范例中应用)
    而INT0和INT1的边沿触发中断只能在 空闲模式起作用,即 CLKI/O不停止
    INT0和INT1的低电平中断,INT2在各种睡眠模式下都可以,因为这几种中断工作于异步模式,不需要时钟驱动
    
官方的M16中文手册对外部中断的描叙存在多处错误,请参考英文原版。
	
*/

#include <avr/io.h>
#include <avr/delay.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
/*宏INTERRUPT 的用法与SIGNAL 类似,区别在于
    SIGNAL 执行时全局中断触发位被清除、其他中断被禁止
    INTERRUPT 执行时全局中断触发位被置位、其他中断可嵌套执行
另外avr-libc 提供两个API 函数用于置位和清零全局中断触发位,它们是经常用到的。
分别是:void sei(void) 和void cli(void) 由interrupt.h定义 */

//注: 内部函数_delay_ms() 最高延时  262.144mS@1MHz
/*    该函数可以实现较精确的定时,但用JTAG仿真时较麻烦---会进入机器码窗口(Disassembeler).注意跳开该语段。
      一旦JTAG仿真进入该内部函数语句,会变得像"死机"一样(其实在运行中),可以先[break],然后在后面的C语句设[breakpoint],[RUN]跳过*/
//  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -