青岛科技大学微机原理与应用实验指导书

更新时间:2024-03-10 13:22:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

微机原理与应用实验指导书

目录

实验一 调试工具DEBUG的使用及基本指令用法 ........................ 2 实验二 宏汇编程序的基本语法及运算类程序编制 ..................... 4 实验三 系统功能调用 ..................................................................... 7 实验四 汇编语言码制转换程序设计 ............................................. 9 实验五 简单I/O接口的操作 ........................................................ 12 实验六 可编程并行接口芯片8255A的使用 .............................. 14 实验七 查询方式的串行通讯接口实验 ....................................... 21 实验八 A/D、DA转换实验 ......................................................... 22

32位微机原理与接口技术实验指导

实验一 调试工具debug的使用及基本指令用法

1、实验目的

(1)掌握debug调试工具的使用方法。 (2)测试8086的各种基本指令的用法。

2、实验设备

PC机一台或QTH-2008PC实验设备一套。 3、实验内容 (1)debug的使用 ① debug的进入和退出

c:\\masm>debug↙ - ?这是debug的提示符,在此可以输入debug的命令 -q↙ ?退出debug

② 及修改CPU内部的各寄存器

-r↙ ?观察各寄存器的内容

AX=0000 BX=0000 CX=0000 DX=0000 SP=CFDE BP=0000 SI=0000 DI=0000

DS=10DD ES=10DD SS=10DD CS=10DD IP=0100 NV UP DI PL NZ NA PO NC

10DD:0100 7C0A JL 010C

-r ax ↙ ?显示并修改AX的内容 AX 0000

:1234↙ ?将AX的内容改为1234H

-rf↙ ?显示并修改标志寄存器的内容

NV UP DI PL NZ NA PO NC -ov dn↙ ?将标志寄存器的OF置为OV;DF置为DN。 ③ 观察观察和修改内存单元的内容

-d 2000↙ ?查看从地址DS:2000H开始的128个单元的内容 10DD:2000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 10DD:2010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 10DD:2020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

2

32位微机原理与接口技术实验指导

10DD:2030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 10DD:2040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 10DD:2050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ -e 2000↙ ?修改从地址DS:2000H开始内存单元的内容 10DD:2000 00.01 00.02 ↙ ?划线数字为键入的内容,连续修改按空格键 ④ 输入程序

-a 100↙ ?从CS:100H处开始输入程序(默认的程序起始地址) 10DD:0100 mov ax,1234↙ ?输入汇编指令 10DD:0103 mov [2002],ax↙

10DD:0106↙ ?回车退出程序输入

-a 103↙ ?修改103处的指令 10DD:0103 mov [2000],ax↙ ?输入汇编指令 10DD:0106↙ -

⑤ 单步执行程序

-t=100↙ ?执行CS:100H处的一条指令,自动显示寄存器内容及下一条指令。 AX=1234 BX=0000 CX=0000 DX=0000 SP=CFDE BP=0000 SI=0000 DI=0000 DS=10DD ES=10DD SS=10DD CS=10DD IP=0103 OV DN DI PL NZ NA PO NC 10DD:0103 A30020 MOV [2000],AX DS:2000=0201 -t↙ ?继续执行下一条指令 ⑥ 反汇编程序

-u 100↙ ?从CS:100H处开始反汇编 10DD:0100 B83412 MOV AX,1234

10DD:0103 A30020 MOV [2000],AX ?刚才输入的两条指令 10DD:0106 36 SS: ?乱码 10DD:0107 A22C41 MOV [412C],AL 10DD:010A EB22 JMP 012E 10DD:010C 83F906 CMP CX,+06 10DD:010F 750D JNZ 011E

10DD:0111 807C0A2C CMP BYTE PTR [SI+0A],2C 10DD:0115 7505 JNZ 011C 10DD:0117 FF36A22C PUSH [2CA2] 10DD:011B 41 INC CX 10DD:011C EB10 JMP 012E

3

32位微机原理与接口技术实验指导

10DD:011E 83F909 CMP CX,+09 ⑦ 执行一段程序

-g=100 106↙ ?从CS:100H开始,执行到CS:106处停止。

AX=1234 BX=0000 CX=0000 DX=0000 SP=CFDE BP=0000 SI=0000 DI=0000

