选择分类:当前分类——当前分类
本站推荐:
用AVR单片单片机建立实验应用全过程
文章长度[10518] 加入时间[2006/7/1] 更新时间[2024/12/22 15:51:49] 级别[3] [评论] [收藏]

www.527dz.com原创

你准备好AVR下载电缆和AVR的开发软件了吗?如果准备好了,我们就来体验一下玩单片机的乐趣吧!


实验目标


现在我们的目标是设计一个电路,用AVR单片机来控制一个红色的LED和绿色的LED。电路加电后,首先绿色的LED点亮,5秒钟以后,绿色的LED熄灭,然后红色的LED点亮5秒钟。最后红色的LED和绿色的LED以1Hz左右的频率交替闪烁。


通过本实验可以让我们了解玩AVR单片机的基本步骤和基本开发软件的简单使用。


实验器材


需要准备的器材:Atmega8或者其他AVR单片机一片、红色LED一只、绿色LED一只、万能实验板一块、7805、100uF电容各一只、470欧姆电阻两只。


实验电路图



(点击图片放大)


用汇编语言编写


1)创建一个新项目:


打开AVR Studio软件,选择“Project”菜单中的“New project”命令,弹出下面窗口。这里新建一个名为test1的项目。




点击“Finish”存盘后出现下面界面:



(点击图片放大)



2)编辑汇编源程序:


右键点击“Workspace”子窗口中的“Asselmber”目录,选择“Creat new file”创建源程序文件,取名为test1.asm保存。


用汇编语言编写的源程序如下:


.include "M8def.inc" ;CPU配置文件


.org $0000


rjmp reset ;上电复位跳转到主程序


.org $0013 ;代码段定位,跳过中断区


reset:ldi r16,low(ramend) ;设置堆栈指针


out SPL,r16


ldi r16,high(ramend)


out SPH,r16


ldi r16,0b00000011 ;设置PB0、PB1为输出端口


out DDRB,r16


START:



ldi r16,0b00000010 ;PB1输出高电平,绿灯亮


out PORTB,r16


ldi r16,76 ;延时5秒


rcall delay


ldi r17,0b00000001 ;PB0输出高电平,红灯亮,PB1输出低电平,绿灯灭


out PORTB,r17


ldi r16,76 ;延时5秒


rcall delay


LED: com r17 ;PB0、PB1端口电平翻转,两个LED交替闪烁



out PORTB,r17


ldi r16,50 ;延时1秒


rcall delay


rjmp LED ;循环执行LED交替闪烁


delay:



push r16 ;延时子程序,延时时间由R16调整


delay0:



push r16


delay1:



push r16


delay2:



push r16


delay3:



dec r16


brne delay3


pop r16


dec r16


brne delay2


pop r16


dec r16


brne delay1


pop r16


dec r16


brne delay0


pop r16


ret


3)汇编源程序编译


点击“Project”菜单中的“AVR Assemble setup”命令,弹出编译设置窗口,然后按下图设置




点击“Project”菜单中的“Build”或者“Build and Run”命令开始进行编译。如果是选择“Build and Run”命令进行编译,则编译成功以后直接就进入到软件仿真状态。软件仿真参考后面的程序调试一节。源程序编译完成以后将生成test1.hex 目标文件。


编写程序

用C(ICC)语言编写



  • 创建一个新项目:从ICC的“Project”菜单中选择“New”命令,选择一个目录后,将这个项目取名为test_C1存盘。存盘后,在ICC窗口的右边(项目管理器)显示了新建工程的目录结构,如下图:


项目管理器显示的项目



  • 新建源程序文件:选择“Fill”菜单的“New”命令,ICC自动生成一个Untitled-0的文件。然后“Fill”菜单的“Save As”命令,将Untitled-0文件名改为test_C1.c后存盘。
  • 添加源程序文件到项目中去:鼠标右键点击项目管理器的File目录,选择弹出窗口的“Add To File”命令将test_C1.c文件加入到项目中,如下图:


源程序文件添加到了项目中



  • 开始编辑源程序:

#include //和单片机类型相对应的头文件,选择Atmega8做实验;


#include


void delay_1ms(void); //函数声明,本实验中会用到这两个函数


void delay_nms(unsigned int n);


void main(void) //主函数


{



DDRB=0B00000011; //定义B口的PB0、PB1为输出口


PORTB=0B00000001; //PB0口输出高电平,PB1口输出低电平,绿灯亮


delay_nms(5000); //延时5秒


PORTB=0B00000010; //PB1口输出高电平,PB0口输出低电平,关闭绿灯,红灯亮


delay_nms(5000); //延时5秒


while(1) //程序一直执行该循环


{



PORTB^=0B00000011; //翻转PB0和PB1口


delay_nms(1000);


}


}


