版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
外部中断范例编写:阿莫(armok)/代码设计:HJJourAVR/2005-09-04/www.OurAVR.com1.开发语言本范例使用WinAVR/GCC20050214版本开发2.范例描述按下按键0,LED0亮。直到松手,其他按键才能起作用
按下按键1,LED1亮。其他按键随时都能起作用
按下按键2,LED0/1都熄灭。直到松手,其他按键才能起作用
3.电路图设计:为简化线路设计,使用了本网站的ATmega16功能小板。.4.代码设计与说明:/*************************************************
****AVR外部中断使用范例***
**** ***
****策划、整理与测试:阿莫(armok)*******代码设计:HJJourAVR***
****编译器:WINAVR20050214***
**** www.OurAVR.com 2005.8.31***
*************************************************/
/*
本程序简单的示范了如何使用ATMEGA16的外部中断
中断的设置
按键的简单延时防抖动
中断的嵌套
变量在中断中的应用---如果变量会在中断服务程序中被修改,须加volatile限定
本范例可直接使出厂状态的新M16芯片,无需对芯片的熔丝位进行配置。
出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAGICE硬件仿真器
关于外部中断作唤醒源的条件:(将会在后面的电源管理和睡眠模式范例中应用)
而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函数用于置位和清零全局中断触发位,它们是经常用到的。
分别是:voidsei(void)和voidcli(void)由interrupt.h定义*///注:内部函数_delay_ms()最高延时262.144mS@1MHz/*该函数可以实现较精确的定时,但用JTAG仿真时较麻烦---会进入机器码窗口(Disassembeler).注意跳开该语段。一旦JTAG仿真进入该内部函数语句,会变得像"死机"一样(其实在运行中),可以先[break],然后在后面的C语句设[breakpoint],[RUN]跳过*///for()/while()语句计算延时时间较麻烦。//为了使_delay_ms()函数的延时正确,须在makefile中设定F_CPU为实际的系统时钟频//本范例为1MHz内部RC振荡器即F_CPU=1000000/*
C:\WinAVR\avr\include\avr\目录包括所有芯片的定义和其他头文件
其中iom16.h定义ATMEGA16芯片的特性(中断向量,寄存器,位定义...)
包括下面中断服务程序的常量SIG_INTERRUPTx,PORTx,GICR.....
*///管脚定义
#defineEXT_INT02//PD2按键0
#defineEXT_INT13//PD3按键1
#defineEXT_INT22//PB2按键2#defineLED00//PB0
#defineLED11//PB1
#defineLED23//PB3//宏定义
#defineLED0_ON()PORTB|=(1<<LED0)//输出高电平,灯亮
#defineLED0_OFF()PORTB&=~(1<<LED0)//输出低电平,灯灭
#defineLED1_ON()PORTB|=(1<<LED1)
#defineLED1_OFF()PORTB&=~(1<<LED1)
#defineLED2_ON()PORTB|=(1<<LED2)
#defineLED2_OFF()PORTB&=~(1<<LED2)
//51系列的高电平输出能力很弱,低电平也仅能点亮LED.所以常见输出低电平才灯亮的接法。
//AVR芯片的高低驱动能力都很强,甚至能推动8字数码管的公共极,怎么接都没问题。//全局变量#definehas_volatile1//这里是条件编译
//可以修改has_volatile=1或0来看程序运行的效果
#ifhas_volatile
volatileunsignedcharFLAG;//全局变量,会在中断服务程序中被修改,须加volatile限定
#else
unsignedcharFLAG;//全局变量.
#endif
//仿真时在watch窗口,监控这些变量。SIGNAL(SIG_INTERRUPT0)//INT0中断服务程序{//硬件自动清除INTF0标志位_delay_ms(10);//延时if((PIND&(1<<EXT_INT0))==0)//重复检测,防抖动LED0_ON();//点亮LED0loop_until_bit_is_set(PIND,EXT_INT0);//等待按键释放(变为高电平)_delay_ms(10);//延时按键释放时也会抖动。//即使同时发生其它的中断事件,如果在这里把相应的中断标志位清除,那么该中断将不能触发进入中断服务/*注意读端口用PINx写端口用PORTx*/}INTERRUPT(SIG_INTERRUPT1)//INT1中断服务程序{//硬件自动清除INTF1标志位//这里全局中断被打开,将允许其他中断嵌套执行_delay_ms(10);if((PIND&(1<<EXT_INT1))==0)LED1_ON();//点亮LED1loop_until_bit_is_set(PIND,EXT_INT1);_delay_ms(10);}SIGNAL(SIG_INTERRUPT2)//INT2中断服务程序{//硬件自动清除INTF2标志位_delay_ms(10);if((PINB&(1<<EXT_INT2))==0){LED0_OFF();//熄灭LED0LED1_OFF();//熄灭LED1}loop_until_bit_is_set(PINB,EXT_INT2);FLAG=!FLAG;//修改全局变量_delay_ms(100);}intmain(void){//上电默认DDRx=0x00,PORTx=0x00输入,无上拉电阻PORTA=0xFF;//不用的管脚使能内部上拉电阻。PORTC=0xFF;PORTD=0xFF;DDRB=(1<<LED2)|(1<<LED1)|(1<<LED0);//输出PORTB=~((1<<LED2)|(1<<LED1)|(1<<LED0));//低电平,灯灭//外部中断INT0,1,2做按键输入,使能内部上拉,就可以不用外接电阻了MCUCR=(1<<ISC11)|(0<<ISC10)|(1<<ISC01)|(0<<ISC00);//注意该寄存器有多个功能/*ISCx1:0=00INTx引脚为低电平时产生中断请求ISCx1:0=01INTx引脚上任意的逻辑电平变化都将引发中断ISCx1:0=10INTx引脚的下降沿产生中断请求ISCx1:0=11INTx引脚的上升沿产生中断请求*/MCUCSR&=~(1<<ISC2);//注意该寄存器有多个功能/*ISC2=0INT2引脚的下降沿产生异步中断请求ISC2=1INT2引脚的上升沿产生异步中断请求*/GIFR=(1<<INTF1)|(1<<INTF0)|(1<<INTF2);//写1清除标志位,在使能中断前最好先把对应//的标志位清除,以免误触发GICR=(1<<INT1)|(1<<INT0)|(1<<INT2);//使能三个外部中断FLAG=0;sei();//使能全局中断while(1){while(FLAG==0);LED2_ON();//如果FLAG不加volatile限定(即has_volatile=0),//程序将永远都运行不到这里。while(FLAG!=0)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 48231.1-2026密封胶与涂料的适配性第1部分:可涂覆性的评价
- 卫生院健康教育工作计划
- 全国普通高等学校体育单招试题语文试卷(原卷+解析)
- 活性炭活化工安全生产知识模拟考核试卷含答案
- 橡胶制品生产工岗前生产标准化考核试卷含答案
- 热压延工岗前流程优化考核试卷含答案
- 电动自行车装配工安全应急模拟考核试卷含答案
- 铁合金焙烧操作工岗前安全专项考核试卷含答案
- 水生动物苗种繁育工安全生产能力考核试卷含答案
- 原油蒸馏工岗位安全操作考核试卷含答案
- 2026年新能源汽车维修工理论知识试卷完整版(精练)
- 萍乡市投发集团2026年度下半年高层次及急需紧缺人才招聘笔试模拟试题及答案解析
- 美团骑手承揽合同范本
- 军官转业申请书
- 外研版高二英语上册(必修第三册)全册重点单词、短语、句型归纳
- 质检员试题及分析
- ESG可持续发展治理体系
- 绿化工程隐患排查清单
- 建筑工程材料进场检验制度
- 食品安全监督抽检和风险监测工作规范培训
- 云南省住宅小区供配电设施技术标准
评论
0/150
提交评论