DS=10DD ES=10DD SS=10DD CS=10DD IP=0106 OV DN DI PL NZ NA PO NC 10DD:0106 36 SS:

10DD:0107 A22C41 MOV [412C],AL SS:412C=00 ……

(2)基本指令的用法

在debug中输入一些基本指令并执行,观察并记录指令的执行情况。 4、实验步骤

(1) 启动Debug调试工具,根据实验内容,验证Debug命令及指令执行情况。 (2) 观察调试过程中指令执行后各寄存器及数据区的内容。 5、实验问题探讨

(1)如何利用Debug去观察中断向量表?

(2)机器复位后执行的第一条指令在哪儿?是什么指令? (3)在debug中输入16进制数时,需要键入H吗?

(4)从当前位置开始执行指令到CS:0212H处,在Debug中应该使用什么命令?

实验二 宏汇编程序的基本语法及运算类程序编制

1、实验目的

(1) 学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互

之间的关系。 (2) 熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。 (3) 掌握利用汇编实现简单、分支、循环结构设计 2、实验设备

PC机一台或QTH-2008PC实验设备一套。 3、实验内容

(1)编制包含多种数据定义伪指令的完整程序,经汇编、连接后,装入DEBUG, 观察

4

32位微机原理与接口技术实验指导

数据的存储情况,从而掌握常用伪指令的作用。举例:

X1 DB 12H, ’AB’ X2 DW 12H, ’AB’ NUM=$-X1 X3 DD 12H ;以上数据在内存中如何存放? …

PUSH DS XOR AX,AX PUSH AX

MOV AX,DATA MOV DS,AX …

MOV AL,X1 ;翻译成机器指令是什么格式? MOV AX,X2 ;? MOV BL,NUM ;? …

在debug中执行完MOV DS,AX指令后(为什么?),使用 -d 0 观察数据段的存储单元的数据存储情况。

(2)在内存BUF开始的单元中,存放着一组无符号字节数据,编程查找其中最大值并存于MAX单元中。 4、编程指导

利用循环程序实现查找最大值,取出第一个数作为最大值初值,以次和后续数据进行比较比次数大则替换,否则保持不变.比较次数为个数减1.注意使用汇编、连接、调试的方法,尤其是DEBUG的使用。在DEBUG状态下执行程序并设置断点,通过察看内存,看程序是否执行正确。

所编写的汇编程序,要注意结构,只有结构完整,汇编才能通过。 5、实验步骤

方法一、非集成开发环境

(1) 使用EDIT或WINDOWS下的记事本或写字板输入你的程序并保存到c:\\masm

目录下,命名为t3.asm(后缀必须是asm).

(2) 汇编过程:c:\\masm>masm t3; ?如果没有错误,将生成t3.obj文件 (3) 连接过程:c:\\masm>link t3; ?如果没有连接错误,将生成t3.exe文件 (4) 调试程序:c:\\masm>debug t3.exe ?将该程序装入debug进行调试。

方法二、使用QTHPC2008集成开发环境,建立项目文件、输入源程序、编译、连接、调试。

5

32位微机原理与接口技术实验指导

6、参考程序

AL>[SI]开始初始化取数送AL指针加1Y

NNAL? [SI]CX-1=0?Y存结果结束 图3-1 查找最大值程序流程图 DATA SEGMENT ;数据段定义 MOV DS,AX BUF DB 30,25,56,100,78,97,45,34,44 COUNT EQU $-BUF MAX DB ? MIN DB ? DATA ENDS

STACK SEGMENT PARA STACK 'STA' ;堆栈段 DB 100 DUP(?) STACK ENDS

CODE SEGMENT ;代码段定义 ASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FAR

START: PUSH DS ;前三句构造返回指针 MOV AX,0 PUSH AX

MOV AX,DATA ;对数据段赋值

MOV CX,COUNT ;数据个数 MOV SI,OFFSET BUF MOV AL,[SI]

DEC CX ;循环次数为个数减1 AGA: INC SI CMP AL,[SI] JA NEXT MOV AL,[SI] NEXT: LOOP AGA

MOV MAX,AL ;结果处理 EXIT: RET MAIN ENDP CODE ENDS END START

7 实验问题探讨

(1) 伪指令中的表达式是在什么阶段进行运算得出结果的? (2) 如果数据为一组有符号数,如何修改?

