搜索
您的当前位置:首页用汇编语言编写AVR单片机程序入门教程

用汇编语言编写AVR单片机程序入门教程

来源:智榕旅游
用汇编语言编写AVR单片机程序入门教程

作者:伟纳电子 Gguoqing

原文发表在伟纳电子论坛:http://www.willar.com/forum_view.asp?forum_id=25&view_id=5438

1.硬件准备

实验系统:ME300全系列单片机开发板。 实验芯片: ATmega8515L或Atmega8515。

2.软件准备

AVRStudio V4.11 http://www.atmel.com AVRStudio 是一个完整的开发工具,包括编辑、仿真功能,利用这个工具我们可以编辑源程序代码,并在AVR器件上运行。

ME300_V3.1版控制软件 http://www.willar.com/down_view.asp?id=315

上述软件有收录在ME300随机光盘中

3.AVR 汇编语言学习环境的建立

安装AVRStudio和ME300_V3.1版控制软件。

1)创建一个新项目:

打开AVR Studio软件,选择“Project”菜单中的“New project”命令,弹出下面窗口。这里新建一个名为work1的项目。并在“Location”栏目中确定存放文件的路径与相应的文件夹。

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

1

2)编辑汇编源程序:

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

;8只LED的跑马灯演示程序

.INCLUDE \"8515DEF.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,0B11111111 ;设置PA口为输出端口 OUT DDRA,R16

START:

2

LDI R17,0B11111110 ;PA0输出低电平,LED0亮。 OUT PORTA,R17

LDI R16,50 ;延时1秒 RCALL DELAY

LDI R17,0B11111101 ;PA1输出低电平,LED1亮。 OUT PORTA,R17

LDI R16,50 ;延时1秒 RCALL DELAY

LDI R17,0B11111011 ;PA2OUT PORTA,R17

LDI R16,50 ;RCALL DELAY

LDI R17,0B11110111 ;PA3OUT PORTA,R17

LDI R16,50 ;RCALL DELAY

LDI R17,0B11101111 ;PA4OUT PORTA,R17

LDI R16,50 ;RCALL DELAY

LDI R17,0B11011111 ;PA5OUT PORTA,R17

LDI R16,50 ;RCALL DELAY

LDI R17,0B10111111 ;PA6OUT PORTA,R17

LDI R16,50 ;RCALL DELAY

LDI R17,0B01111111 ;PA7OUT PORTA,R17

LDI R16,50 ;RCALL DELAY

RJMP START ;

DELAY: ;PUSH R16 ;

输出低电平,LED2亮。 延时1秒 输出低电平,LED3亮。 延时1秒 输出低电平,LED4亮。 延时1秒 输出低电平,LED5亮。 延时1秒 输出低电平,LED6亮。 延时1秒 输出低电平,LED7亮。 延时1秒 循环执行 通用延时子程序 延时时间由R16调整

3

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

可以运用复制 / 粘贴方式将程序代码复制到 AVRStudio 的编辑窗口。

演示源程序:

[ 点击下载 ] ;(文件大小:530 Byte)

通用延时子程序资料: [ 点击下载 ] ;(文件大小:13.833 KB)

3)汇编源程序编译

3.1: 点击“Project”菜单中的“AVR Assemble setup”命令,弹出编译设置窗口,然后按下图设置: Hex Output Format 选择 {Intel intellec 8/MDS (Intel hex)},点击OK。

程序调试方法:

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

★ 启动AVR Studio软件,选择“File”菜单中的“Open File”命令,汇编语言编写的程序则选择打开0bject Files(*.hex ; *.d90 ; *.a90 ; *. Obj)。见图1

4

图1 调入调试文件

(如果是调试C语言编写的程序则打开*.cof文件)。这时弹出仿真选项窗口,见图2:这里选择软件仿真“AVR Simulator”,目标CPU选择“Atmega8515”。

图2 选择调试工具和目标CPU

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

5

图3 调试文件窗口

★ 将Processor和 I/O ATmega8515状态展开,见图4:在这里我们可以详细的观察控制本实验中PA口各脚的电平变化,以及延时情况。

6

图4

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

7

将Frequency 框内的值改为1.00 MHz,点击 OK。这时显示的时钟频率就是1 MHz了。见图6

8

3.2:点击“Project”菜单中的“Build”命令开始进行编译。源程序编译完成以后将生成work1.hex 目标文件。

在Output窗口内显示: Building project...

AVRASM: AVR macro assembler 2.0.31 (build 58 Apr 21 2005 14:17:40) Copyright (C) 1995-2005 ATMEL Corporation

D:\\documents and Settings\\Guoqing\\work1.asm(3): Including file 'D:\\Program Files\\Atmel\\AVR Tools\\AvrAssembler2\\Appnotes\\8515DEF.INC' AT90S8515 memory use summary [bytes]:

Segment Begin End Code Data Used Size Use% --------------------------------------------------------------- [.cseg] 0x000000 0x000096 114 0 114 8192 1.4% [.dseg] 0x000060 0x000060 0 0 0 512 0.0% [.eseg] 0x000000 0x000000 0 0 0 512 0.0% Assembly complete, 0 errors. 0 warnings

4. 烧写程序/演示

4.1 连接好ME300,设置ME300相关跳线到LED位置,锁紧座上放入一片ATmega8515L或Atmega8515,开启电源。

4.2 运行ME300软件(V3.1或以上版本)。

9

4.3 ME300软件中选择相应的芯片型号。

器件配置选项中按下图设置:

10

这里只设置第0页即可,其中的“时钟源选择”(熔丝位)选项中,选中表示0,不选中表示1。 如上图中设置的CKSEL3..0的值为:0001,按上图设置并编程后,单片机即使用内部RC振荡器, 工作频率1MHz,

注意:熔丝位配置错误将会锁死芯片导致再编程失败。

4.4 加载编译的文件work1.hex

4.5 烧写程序,正常即可观查到流水灯效果!

11

因篇幅问题不能全部显示,请点此查看更多更全内容

Top