文档详情

AVR单片机WinAVR及Proteus仿真外部中断.docx

发布:2017-08-10约3.32千字共11页下载文档
文本预览下载声明
本文主要以AVR单片机atmega48的外部中断的在Proteus上仿真的例子介绍AVR单片机C语言开发环境WinAVR的使用(如何包含头文件,如何写中断服务程序,如何配置编译产生hex文件),及其在Proteus上的仿真实现(如何建立仿真图,载入hex文件进行仿真)本例子完全为PC上软件仿真所以不涉及硬件,其全部所需软件清单如下:WinAVR、Proteus、atmega48_Datasheet软件的下载安装,请参考网上其他教程,有很多,很容易的。atmega48单片机的数据手册网上中英文的版本也都可以下载到。下图是笔者所使用的软件截图,不同版本可能稍有差异,但基本不影响使用。下面我将在假设您已经安装好2个软件(当然目前您不需要知道它们是怎么用的),并且对单片机和C语言有基本了解的基础上进行例程的演示。lets begin。首先要明确我们要完成的功能:单片机开始工作后,点亮LED灯1S,灭掉LED灯1S,如此循环3次,然后单片机进入无限循环,等待外部按键button按下,LED等再次点亮,当再次按下button时,LED等灭掉,如此循环。接着画出要实现这个功能的电路,以便后续仿真。先在桌面建一个文件夹Hello_AVR,如图。打开软件,这个图标。在软件界面上,右键Place-Component-From Libraries在Keywords里面输入atmega48,选择一个32PIN管脚的单片机放到图上同样的方法,放置一个LED灯,一个button,电阻,电容。放置POWER和GND图完成,在文件夹Hello_AVR下新建文件夹Sim,保存在这里这里用PB0管脚来驱动LED灯,查阅芯片的数据手册或直接从图中可以知道,外部中断0(INT0)在PD2管脚。而且Proteus的好处是,这里我们给单片机画电源的麻烦也可以省去。接下来要做的就是看数据手册和建立工程,编程,编译的事了。打开Programmers NotepadFile-New-Project新建工程Hello_AVR,保存到Hello_AVR文件夹在工程下面建4个文件夹Sys、Drv、App、Makefile在Hello_AVR文件夹下,创建main.c、avrexti.c、avrexti.h这3个源代码文件,这些代码实现什么功能,我在程序中进行了注释,最重要的还是参考芯片的手册。其内容如下:main.c:#include avr/io.h//通过宏定义开关,将包含iom48p.h#include avr/interrupt.h//包含中断函数实现的相关函数定义#include util/delay.h//提供了2个比较准的延时函数,自己懒得写就包含进去#include avrexti.h//自己写的外部中断实现的相关函数的头文件int main(void){unsigned char i;DDRB |= (10);//PB0此管脚外接LED灯for(i=0; i3; i++){PORTB |= (10);//PB0置位点亮LED灯_delay_ms(1000);//延时1000ms from #include util/delay.hPORTB = ~(10);//PB0清零灭掉LED灯_delay_ms(1000);}Exint_Iint(); //初始化外部中断from #include avrexti.hsei();//开全局中断 from #include avr/interrupt.hwhile(1);//无限循环return 0;}/***********************************************************************///LED灯状态标志位,0代表目前LED灯状态为灭,1代表LED灯目前状态为点亮unsigned char led_flg = 0;ISR(INT0_vect)//外部中断的中断服务程序,INT0_vect from iom48p.h{EIFR = ~(1INTF0);//清除中断标志位_delay_ms(10);//延时去掉干扰if(!(PIND(12)))//确认按键按下{if(1==led_flg){PORTB = ~(10);led_flg = 0;}else{PORTB |= (10);led_flg = 1;}}}avrexti.h:#ifndef __AVREXTI_H__#define __AVREXTI_H__#include avr/io.h#include avr/interrupt.h#include util/delay.hextern void Exint_Iint(void);#endifavrexti.C:#include avrexti.hvoid E
显示全部
相似文档