(3) 如果在查找最大值的同时查找最小值并存于MIN单元中,应如何实现?

6

32位微机原理与接口技术实验指导

实验三 系统功能调用

1. 实验目的

(1) 掌握系统调用的方法, 包括入口参数设置,功能号设置,系统调用和出口参数获

得。 (2) 进一步熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法,尤其

是对带有中断调用的汇编程序的调试。 (3) 掌握利用汇编实现键盘输入,屏幕显示的程序设计。 2、实验仪器

PC机一台或QTH-2008PC实验设备一套。 3. 实验内容

(1) 利用汇编语言实现以下过程:首先在屏幕显示What is your name: 然后等待用户

从键盘输入姓名存入内存指定区间,输出回车换行后,显示ok!。 (2) 从键盘输入一串字符以空格为结束标记,并按逆序显示输出。 4. 编程指导

DOS 功能调用的一般步骤为:

① 如有必要,装入入口参数到规定的寄存器;

② 装入功能号到 AH 中;如有必要,装入子功能号到 AL 中; ③ 调用 DOS 相应功能的中断 ( 这里一般指 INT 21H ); ④ 如有必要,取出返回结果或出错信息

利用DOS系统功能调用可以实现读键盘、显示,对磁盘、文件的操作、输入输出操作、时间的设置和读取等。

注意对于包含有系统功能调用的汇编程序的调试方法,在单步调试时当遇到 INT 21H 指令时不能用 T 命令跟踪,因为会进入到中断服务程序内部,这并不是我们所关心的。结决的方法为:在单步执行INT 21H 时,可用G命令代替T命令,G 不用接起始地址,断点为INT 21H 的下一句地址。或者,有一些DEBUG 工具包含V 或 B 命令可以不进入中断服务程序内部,而实现单步运行。

7

32位微机原理与接口技术实验指导

5.编程参考 (1) 程序流程图

(2) 实验内容(1)参考程序

DATA SEGMENT ;数据段定义 STR1 DB 'What is you name:$' STR2 DB 'OK!$' STR3 DB 20 DB ? DB 20 DUP(?) DATA ENDS

STACK SEGMENT PARA STACK 'STA' ;堆栈段 DB 100 DUP(?) STACK ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FAR

START: PUSH DS ;前三句构造返回指针 MOV AX,0 PUSH AX

MOV AX,DATA ;对数据段赋值 MOV DS,AX

MOV DX,OFFSET STR1 ;显示

8

MOV AH,9 INT 21H

MOV DX,OFFSET STR3 ;接受输入字符 MOV AH,10 INT 21H

MOV DL,0DH ;输出回车换行 MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H

MOV DX,OFFSET STR3 ;显示ok! MOV AH,9 INT 21H

EXIT: RET MAIN ENDP CODE ENDS END START

开始初始化显示回车换行输入字符指针减1中间地址送BX输出是空格?N存入内存指针加1YN(CX)-1=0?Y结束计数器加1 图3-2 逆序输出流程图 32位微机原理与接口技术实验指导

(3) 实验内容(2)参考程序

DATA SEGMENT ;数据段定义 BUF DB 100 DUP(?) DATA ENDS

STACK SEGMENT PARA STACK 'STA' ;堆栈段 DB 100 DUP(?) STACK ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FAR MOV AX,0 PUSH AX

MOV AX,DATA ;对数据段赋值 MOV DS,AX MOV SI,OFFSET BUF MOV CX,0

AGA: MOV AH,1 ; 接受字符 INT 21H

CMP AL,' ' ;是否是空格 JZ NEXT

MOV [SI],AL ;存入字符 INC SI INC CX

JMP AGA

NEXT: MOV DL,0DH ;输出回车换行 MOV AH,2 INT 21H MOV DL,0AH INT 21H

LOP1: DEC SI ; 逆序输出 MOV DL,[SI] MOV AH,2 INT 21H LOOP LOP1

EXIT: RET MAIN ENDP CODE ENDS END START

START: PUSH DS ;前三句构造返回指针 MOV AH,2

6.思考题

(1) 利用堆栈实现程序2的要求。 (2) 利用9号调用编写DOS界面下的简易菜单项。

实验四 汇编语言码制转换程序设计

1. 实验目的与要求 (1) 掌握码制转换的基本原理及相应的转换程序的编写。 (2) 进一步掌握利用DOS系统功能调用实现键盘输入,屏幕显示的功能。 2、实验设备