void delay_1ms(void)//1ms延时函数


{



unsigned int i;


for (i=0;i<150;i++)


{


}


}


void delay_nms(unsigned int n)//延时n毫秒


{



unsigned int i;


for (i=0;i

delay_1ms();


}



  • 源程序编译:选择“Project”菜单下的“Operation”命令弹出编译选项。选择你安装ICC的include和Lib子目录的文件路径:



  • Compiler选项中“Output Format”选择“COFF/HEX”,同时生成.cof和.hex文件。Cof文件用于在AVR Studio中进行软件仿真,hex文件是最后要下载到单片机中的文件。另外,要根据你使用的AVR Studio选择相应的版本。



  • 选择目标单片机类型,本次实验选择Atmega8。


编译选项设置完毕以后,选择“Project”菜单中的“Rebuild All”命令,如果源程序没有问题,即可完成源程序的编译。编译完成后,我们看到在你的项目的目录中生成了一个test_C1.cof和test_C1.hex文件。


 


程序调试


用AVR Studio软件模拟单片机的运行,在电脑上观察单片机执行情况是否符合我们的要求。



  • 选择“File”菜单中的“Open File”命令,如果是调试C语言编写的程序则打开test_C1.cof文件。这时弹出仿真选项窗口,如下图:这里选择软件仿真“AVR Simulator”目标CPU选择“Atmega8”。



  • 点击上面窗口的“Finish”按钮后,出现下面界面:左边的Workspace的I/O子窗口显示的是CPU的状态,右边窗口显示的是你的源程序。


(点击图片放大)



  • 将CPU的I/O口和Processor状态展开,如下图:在这里我们可以详细的观察控制本实验中两个LEB的PB0、PB1脚的电平变化,以及延时情况。



  • 我们注意到在上面窗口中,显示的时钟频率是4MHz,但本实验采用的时钟频率是1MHz,因此选择“Debug”菜单中的“AVR Simulator Options”命令,弹出下面窗口:



  • 现在我们可以来看看你的程序是否能够满足我们的要求了!在“Debug”菜单中可以选择多种程序执行方式,注意观察CPU的状态窗口,看看PB0、PB1脚的输出电平是否按照我们计划的规律在变化。

搭建实验电路板


将实验所需元器件按实验一电路图在万能实验板上焊接好。这里我是直接采用自制的下载插座插到实验板上的CPU插座上进行程序下载,也可以在万能实验板上将单片机的MISO、SCK、MOSV、RST、VCC、GND脚用一个插座引出,再接到你的下载电缆上。




下载程序到CPU中去


使用PonyProg2000软件下载Hex文件。



  • 打开PonyProg2000软件,界面如下:



  • 点击“设置”菜单中的“接口设置”,按以下界面设置:



  • 在“器件”菜单中选择CUP型号,本实验选择“AVR micro”中的“Atmega8”。


(点击图片放大)



  • 读取和设置加密位/配置位。


点击“命令”菜单中的“配置位和保密位”,弹出以下窗口:




连接好下载电缆,并且实验板加电后,点击“读出”,软件就将CUP的熔丝位配置信息读出,然后按下面窗口设置好后,点击“写入”,CPU的熔丝位就配置好了!


注意:本实验采用Atmega8的内部RC振荡器产生1M的系统时钟。根据Atmega8手册,CKSEL3、2、1、0应该配置为:0001。在PonyProg2000软件中方框打沟是表示0,空是表示1




  • 加载Hex文件,选择test_C1.hex文件,点击打开。



  • Hex文件加载后,点击命令中的“写入所有”,出现下面的界面,点击“Yes”后,文件就开始下载到你实验板上的CPU中了。



实验结果


好了!现在可以看到我们实验板上的两个LED已经按照我们的要求在闪烁了,你还可以再增加几个LED,让LED能够闪烁出更多的花样。


本实验只是简单介绍了AVR单片机相关软件的简单使用,更多细节大家可以参考相关书籍或者到本论坛讨论。

1、 本站不保证以上观点正确,就算是本站原创作品,本站也不保证内容正确。
2、如果您拥有本文版权,并且不想在本站转载,请书面通知本站立即删除并且向您公开道歉! 以上可能是本站收集或者转载的文章,本站可能没有文章中的元件或产品,如果您需要类似的商品请 点这里查看商品列表!