资源描述
《微机原理及接口技术》
实 验 指 导 书
杨霞 周林英 编
长安大学电子与控制工程学院
2009年9月
实验仪器简介
STAR ES598PCI实验仪提供了几乎所有最实用、新颖的接口实验,提供详尽的C、汇编例子程序及其使用说明,不但可以满足各大专院校进行单片机课程的开放式实验教学,也可以让参加电子竞赛的学生熟悉各种类型的接口芯片,做各种实时控制实验,轻松面对电子竞赛;也可以让刚参加工作的电子工程师迅速成为高手。
STAR ES598PC提供实验仪与微机同步演示功能,方便老师教学和演示。它提供了一个库文件,如果学生上机时间有限,只需编写最主要的程序,其它调用库文件即可;它布局合理、清晰明了,模块化设计,可以无限升级,让您的选择永不落伍;兼容性强,可以轻松升级,减少设备投资;使用方便,易于维护。
实验仪功能特点
◇ 集编辑器、项目管理、启动编译、连接、错误定位、下载、调试于一体,多种实验仪、仿真器、多类型CPU仿真全部集成在一个环境下,操作方法完全一样。
◇ 完全VC++风格。支持C、PL/M、宏汇编:同时支持Keil公司C51、Franklin公司C51、IAR/Archimedes公司的C51、Intel C96、Tasking的C196、Borland公司的TASM、Turbo C。
◇ 支持ASM(汇编)、C、PLM语言,多种语言多模块混合调试,文件长度无限制。
◇ 支持BIN、HEX、OMF、AUBROF等文件格式。可以直接转载ABS、OMF文件。
◇ 支持所有数据类型观察和修改。自动收集变量于变量窗(自动、局部、模块、全局)。
◇ 无须点击的感应式鼠标提示功能。
◇ 功能强大的项目管理功能,含有调试该项目有关的仿真器、所有相关文件、编译软件、编译连接控制项等所有的硬软件信息,下次打开该项目,无须设置,即可调试
◇ 支持USB、并口、串口通信。
◇ 提供模拟调试器。
◇ 符合编程语言语法的彩色文本显示,所有窗口的字体、大小、颜色可以随意设置。
提供几十个实验的汇编、C版本的源文件。提供一个库文件,如果学生上机时间有限,只需编写最主要的程序,其它调用库文件即可。
实验仪可提供以下软件实验:十进制数加法,十进制数减法,四字节二进制数转十进制数,数据传送,冒泡排序,二分查找法,散转等。
星研集成环境软件的安装和使用
1 软件安装
1.1安装星研集成环境软件
一. 新用户安装步骤
使用光盘安装:
1.将仿真器、实验仪所配CD插入CD-ROM驱动器。
2.在“我的电脑”或“资源管理器”中选择CD-ROM驱动器\ WIN32\星研,然后运行SETUP.EXE文件即可进入安装界面。
3. 中文界面,用户只需按程序提示一步一步进行安装即可。
使用Internet下载文件的用户
1.运行下载文件(XingYan.exe),软件自动执行安装程序。
2.安装程序为中文显示,用户只需按程序提示一步一步进行安装即可。
二. 已安装过低版本星研集成环境软件的用户的安装步骤:
1.首先将原来的低版本软件进行卸载,具体步骤请参考“软件卸载”部分的内容。
2.以后按新用户的安装步骤进行安装。
在安装过程中,如果用户没有指定安装目录,安装完成后会在C:盘建立一个C:\XINGYAN目录(文件夹),结构如下:
XingYan 可执行文件、DLL文件、寄存器文件
EXAMPLES 例子程
1.2 软件卸载
1.进入控制面板,运行“添加/删除程序”。
2.进入“添加/删除程序”窗口,在“安装/卸载”页面上的列表中选择“星研集成环境软件”,按“删除”按钮,之后按自动卸载程序的说明一步一步地操作即可。
1.3 USB驱动程序
1、USB驱动程序的安装
通过USB(通用串口总线)接口将微机与仿真器、实验仪相连,打开仿真器、实验仪电源。仿真器、实验仪与微机的第一次连接引起驱动程序的安装会变得很简单,您只需等待安装过程的结束或按驱动程序的安装向导执行完即可。驱动程序的安装会出现如下界面:
实际的界面可能有些差别,请等待该过程的结束。驱动程序的安装过程中,请勿执行其它应用程序。
2、 如何解决连接不上的情况
如果仿真器、实验仪与微机连接不上是由于未按正确步骤造成的,可根据以下步骤解决:
Window98/Window Me:重新安装星研集成环境软件,关闭仿真器电源,稍等几秒钟,再打开电源,等待操作系统安装新的驱动程序结束后,运行星研软件即可。
Windows2000/WinXP:在仿真器电源打开的情况下,使用控制面板中的“设备管理器”,可以看到一个未安装好的USB设备:
上图中的“通用串行总线控制器”下有一个打问号的USB设备,选中后按鼠标右键,选择菜单中的“卸载”项。重新安装星研集成环境软件,关闭仿真器、实验仪电源,稍等几秒钟,再打开电源,等待操作系统安装新的驱动程序结束后,运行星研软件即可。
注意:必须先安装星研集成环境软件;在WinXP中,驱动程序的安装会有选项,按缺省的值选择即可。
1.4 软件启动
运行Windows,进入桌面窗口。
鼠标单击“开始”按钮,在“程序”栏中打开“星研集成环境软件”菜单栏,在其中选择“星研(SUPER、STAR系列仿真器)”,开始启动星研集成环境软件。
注意:当您使用低配置机器时,从星研集成环境软件退出后必须等待足够的时间,让系统完全退出(硬盘停止工作)后,方可再次启动星研集成环境软件。
1.5 编译器
星研集成环境软件支持的编译器
MCS51
MCS96、MCS196
80X86
Keil A51、C51
Franklin A51、C51
Intel ASM51、PL/M51
Archimedes A8051、C-51
Intel ASM96、PLM96、C96 Tasking ASM196、C196
TC、TASM
编译器请用户自备。
设置工作环境
您的编译器正确安装后,请设置星研集成环境软件的编译器工作环境。
打开[主菜单 » 项目 » 设置工作环境]:
例如:您使用的编译器是TASM、TC,安装在C:\xingyan\TASM,C:\xingyan\TC,
TASM宏汇编路径: C:\xingyan\TASM;
Turbo C路径: C:\xingyan\TC;
2 如何使用星研集成环境软件
星研集成软件为用户提供了许多实用和方便的观察、调试及分析的功能,下边几节,通过实例介绍如何使用星研集成环境软件。使用户体验该软件功能的强大和方便。
2.1 数据传送程序(ASM)
星研集成环境软件推荐您使用项目为单位来管理您的程序。如果您做一个简单的实验,或只希望看一个中间结果,您可以不建立项目文件,系统需要的各种设置,来源于“缺省项目”。本节不使用项目文件。
本例旨在通过建立一个具体的程序来介绍星研集成软件的使用方法以及它的强大的调试功能。使用户很快上手,体验到此软件功能的强大和方便。
本实例是将数据段中3000H~30FFH单元的内容传送给实验仪B4区的61C256的2000H~20FFH中;B4区的61C256在I/O设备区,使用、读写;再将它传送回数据段的6000H~60FFH中,程序是用汇编语言来编写。下面介绍相应的操作步骤:
首先运行星研集成软件。启动画面如图:
1、设置缺省项目
执行 [主菜单 » 辅助 » 缺省项目],出现一个对话框:
选择“STAR ES8688仿真模块”。
点击进入下一步:“选择语言”
您可以根据自己的需要以及程序的类型作相应的选择,本实例选择Borland公司的Turbo C(3.0)、TASM(5.0) (请确定在选择语言之前已经安装好相应的编译软件)。然后再点击进入下一步:“编译、连接控制项”
实验仪提供64K memory空间,memory model请选择tiny,缩写为mt;如果需要源程序级别调试,必须使用-v –y控制项,为了支持多文件编译、连接,必须使用-c控制项。
一般不必改变Turbo C的编译控制项。
如果需要源程序级别调试,必须使用/zi /l控制项。
一般不必改变Tasm的编译控制项。
如果需要源程序级别调试,必须使用/m /l /v控制项。
一般不必改变TLINK的连接控制项。
然后再点击进入下一步:“存贮器出借方式”
仿真模块EMU598提供64K仿真RAM,作程序段(CS)、数据段(DS)、附加段(ES)、堆栈段(SS)使用。
2、建立源文件
下面我们建立源文件,执行 [主菜单 » 文件 » 新建],(或者点击图标)打开窗口如下:
首先选择存放源文件的目录,输入文件名,注意:一定要输入文件名后缀。对源文件编译、连接、生成代码文件时,系统会根据不同的扩展名启动相应的编译软件。比如:*.asm文件,使用TASM来对它编译。本实例文件名为move.asm。窗口如下:
按“确定”即可。然后出现文件编辑窗口:
输入源程序,本实例的源程序如下:
.MODEL
TINY
;memory mode : tiny
.STACK
100
;堆栈
.CODE
;开始程序段
START:
MOV
AX,@DATA
MOV
DS,AX
MOV
ES,AX
NOP
MOV
CX,100H
MOV
SI,3000H
MOV
DX,2000H
START1:
MOV
AL,[SI]
OUT
DX,AL
INC
SI
INC
DX
LOOP
START1
MOV
DI,6000H
MOV
DX,2000H
MOV
CX,100H
START2:
IN
DX,AL
MOV
[DI],AL
INC
DI
INC
DX
LOOP
START2
SJMP
$
Move
ENDP
END
START
输入源程序,如下图:
这样一个源文件就建立好了。
3.编译、连接文件
首先选择一个源文件,然后就可以编译、连接文件了。对文件编译,如果没有错误,再与库文件连接,生成代码文件(DOB、EXE文件)。编译、连接文件的方法有如下二种:(1)使用[ 主菜单 » 项目 » 编译、连接 ]或[主菜单 » 项目 » 重新编译、连接 ]”。(2)点击图标或来“编译、连接”或“重新编译连接”。
“编译连接”与“重新编译、连接”区别:“重新编译、连接”不管源文件是否修改、编译软件是否变化、编译控制项有无修改,对源文件编译,如果没有错误,再与库文件连接,生成代码文件(DOB、EXE文件)。编译、连接过程中产生的信息显示在信息窗的“建立”视中。编译没有错误的信息如下:
若有错误则出现如下信息框:
有错误或警告信息,用鼠标左键双击错误、警告信息或将光标移到错误或警告信息上,回车,系统会自动打开对应的出错文件,并定位于出错行上。如图:
这时用户可以作相应的修改,直到编译、连接文件通过。
4.调试
在进入调试状态以前,请正确设置通信口:执行[ 主菜单 » 辅助 » 通信 ],对话框如下:
仿真器、实验仪配套的通信线可以与微机USB口相连,即为USB通信线,请选择USB。
对于最下面一行的校验,通常您不必选中它,可以提高传送DOB、HEX、BIN文件时的速度。
在进入调试状态以前,您还必须确定仿真器、实验仪与微机的正确连接,如果使用仿真器,仿真头正确地连接在仿真器上,电源接通,开关打开。
在软件中选择对应的仿真器、实验仪型号,具体设置如下:执行[ 主菜单 » 辅助 » 仿真器、实验仪 ],对话框如下:
根据你所使用的机型作相应选择。
如果编译、连接正确后,可以开始调试程序。进入调试状态方法有:
a) 执行[ 主菜单 » 运行 » 进入调试状态]
b) 点击工具条的
c) 执行[ 主菜单 » 运行 » 装载DOB、HEX、BIN文件]
进入后的窗口如下:
在整个图片中我们可以看到相对应的窗口信息。在“工作区窗”的“CommonRegister”中我们可以了解通用寄存器的信息。中间的窗口为源程序窗口,用户可在此设置断点,设置光标的运行处,编辑程序等。寄存器窗我们可以看到一些常用的寄存器的数值。存贮窗1和存贮窗2显示相应的程序段(CS)、数据段(DS)、IO设备区的数据,还有变量窗,自动收集变量显示其中。反汇编窗显示对程序反汇编的信息代码、机器码、对应的源文件。在信息窗的“装载”视中,显示装载的代码文件,装载的字节数,装载完毕后,显示启始地址,结束地址。这种船坞化的窗口比通常的窗口显示的内容更多,移动非常方便。用鼠标左键点住窗口左边或上方的标题条,移动鼠标,将窗口移到您认为合适的位置;将鼠标移到窗口的边上,鼠标的图标变成可变化窗口时的形状,用鼠标左键点住,移动鼠标,变化一个或一组窗口的大小。在调试过程中,可以根据您的需要,在[主菜单 » 查看]中打开:寄存器窗、存贮器窗1、2、3、观察窗、变量窗、反汇编窗。您也可以通过[主菜单 » 辅助 » 设置 » 格式],设置每一种窗口使用的字体、大小、颜色。移动窗口到您喜欢的位置、大小。
首先在“种类”中选择一个窗口,然后选择“字体”、“大小”,在“颜色”中选择某一类,在“前景”、“背景”中选择您喜欢的颜色。
对于高级语言,在您的程序前有一段库文件提供的初始化代码,(当前可执行标志)不会出现在您的文件行上,如果您使用C语言,可将光标移到main函数上,按F4功能键,让CPU全速运行到main行上后停下;如果您使用PL/M语言,按F7功能键,让CPU“单步进入”,运行到您的任何一个可执行行后停下。
您可以使用以下命令调试您的程序:
设置或清除断点(功能键为F2)
在当前光标行上设置或清除一个断点
单步进入(功能键F7)
单步执行当前行或当前指令,可进入函数或子程序。
连续单步进入(功能键Ctrl + F7)
连续执行“单步进入”,用鼠标点击或按任意键后,停止运行。
单步(功能键 F8)
单步执行当前行或当前指令,将函数或子程序作为一条指令来执行。如果当前行中含有函数、子程序或发生中断,CPU将执行完整个函数、子程序或中断,停止于当前行或当前指令的下一有代码的行上。
连续单步(功能键 Ctrl + F8)
连续执行“单步”,用鼠标点击或按任意键后,停止运行。
运行到光标行(功能键 F4)
从当前地址开始全速运行用户程序,碰到光标行、断点或用鼠标点击,停止运行。
全速断点(功能键 F9)
从当前地址开始全速运行用户程序,碰到断点或用鼠标点击,停止运行。
全速运行(功能键Ctrl + F10)
从当前地址开始全速运行用户程序,此时,按用户系统的复位键,CPU从头开始执行用户程序,用鼠标点击,停止运行。全速运行时,屏蔽了所有断点,即不会响应任何断点。
停止运行
终止微机与仿真器之间通信(功能键 ESC)。
5.调试的方法及技巧
一般来说,用户的程序或多或少的会有一些逻辑错误,而仿真器、实验仪和星研集成软件则可帮助用户快速定位,这样可很快查出相应的错误。
在调试状态的窗口中我们可以看到很多的窗口,用户只要熟练地应用这些窗口来观察、分析数据就会很快的调试好程序,达到事半功倍的效果。
进入调试界面后,由于我们本次操作需要观察三个数据块:数据段3000H~30FFH,数据段6000H~60FFH,I/O区2000H~20FFH,可以打开二到三个存贮器窗口,具体操作是:[主菜单»查看]
然后根据你的需要打开不同的窗口。调整后的调试界面为:
由于本次操作主要是观察存贮器窗口,所以我们拉大了这两个存贮器窗口的大小。每个窗口设置了4个分页项:,我们可以在不同的分页项设置不同的观察数据空间以及地址范围。在中可以选择CS:Memory,DS:Memory,I/O,根据需要可以做不同的选择。在中可以直接输入地址,然后按回车,就可以直接转到我们输入的地址的窗口上面观察数据。由于我们在此程序中的写入数据的RAM空间分别为DS:3000H~30FFH、DS:6000H~60FFH、I/O区2000H~20FFH,故我们建立的分页项如下:
存贮0分页项:
存贮1分页项:
存贮2分页项:
我们这样设置界面的目的就是当用户要观察不同地址段的数据时,只要切换一下分页项就行了。由于本次程序需要同时观察DS:3000~30FFH、I/O:2000~20FFH和I/O:2000H~20FFH、DS:6000H~60FFH,所以打开二个存贮器窗。如图:
软件中总共存在3个存贮器窗。可以同时观察三个不同的地址。
存贮器窗口支持数据的直接修改功能。本软件的所有窗口中的数据都支持直接修改功能。用户可以根据自己的需要在窗口中直接修改数据。比如:执行程序前,将DS:3000H~300FH中的数据改为11、22、33、44、55、66、77、88、99、AA、BB、CC、DD、EE、FF、00,在相对应的地址中直接输入数据即可。如图:
一般刚刚写好的程序,在进入调试状态后,执行“单步”或者“单步进入”,我们推荐您能记住这些操作的相对应的功能键,这样您就在调试程序的过程中很方便。
在刚才的调试程序中我们多次执行“单步(F8)”命令,在工作区窗口的CommonRegister视中查看通用的寄存器:
我们可以观察到在本程序中所使用的一些寄存器的变化,比如AX、CX、DX、SI的数值的变化,每一次循环,CX减一,DX、SI加一,AX寄存器的低字节AL暂存从DS:[SI]取出的数值:11、22、33、44、55、66……。
我们可以看到存贮器窗口中的相对应的RAM的数据的变化。比如
其中右边为相应数据的ASCII码。切换分页项我们可以观察到其它地址的数据。
把光标移动到MOV DI,6000H行上,点击图标(功能键 F4),全速运行到光标行,检查IO:2000H~20FFH内容,是否与DS:3000H~30FFH相同,如果完全一样,说明以上程序没有任何问题。
切换分页项,存贮器窗显示DS:6000H开始的单元内容,将光标移到JMP $行的左边,鼠标变为,点击鼠标,在该行上设置了一个断点,也可以用鼠标点击该行,将光标移到鼠标处,点击图标(功能键为F2),设置断点,重复操作,清除断点。
点击图标(功能键 F9),CPU全速断点运行到光标处停下,检查DS:6000H~60FFH内容,与I/O:2000H~20FFH内容是否一样,相同表示程序没问题;如果不相同,将光标移到MOV DI,6000H行上(具体操作是:用鼠标点击该行,然后再点击图标),使用单步进入命令F7或连续单步进入命令Ctrl + F7,检查结果,判断程序出错原因。
星研集成软件为用户提供了许多实用和方便的观察、调试、分析的功能,其他的一些功能我们会在后续的实例中作更详细的介绍。用户也可以依此类推,发掘出更多更好的为自己调试程序方便的功能。
目 录
实验一 清零程序 4
实验二 拆字程序 6
实验三 数据区移动 8
实验四 多分支程序设计 10
实验五 多字节减法运算 13
实验六 显示程序 16
实验七 8251串口实验 25
实验八 步进电机控制 29
附录一 汇编语言的存储模型 36
附录二 8279键值显示程序 37
实验一 清零程序
一、实验目的
掌握8088汇编语言程序设计和调试方法。
二、实验设备
STAR系列实验仪一套、PC机一台。
三、实验内容
把RAM区内4000H-40FFH单元的内容清零 。
四、程序框图
五、源程序清单
.MODEL TINY
.STACK 100
.DATA
.CODE
ORG 0100H
START:
MOV BX,4000H
MOV AX,0000H
MOV CX,80H
L1: MOV [BX],AX
INC BX
INC BX
LOOP L1
JMP $
END START
六、实验步骤
手动修改RAM区内4000H-40FFH的内容,连续或单步方式运行程序,检查4000-40FFH内容 执行程序前后的变化。
七、思考
1、把4000H-40FFH中的内容改成FF,如何修改程序。
2、把4000H-40FFH中的内容改成00~FF,如何修改程序。
实验二 拆字程序
一、实验目的
掌握汇编语言设计和调试方法。
二、实验设备
STAR系列实验仪一套、PC机一台。
三、实验内容
把4000H单元的内容拆开,高位送4001H低位,低位送4002H低位,4001H、4002H 的高位清零,一般本程序用于把数据送显示缓冲区时用。
四、程序框图
五、源程序
.MODEL TINY
.STACK
.DATA
.CODE
START:
MOV BX,4000H
MOV AL,[BX]
MOV AH,AL
MOV CL,4
SHR AH,CL
INC BX
MOV [BX],AH
AND AL,0FH
INC BX
MOV [BX],AL
JMP $
六、实验步骤
手动修改4000H的内容,用连续或单步方式运行程序,检查4000H-4002H中内容变化情况。
七、思考
1.如何用断点方式调试本程序。
2.把4000H、4001H单元低位的内容合成一字送4002H单元。
实验三 数据区移动
一、实验目的
掌握RAM中的数据操作。
二、实验设备
STAR系列实验仪一套、PC机一台。
三、实验内容
把4100H源RAM区首址内的16字节数据传送到4200H目标RAM区。
四、设计思想
程序要求把内存中某一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。源数据块和目的数据块在存储器中可能有三种情况,如下图: 对于两个数据块分离的情况,如图(a),数据的传送从数据块的首址开始,或者从数据块的末址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。
可以得出以下结论:当源数据首址>目的块首址时,从数据块首址开始传送数据。 当源数据块首址<目的块首址时,从数据块末地址开始传送数据。
五、程序框图
六、源程序清单
.MODEL TINY
.STACK
.DATA
.CODE
ORG 0100H
START0:
MOV CX,0010H
MOV SI,4100H
MOV DI,4200H
CMP SI,DI
JA A42
ADD SI,CX
ADD DI,CX
A41: DEC SI
DEC DI
MOV AL,[SI]
MOV [DI],AL
LOOP A41
JMP $
A42: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
LOOP A42
JMP $
END START0
七、实验步骤
调试运行3060程序,检查4100-410FH中内容是否和4200-420FH中内容完全一致。
八、思考
1.把4200H源RAM区首址内的16字节数据传送到4100H目标RAM区。
2.把4100H源RAM区首址内的16字节数据传送到410AH目标RAM区。
实验四 多分支程序设计
一、实验目的
掌握汇编语言的编程,熟悉程序散转的设计方法。
二、实验设备
STAR系列实验仪一套、PC机一台。
三、实验内容
编写程序,根据接收到的键值,作不同的处理。
四、设计思想
多分支结构相当于一个多路开关,在程序设计中通常是根据某寄存器或某单元的内容进行程序转移。在设计多分支转移程序时,如果分支太多,则平均转移速度太慢,本实验采用转移地址表实现多分支转移,可以提高平均转移速度。
五、程序框图
六、实验步骤
1、连线说明:
E5区 :CLK
——
B2区:2M
E5区 :CS
——
A3区:CS5
E5区 :A0
——
A3区:A0
E5区 :A、B、C、D
——
G5区:A、B、C、D
2、在G5区的键盘上输入1位数
3、使用各种手段调试程序
3、结果显示在G5区的数码管上
七、源程序清单
;调用GetKeyB返回键值,根据键值执行相应的程序
.MODEL
TINY
EXTRN
Display8:NEAR, GetKeyB:NEAR
.STACK
100
.DATA
BUFFER
DB
8 DUP(?)
.CODE
START:
MOV
AX,@DATA
MOV
DS,AX
MOV
ES,AX
NOP
START1:
CALL
GetKeyB
;键值存放在AL中
CMP
AL,8
JB
START2
XOR
AL,AL
;大于7,作0处理
START2:
XOR
AH,AH
MOV
BX,AX
SHL
BX,1
LEA
DI,Table_1
JMP
CS:[DI][BX]
Table_1:
DW
Key0, Key1, Key2, Key3, Key4, Key5, Key6, Key7
Key0:
MOV
AL,1
JMP
Key
Key1:
MOV
AL,2
JMP
Key
Key2:
MOV
AL,3
JMP
Key
Key3:
MOV
AL,4
JMP
Key
Key4:
MOV AL,5
JMP
Key
Key5:
MOV
AL,6
JMP
Key
Key6:
MOV
AL,7
JMP
Key
Key7:
MOV
AL,8
JMP
Key
Key:
MOV
CX,8
LEA
DI,BUFFER
REP
STOSB
LEA
SI,BUFFER
CALL
Display8
MOV
CX,60000
LOOP
$
;延时
JMP
START1
END
START
实验五 多字节减法运算
一、实验目的
掌握BCD码、补码,熟悉多文件、多模块汇编语言程序设计的方法。
二、实验设备
STAR系列实验仪一套、PC机一台。
三、实验内容
从键盘上输入4位被减数、减数,实现双字节BCD码(四位数)的减法,结果显示在数码管上;进一步熟悉使用断点、单步进入、单步、运行到光标处、修改PC指针、全速运行等各种调试手段;熟悉查看特殊功能寄存器、CS段、DS段存贮器的各种方法。
四、程序框图
五、实验步骤
1、连线说明:
E5区 :CLK
——
B2区:2M
E5区 :CS
——
A3区:CS5
E5区 :A0
——
A3区:A0
E5区 :A、B、C、D
——
G5区:A、B、C、D
2、在G5区的键盘上输入4位被减数、减数
3、结果显示在G5区的数码管上
六、源程序清单
.MODEL
TINY
EXTRN
Display8:NEAR, GetBCDKey:NEAR
EXTRN
F1:BYTE
.STACK
100
.DATA
BUFFER
DB
8 DUP(?)
minuend
DW
1 DUP(?)
;被减数
subtrahend
DW
1 DUP(?)
;减数
.CODE
START:
MOV
AX,@DATA
MOV
DS,AX
MOV
ES,AX
NOP
MOV
F1,0
;先清除显示,再接收键输入
START1:
LEA
DI,minuend
MOV
CX,4
;按键次数
CALL
GetBCDKey
;得到双字节十进制数(被减数)
MOV
F1,1
;接收到第一个键,才清除显示
LEA
DI,subtrahend
MOV
CX,4
;按键次数
CALL
GetBCDKey
;得到双字节十进制数(减数)
MOV
AX,minuend
MOV
BX,subtrahend
MOV
DL,10H
CMP
AX,BX
JNB
START2
XCHG
AX,BX
MOV
DL,11H
;负数
START2:
SUB
AL,BL
;低位
DAS
XCHG
AL,AH
SBB
AL,BH
;高位
DAS
XCHG
AL,AH
CLD
LEA
DI,BUFFER
;存放显示结果
CALL
B1toB2
;低位
MOV
AL,AH
CALL
B1toB2
;高位
MOV
AL,10H
;最高三位消隐
STOSB
STOSB
STOSB
STOSB
LEA
SI,BUFFER+3
MOV
CX,3
CALL
BlackDisplay
;将高位0消隐
LEA
SI,BUFFER
CALL
Display8
JMP
START1
;将一个字节压缩BCD码转换成二个字节非压缩BCD码
B1toB2
PROC
NEAR
PUSH
AX
AND
AL,0FH
STOSB
POP
AX
AND
AL,0F0H
ROR
AL,4
STOSB
RET
B1toB2
ENDP
BlackDisplay
PROC
NEAR
;将高位0消隐
BlackDisplay1:
MOV
AL,[SI]
CMP
AL,0
JNZ
Exit
MOV
AL,10H
MOV
[SI],AL
DEC
SI
LOOP
BlackDisplay1
Exit:
CLD
MOV
[SI+1],DL
RET
BlackDisplay
ENDP
END
START
七、思考
从键盘上输入4位被加数、加数,实现双字节BCD码(四位数)的加法,结果显示在数码管上。
实验六 显示程序
一、实验目的
1、熟悉8255的功能,理解LED显示原理及控制方法;
2、学会使用LED点阵液晶显示字体和图形;
3、认真预习本节实验内容,可尝试自行编写程序,做好实验准备工作,填写实验报告。
二、实验设备
STAR系列实验仪一套、PC机一台。
三、实验内容
1、编写程序,用8255的PA、PB口控制LED的位选和段选,
(1)编写程序,控制8位数码管跑马灯形式显示0;
(2)编写程序,控制8位数码管静态显示指定字符1-8;
(3)编写程序,控制8位数码管动态循环显示8位字符;
2、按图连接线路,运行程序,观察实验结果。
四、实验原理图
五、实验步骤
1、主机连线说明:
B4区:CS(8255)
——
A3区:CS1
B4区:A0、A1
——
A3区:A0、A1
B4区:JP56、JP53
——
G5区:JP 41、 JP 42
2、运行程序,验证显示结果。
六:源程序
(1) 控制8位数码管依次显示0;
.MODEL TINY
.STACK 100
.DATA
IO8255_Con EQU 0F003H ;CS3
IO8255_A EQU 0F000H ;A
IO8255_B EQU 0F001H ;B
LED_TAB: DB 03FH,06H,05BH,04FH,66H,6DH,7DH,07H
DB 07FH,6FH,77H,7CH,39H,05EH,79H,71H
.CODE
START: MOV AX,@DATA
MOV DS,AX
MOV ES,AX
MOV DX,IO8255_Con
MOV AL,80H ;方式0,A,B,C均为输出
OUT DX,AL
MOV AL,0FEH ;8255 PC输出
MOV CX,8
GOON: MOV DX,IO8255_A ;位选
OUT DX,AL
ROL AL,1
MOV AH,AL
MOV DX,IO8255_B
MOV AL,03FH
OUT DX,AL
MOV AL,AH ;0FFH->8255 PA
CALL Delay
JMP GOON
Delay PROC NEAR
PUSH CX
MOV CX,20000
Delay1: LOOP Delay1
POP CX
RET
ENDP
END START
(2) 编写程序,控制8位数码管依次显示任意指定字符(0-F);
.MODEL TINY
.STACK 100
.MODEL TINY
.STACK 100
.DATA
IO8255_Con EQU 0F003H ;CS3
IO8255_A EQU 0F000H ;A
IO8255_B EQU 0F001H ;B
F1 DB 0
LED_TAB: DB 03FH,06H,05BH,04FH,66H,6DH,7DH,07H
DB 07FH,6FH,77H,7CH,39H,05EH,79H,71H
.CODE
START: MOV AX,@DATA
MOV DS,AX
MOV ES,AX
; MOV F1,0
MOV DX,IO8255_Con
MOV AL,80H ;方式0,A,B,C均为输出
OUT DX,AL
MOV A
展开阅读全文