PC机一台或QTH-2008PC实验设备一套。 3. 实验内容 (1) 键盘输入一字符,以二进制形式显示其ASCII值。例如:输入字符A 在屏

9

32位微机原理与接口技术实验指导

幕显示0100 0001。 (2) 键盘输入一串数字串,以空格为结束标记,统计其中数字字符的个数存入

CX中,求这些数字之和存入BX中。例如:输入1234 则 CX=4 BX=0AH. (3) 键盘输入十进制整数(假定范围为0-32767),然后转换成二进制格式存储。 4. 编程指导

在程序设计中,经常需要进行代码转换。常用的代码转换有:BCD码转二进制码,二进制码转BCD码;ASCII码转 BCD码, BCD码转ASCII码;二进制码转ASCII码,ASCII码转二进制码等。

实验(1)是将二进制表示的数据显示,对应每位二进制数0,1的ASCII分别为30H和31H,将其转换后在用2号系统功能调用在屏幕上显示出来。要注意2号调用的出口参数为AL,AL为1调用成功,AL为0调用不成功。

实验(2)实验(3)都要注意从键盘输入的数字实际上是数的ASCII码,必需先将其转换为0-9的数后才能运算,实验(2)将其相加,实验(3)要分别乘各自得权后累加在一起。 5.流程框图和参考程序 (1) 实验内容(1)参考程序

STACK SEGMENT PARA STACK 'STA' ; 堆栈段 MOV DL,30H DB 100 DUP(?) STACK ENDS CODE SEGMENT

ASSUME CS:CODE,SS:STACK START:MOV AH,1 INT 21H MOV BL,AL MOV CX,8 AGA: SHL BL,1

ADC DL,0 MOV AH,2 INT 21H LOOP AGA EXIT: MOV AX,4C00H INT 21H CODE ENDS

END START

(2) 实验内容(2)参考程序

STACK SEGMENT PARA STACK 'STA' ; 堆栈段 JB INPUT DB 100 DUP(?) STACK ENDS CODE SEGMENT

ASSUME CS:CODE,SS:STACK START:MOV CX,0 MOV BX,0 INPUT:MOV AH,1 INT 21H CMP AL,' ' JZ STOP CMP AL,30H

10

CMP AL,39H JA INPUT INC CX SUB AL,30H MOV AH,0 ADD BX,AX JMP INPUT EXIT: MOV AX,4C00H INT 21H CODE ENDS

END START

32位微机原理与接口技术实验指导

INT 21H

POP POP POPF RET

DX AX

BREAK

MY_CODE ENDS

END MAIN

ENDP

RETURN:

8、思考题:

(1) 使用8255读取开关状态/控制LED与使用244或273有什么不同?

实验七 查询方式的串行通讯接口实验

1、实验目的

(1) 掌握查询方式下的PC机串行通讯及程序的设计。 2、实验设备

QTH-2008PC实验设备一套,串行通讯线一条。 3、实验内容

编写查询方式下的串口通讯程序,实现两台计算机的简单通讯,在A机上键入的字符,在B机上显示;反之亦然。 4、实验说明

PC机的串行通讯口是符合RS232标准的通讯口,利用串行通讯线可将两台PC机相连,采用3线连接,连接说明如下:

? 9针插头的2、3、5与另一头的3、2、5分别相连。 ? 可以使用PC机,也可以使用实验箱来完成本实验。 ? 通讯双方要求通讯格式、速率一致才能正常通讯。 5、实验步骤

(1) 首先利用Windows下的超级终端或串口调试助手测试一下串口是否连通。 (2) 编写查询方式下的通讯程序。 6、参考程序

CODE SEGMENT

ASSUME CS:CODE START PROC FAR

MOV DX, 3FBH

MOV AL, 80H OUT DX, AL MOV DX, 3F8H MOV AL, 12

21

32位微机原理与接口技术实验指导

OUT DX, AL MOV DX, 3F9H MOV AL, 0 OUT DX, AL MOV MOV OUT MOV MOV OUT

DX,3FBH AL,03 DX,AL DX,3F9H AL,0 DX,AL

INT MOV OUT PP: MOV IN TEST JZ QQ MOV IN MOV MOV INT QQ: JMP RET START ENDP CODE ENDS END START

