单片机原理与应用实验指导书(201203) - 图文 联系客服

发布时间 : 星期三 文章单片机原理与应用实验指导书(201203) - 图文更新完毕开始阅读7b986e806529647d27285298

结果放入 和最终单元 N 已做完10 次加法? Y 加数增1 被加数+加数,结果放在被加数(和中间结果)单元 加数、被加数(和中间结果)、和最终结果单元、加法次数单元初始化 堆栈初始化 10

源程序:

;变量DATA_REG中的内容为加数(1-10);

;ACC中的内容为被加数,同时也是每一次加法后的和中间结果存放单元; ;做完10次加法后,再将ACC内容放入指定的和单元SUM中。 ;******************************************************** DATA_REG SUM

EQU EQU

31H 30H

;定义加数单元 ;定义和单元

;=========================================================

ORG

0000H

;复位后PC指针

LJMP MAIN ORG

0100H

;从程序存储空间 0100H 单元放程序

;---------------------------------------------------------

MAIN:

MOV DATA_REG, #1 MOV SUM, #00H MOV R2, #10 CLR CLR

A C

;被加数+加数,结果放入ACC ;加数增1

;10次加法未做完,继续做

;10次加法已做完,将和放入SUM单元 ;原地循环

;加数单元初始值为1 ;和单元初始值为0 ;加法循环次数为10 被加数单元初始值为0 ;进位初始值为0

MOV SP, #70H

;堆栈指针从复位后的 07H 调整到 70H

ADD_LOOP:

ADDC A, DATA_REG INC

DATA_REG

DJNZ R2, ADD_LOOP MOV SUM,A LJMP $

;*********************************************************

END

11

2.1 打开仿真环境,新建一个工程文件

按第一章介绍建立一个工程名为“test.uv2”的工程文件,选择目标硬件系统的MCU为Atlmel的AT89C51;目标硬件系统配置选择“Use Simulator”,其余配置参考第一章介绍。

2.2 输入源程序

单击菜单“File/New”,出现源程序编辑窗口,输入源程序,以“*.asm”保存,选择“/Add Files to Group ?Source Group 1?”,将此源程序添加到工程中,如图2-1所示。

2.3 源程序编译、连接

单击“project/rebuild all target files”菜单或者按 按纽,仿真环境则对源文件进行编译连接,视程序正确与否,有两种编译结果:

若程序无误,编译通过,出现如图2-2所示的编译信息窗口,说明编译成功。

图2-1 包含源程序的工程界面

12

图2-2 编译成功的信息窗口

若源程序有误,则出现如下的编译连接信息窗口,说明编译错误。可双击错误信息,则在源文件编辑窗口中自动显示出错信息所在行。

2.4 程序调试

图2-3 编译不成功的信息窗口

源程序编译通过并不代表程序就一定正确,这只能说明程序已经没有语法上的错误了,至于在算法、流程上是否正确,则需要对程序进行调试,如果程序运行结果符合事先设计的算法、流程,那么这才能说编写的程序是正确的。

初学者很容易犯急噪的毛病,即程序编译通过后,急着让程序连续运行,若运行通过(即结果正确),则认为程序就正确了,其实,这样做并不能说明程序完全正确,有时一个程序对于某些初始条件,可以得到正确结果,而初始条件改变后,却发现结果错误。

程序调试的一般做法是:

编译、连接通过后,不要急于让程序连续运行,而是先进行手动的单步调试,随时观察各个变量、RAM单元、流程跳转等是否符合算法规定,排除各种非语法性错误,直至程序完全正确;

对于复杂程序,必须设计成模块化结构,调试时一个一个模块单独调试,每个模块均正确后,再进行整个程序的调试。

在调试过程中,充分利用断点、变量窗口、寄存器窗口、内部RAM窗口等各种工具,提高程序调试效率。

13