DX,3F8H AL, DX DL, AL AH, 2 21H LP1 21H DX,3F8H DX,AL DX,3FDH AL,DX AL,01H

MOV DX,3FCH MOV AL,0AH OUT DX,0AL LP1: MOV AH, 1

INT 16H JZ PP

MOV AH,1 ;(或8,无回显)

7、实验问题 当一台计算机上运行实验程序,另一台计算机上不停地发送字符(编写发送程序),观察是否会丢失字符?提高通讯速率,观察在什么速率时开始丢失字符?

实验八 A/D、DA转换实验

1、实验目的

(1) 掌握0809A/D转换芯片的硬件电路和软件编程。 (2) 掌握DAC0832转换芯片的硬件电路和软件编程。 2、实验设备

QTH-2008PC实验设备一套。 3、实验内容

(1)本实验利用实验板上的ADC0809做A/D转换实验,将模拟信号转换成数字信号并在屏幕上显示,调节电位器观察屏幕上数据的变化。

(2)编写程序,使D/A转换模块输出阶梯波、锯齿波、方波。

4、实验说明

22

32位微机原理与接口技术实验指导

(1) ADC0809

ADC0809是CMOS的8位模/数转换器,采用逐次逼近原理进行A/D转换,芯片内有模拟多路转换开关和A/D转换两大部分,可对8路0~5V的输入模拟电压信号分时进行转换。模拟多路开关由8路模拟开关和3位地址锁存译码器组成,可选通8路模拟输入中的任何一路,地址锁存信号ALE将3位地址信号ADDA、ADDB、ADDC进行锁存,然后由译码电路选通其中的一路,被选中的通道进行A/D转换。A/D转换部分包括比较器、逐次逼近寄存器(SAR)、256R电阻网络、树状电子开关、控制与时序电路等。另外ADC0809输出具有TTL三态锁存缓冲器,可直接连到CPU数据总线上。

在实时控制与实时检测系统中,被控制与被测量的电路往往是几路或几十路,对这些电路的参数进行模/数、数/模转换时,常采用公共的模数、数模转换电路。因此,对各路进行转换是分时进行的。此时,必须轮流切换各被测电路与模数、数模转换电路之间的通道,以达到分时切换的功能。

ADC0809性能如下:

? 8位逐次逼近型A/D转换器,所有引脚的逻辑电平与TTL电平兼容。 ? 带有锁存功能的8路模拟量转换开关,可对8路0~5V模拟量进行分时切换。 ? 输出具有三态锁存功能。

? 分辨率:8位,转换时间:100μs。 ? 不可调误差:±1LBS,功耗:15mW。 ? 工作电压:+5V,参考电压标准值+5V。

? 片内无时钟,一般需外加640KHz以下且不低于100KHz的时钟信号。 ADC0809转换需要遵循一定的时序,首先输入地址选择信号,在ALE信号作用下,地址信号被锁存,产生译码信号,选中一路模拟量输入。然后输入启动转换控制信号START(不小于100ns ),启动A/D转换。转换结束,数据送三态门锁存,同时发出EOC信号,在允许输出信号控制下,再将转换结果输出到外部数据总线。

(2) DAC0832

DAC0832的主要性能: ① 输入的数字量为8位。

② 采用CMOS工艺,所有引脚的逻辑电平与TTL兼容。 ③ 数字量输入可以采用双缓冲,单缓冲和直通方式。 ④ 转换时间为1 μs

23

32位微机原理与接口技术实验指导

⑤ 线性误差:0.2%FSR。(FSR为满量程) ⑥ 分辩率:8位。

⑦ 单一电源:5V~15V,功耗20Mw。 ⑧ 参考电压:+10V~-10V DAC0832的内部结构

它由一个8位输入寄存器,一个8位DAC寄存器和一个8位D/A转换器三部分组成。在D/A转换器中采用R-2R电阻网络。LE信号为每个输入寄存器的内部控制信号,当LE=1时,接收输入数据;当LE=0时,内部锁存数据。 (1) DAC0832的工作方式

双缓冲工作方式——进行两级缓冲。采用双缓冲工作方式,可在对某数据转换的同时,进行下一个数据的采集,以提高速度,更重要的是能够用于需要同时输出多个参数的模拟量系统中,此时对应于每一种参数需要一片DAC0832。双缓冲方式时,CPU必须进行两步操作,第一步把数据写入8位输入寄存器,第二步再把数据从8位输入寄存器写入8位DAC寄存器。

单缓冲工作方式——只进行一级缓冲,可用第一组或第二组控制信号对第一级或第二级缓冲器进行控制。在一组控制信号作用下,输入的数据能一步写入到8位DAC寄存器中。

直通工作方式——不进行缓冲。当DAC0832芯片的CS、WR1、WR2和XFER引脚全部接地,ILE引脚接+5V高电平时,芯片就处于完全直通状态,CPU送来的八位数字量直接送到DAC转换器进行转换。 4、实验原理图

图4-9 ADC0809电路原理

24

32位微机原理与接口技术实验指导

6 实验步骤 (1) ADC0809实验 实验连线

? ? ?

图4-11 DAC0832电路原理

信号源模块短路262.14KHz,CLK0连到AD0809模块的时钟输入端ADCLK。 AD0809模块的ADWR、ADRD连到分别连到PC104总线接口模块的IOWR、IORD。

AD0809模块的数据(AD0~AD7)、地址线(A0~A7)分别连到PC104总线接口模块的数据(D0~D7)、地址线(A0~A7)。

? AD0809模块选通线ADCS连到PC104总线接口模块的IOY0。

? AD0809模块IN0接到电位器的DCOUT。

编制程序,将采样数值转换为电压值进行显示。调节电位器观察显示的变化。

25

图4-10 A/D转换实验连线

32位微机原理与接口技术实验指导

(2) DAC0832 实验连线

? ? ?

DAC0832模块的DAWR分别连到PC104总线接口模块的IOWR。

DAC0832模块的数据(AD0~AD7)连到PC104总线接口模块的数据(D0~D7)。 DAC0832模块选通线DACS连到PC104总线接口模块的IOY0。

图4-12 DA转换实验连线图

编写并运行程序, 用示波器观察AOUT的波形。

7、参考程序

(1)ADC0809实验

;FUNCTION CODE AD0809 DELAY_SET MY_STACK

MY_DATA DIDATA MY_DATA

MY_CODE MY_PROC

SEGMENT PARA 'CODE'

PROC

FAR

SEGMENT PARA 'DATA' DB ? ;要显示的数据 ENDS

MY_STACK

EQU EQU DB ENDS

0180H

01FFH ;延时常数 100 DUP(?)

ASSUME SS:MY_STACK MOV DS,AX MOV MOV OUT MOV LOOP IN CMP CALL JZ

CALL JMP

DIDATA,00H

DX,AD0809 AL,00H

DX,AL;启动AD转换 CX,DELAY_SET $;延时 AL,DIDATA BREAK STARTAD DSUP;显示 STARTAD

MAIN: MOV AX,MY_DATA

STARTAD: MOV

SEGMENT PARA 'STACK'

AL,DX;转换结束读取结果

ASSUME CS:MY_CODE, DS:MY_DATA

MY_PROC ENDP

26

32位微机原理与接口技术实验指导

;显示子程序 DSUP PROC PUSHF PUSH MOV MOV SHR NEAR CX DIDATA,AL CX,04 AL,CL

DELAY

PROC NEAR PUSHF PUSH PUSH MOV DEC DX CX

DX,DELAY_SET CX

D1: MOV CX, 40H D2: JNZ D2

;取高位

CALL MOV AND CALL CALL POP POPF

RET DSUP ENDp SEND PROC CMP JG ADD

JMP SEND1: ADD SEND2: MOV INT

RET SEND ENDp CR PROC MOV MOV INT

RET CR

ENDP

; 延时程序

(2 ) DAC0832实验程序

SEND AL,DIDATA AL,0FH;低位 SEND CR CX

NEAR AL,09H SEND1 AL,30H SEND2 AL,37H

AH,0EH 10H

NEAR ;回车 DL,0DH AH,02H 21H DEC JNZ POP POP POPF RET DELAY ENDp

;

;按任意键退出 BREAK PROC PUSHF PUSH

PUSH MOV MOV INT JE EXEC_EXIT: MOV INT RETURN: POP POP POPF

RET BREAK ENDP

MY_CODE ENDS

END 27

DX D1 CX DX

NEAR

AX DX AH,06H DL,0FFH 21H RETURN

AX,4C00H 21H DX AX MAIN

32位微机原理与接口技术实验指导

阶梯波参考程序

DA0832 DELAY_SET MY_STACK

MY_CODE MY_PROC

DELAY

PROC NEAR; 延时程序 PUSHF PUSH PUSH MOV DEC

DX CX

DX,DELAY_SET CX,800H CX

SEGMENT PARA 'CODE' PROC

FAR

MY_STACK

EQU EQU DB ENDS

0180H ;片选信号 20H ;延时常数 100 DUP(?)

DELAY

;按任意键退出 BREAK

PROC PUSHF PUSH PUSH MOV MOV INT MOV INT POP POP POPF RET ENDP

END START

AX DX AH,06H DL,0FFH 21H AX,4C00H 21H DX AX NEAR

JNZ D2 DEC JNZ POP POP POPF RET ENDP

DX D1 CX DX

SEGMENT PARA 'STACK'

ASSUME CS:MY_CODE, DS:MY_DATA,ASSUME SS:MY_STACK

MOV MOV MOV OUT CALL CALL JMP ENDP

AX,MY_DATA DS,AX AX,0000H DX,AL DELAY BREAK JTB1

START:

MOV DX, DA0832;产生阶梯波 ADD AL,20H

JTB1:

RETURN:

JE RETURN

MY_PROC

BREAK

MY_CODE ENDS

D1: MOV D2:

锯齿波参考程序

DA0832 EQU 0180H ;Base Address Register2 DELAY_SET MY_STACK

MY_STACK MY_DATA MY_DATA

EQU DB ENDS SEGMENT ENDs

PARA 'DATA' 50H ;延时常数

PARA 'STACK' 100 DUP(?)

SEGMENT

MY_CODE MY_PROC

SEGMENT PARA 'CODE' PROC

FAR

ASSUME CS:MY_CODE, DS:MY_DATA, ASSUME SS:MY_STACK START:

MOV MOV

AX, MY_DATA DS, AX

MOV DX,DA0832;产生锯齿波

28

32位微机原理与接口技术实验指导

DELAY PROC NEAR;延时程序

PUSHF PUSH PUSH MOV

DX CX

DX,DELAY_SET CX,10H CX DX

D1 CX DX

MOV OUT INC CALL CALL JMP

AL,00H DX,AL AL DELAY BREAK JCB1 ENDP

DELAY BREAK

POPF RET ENDP PROC PUSHF PUSH PUSH MOV MOV INT JE MOV INT POP POP POPF RET ENDP

END START

AX DX AH,06H DL,0FFH 21H RETURN AX,4C00H 21H DX AX

NEAR ;按任意键退出

JCB1:

MY_PROC

RETURN:

D1: MOV D2: DEC JNZ D2 DEC

JNZ POP POP

BREAK

MY_CODE ENDS

方波参考程序

DA0832 DELAY_SET MY_STACK

MY_STACK MY_DATA MY_DATA MY_CODE MY_PROC

EQU EQU DB ENDS SEGMENT ENDs

SEGMENT PARA 'CODE' PROC

FAR

PARA 'DATA' 0180H 200H ;延时常数

PARA 'STACK' 100 DUP(?)

CALL MOV OUT CALL

DELAY AL,0FFH DX,AL DELAY BREAK FB1

SEGMENT

CALL JMP

MY_PROC

ENDP

DELAY PROC NEAR ;延时程序

PUSHF PUSH PUSH MOV

DX CX

DX,DELAY_SET CX,1FFH CX D2 DX

ASSUME CS:MY_CODE, DS:MY_DATAASSUME SS:MY_STACK

MOV

AX,MY_DATA

MOV MOV MOV OUT

DS,AX

DX,DA0832; 产生方波 AL,0 DX,AL

START: FB1:

D1: MOV D2: DEC JNZ DEC 29

32位微机原理与接口技术实验指导

JNZ D1 POP CX POP DX

POPF RET DELAY ENDP BREAK PROC NEAR;按任意键退出 PUSHF PUSH AX

PUSH

DX MOV AH,06H MOV

DL,0FFH

INT 21H JE RETURN

MOV

AX,4C00H INT 21H RETURN: POP DX POP AX

POPF

RET BREAK ENDP

MY_CODE ENDS

END START

30

本文来源:https://www.bwwdw.com/article/phc8.html

Top