您的当前位置:首页正文

微机原理实验1

2023-12-14 来源:年旅网
实验一 两个多位十进制数相减实验

一. 实验要求

将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序存放在以 DATAI和DATA2为首的5个内存单元中(低位在前),结果送回DATAI处。 二、实验目的

1.学习数据传送和算术运算指令的用法。

2.熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。

DATA SEGMENT

DATA1 DB 33H,39H,31H,37H,38H ;第一个数据(作为被减数) DATA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为减数)

MES1 DB '-','$' MES2 DB '=','$' DATA ENDS

STACK SEGMENT ;堆栈段 STA DB 20 DUP() TOP EQU LENGTH STA STACK ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX

MOV SI,OFFSET DATA1 MOV BX,05

CALL DISPL ;显示被减数 MOV AH,09H LEA DX,MES1 INT 21H

MOV SI,OFFSET DATA2

MOV BX,05 ;显示减数 CALL DISPL MOV AH,09H LEA DX,MES2

INT 21H

MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2

CALL SUBA ;减法运算 MOV SI,OFFSET DATA1

MOV BX,05 ;显示结果 CALL DISPL MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H INT 21H MOV AX,4C00H INT 21HDISPL PROC NEAR ;DSI: MOV AH,02 MOV DL,[SI+BX-1] ; INT 21H DEC BX ; JNZ DSI RET DISPL ENDP SUBA PROC NEAR MOV DX,SI MOV BP,DI

显示子功能 显示字符串中一字符修改偏移量 MOV BX,05

SU1: SUB BYTE PTR[SI+BX-1],30H SUB BYTE PTR[DI+BX-1],30H

DEC BX ;将ASCII 码表示的数字串 JNZ SU1 ;转化为十六进制的数字串 MOV SI,DX MOV DI,BP MOV CX,05 ; CLC ;SU2: MOV AL,[SI] MOV BL,[DI] SBB AL,BL ; AAS ; MOV [SI],AL ; INC SI INC DI ; LOOP SU2 ; MOV SI,DX MOV DI,BP MOV BX,05SU3: ADD BYTE PTR [SI+BX-1],30H ADD BYTE PTR [DI+BX-1],30H DEC BX ; JNZ SU3 RET SUBA ENDP CODE ENDS

包括进位,共5位 清进单位

带进位相减

非组合BCD码的减法调整 结果送被减数区

指向下一位 循环

十六进制的数字串转化ASCII码表示的数字串 END START

实验二 两个数相乘的实验

一. 实验要求

实现十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,算式结果 在屏幕上显示出来。 二.

实验目的

掌握乘法指令和循环指令的用法。

DATA SEGMENT

DATA1 DB 32H,39H,30H,35H,34H DATA2 DB 34H MES1 DB '*','$' MES2 DB '=','$' RESULT DB 6 DUP (00H) DATA ENDS STACK SEGMENT STA DB 20 DUP () TOP EQU LENGTH STA STACK ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,TOP LEA SI,DATA1 MOV BX,05H L1: MOV AH,02H MOV DL,[SI+BX-1] INT 21H DEC BX JNZ L1 MOV AH,09H LEA DX,MES1

INT 21H LEA SI,DATA2 MOV AH,02H MOV DL,[SI] INT 21H MOV AH,09H LEA DX,MES2 INT 21H MOV SI,OFFSET DATA2 ; MOV BL,[SI] ; AND BL,00001111B ; MOV SI,OFFSET DATA1 MOV DI,OFFSET RESULT MOV CX,05LOOP1: MOV AL,[SI] AND AL,00001111B ; INC SI ; MUL BL ; AAM ;AAM ADD AL,[DI] ; AAA ;AAA MOV [DI],AL INC DI ; MOV [DI],AH LOOP LOOP1 ; MOV CX,06 MOV SI,DI

显示算式 乘数DATA2→BL

屏蔽高4位,ASCII码转化为十六进制数

取被乘数DATA1,ASCII变十六进制数 指向被乘数1的下一字符单元 相乘 调整

结果低位与前次计算的进位相加 调整

结果送存到下一单元

计算结果高位进位送存

DISPL: MOV AH,02 MOV DL,[SI] ADD DL,30H INT 21H DEC SI

LOOP DISPL ;显示结果 MOV AX,4C00H INT 21H ;结束 CODE ENDS

END START

实验三 BCD码相乘的实验

一.

实验要求

实现BCD码的乘法,要求被乘数和乘数以组合的BCD码形式存放,各占一个内

存单元,乘积存入在另外两个内存单元中,由于没有组合的BCD码乘法指令,程序中采用 将乘数1作为计算器,累加另一个乘数的方法得到计算结果。 二.

实验目的

掌握用组合的BCD码表示数据,并熟悉怎样实现组合BCD码乘法运算。

DATA

SEGMENT

FIRST DB 99H SECOND DB 25H THIRD DB 2 DUP() MES1 MES2 DATA

DB '*','$' DB '=','$' ENDS

STACK SEGMENT PARA STACK 'STACK'

STAPN DB 100 DUP() TOP EQU LENGTH STAPN STACK ENDS CODE

SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX

MOV BL,FIRST ;

MOV CL,SECOND ; MOV DX,0 ;

MOV AL,BL

AGAIN: OR AL,AL JZ DONE ; MOV AL,DL ADD AL,CL

DAA ; MOV DL,AL MOV AL,DH ADC AL,0

DAA ; MOV DH,AL MOV AL,BL

DEC AL

被乘数送BL 乘数送CL

部分积清0 被乘数减到0则转结果显示 乘数于部分积低位相加后调整往部分积高位送进位后调整

DAS ;组合BCD码减法调整 MOV BL,AL JMP AGAIN

DONE: LEA BX,THIRD

MOV [BX],DX LEA SI,FIRST CALL

DIS

XOR AX,AX MOV AH,09H LEA INT LEA CALL

DX,MES1 ;* 21H SI,SECOND DIS

XOR AX,AX LEA

DX,MES2 ;=

MOV AH,09H INT LEA INC CALL DEC SI CALL

DIS DIS

21H SI,THIRD SI

MOV AX,4C00H ;返回DOS INT 21H

DIS PROC NEAR ;显示子程序

MOV AL,[SI] MOV CL,04H

SHR AL,CL ADD AL,30H MOV DL,AL MOV AH,02H INT 21H MOV AL,[SI] AND AL,0FH ADD AL,30H MOV DL,AL MOV AH,02H INT 21H RET DIS ENDP

ENDS

CODE

END START

实验一 双色灯实验

一、实验要求

编写程序,以8255为输出口,控制四个双色灯按要求发光。 二、实验目的

1.学习单板方式下扩展简单I/O接口的方法以双色灯的使用。 2.进一步学习微处理器的编程技术。 三、实验电路连线

8255的CS片选接至适配板上138译码处的200H~207H插孔。 四、实验说明

1、 因为本实验是模拟交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一 个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通 车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,

东西仍然红灯。再转状态,东西绿灯通车,南北灯灯。过一段时间转状态4,东西绿灯闪几 次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。

2、 双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。当 红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平 时,绿灯亮;两端都加高电平时,黄灯亮。

;实验一 双色灯实验

D1 EQU 10H D2 EQU 200H DATA SEGMENT PB DB DATA ENDS

STACK SEGMENT STACK STA DW 50 DUP() TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:

PUSH CS POP DS

MOV DX,203H ; MOV AL,80H OUT DX,AL MOV DX,200H MOV AL,0ffh

OUT DX,AL ; MOV DX,200H MOV AL,0F0H

OUT DX,AL ; MOV BX,7fH CALL DLY

BG: MOV AL,01011010B ; OUT DX,AL

设置为全输出 清LED 全红 南北绿,东西红 MOV BX,D2 CALL DLY MOV CX,03H

XH1: AND AL,0F5H ;绿灭黄亮 OUT DX,AL MOV BX,D1 CALL DLY OR AL,0aH ; OUT DX,AL MOV BX,D1 CALL DLY LOOP XH1 OR AL,0a0H ; OUT DX,AL MOV BX,D1 CALL DLY MOV BX,D1 CALL DLY MOV AL,B ; OUT DX,AL MOV BX,D2 CALL DLY MOV CX,03XH2: AND AL,0FaH OUT DX,AL MOV BX,D1 CALL DLY

绿亮

南北黄

南北红,东西绿

OR AL,05H OUT DX,AL MOV BX,D1 CALL DLY LOOP XH2 OR AL,50H OUT DX,AL MOV BX,D1 CALL DLY MOV BX,D1 CALL DLY JMP BG DLY PROC NEAR PUSH CX DDD: MOV CX,2ffH CCC: LOOP CCC DEC BX CMP BX,0 JNE DDD POP CX RET

DLY ENDP CODE ENDS END START

实验二 开关状态显示实验

一、实验要求

编写程序,设定8255的PA口为开关量输入,PB口为开关量输出,要求能随时将PA

口的开关状态通过PB口的发光二极管显示出来。 二、实验目的

学习使用8255各个口的不同工作方式 三、实验电路连接

将K1~K8用连接至8255的PB0~PB7,将DL1~DL8用连线连至8255的PC0~PC7, 8255CS连至译码处的200~207插孔。 四、实验说明

本实验要求8255工作方式0,PB口设置为输入,PC口设置为输出,输入量为开关量, 通过8255可实时显示在LED灯上。按下HALT或RST键则返回监控。

;实验二 开关状态显示实验 STACK SEGMENT STACK

STA DW 50 DUP() TOP EQU LENGTH STA STACK ENDS CODE SEGMENT

ASSUME CS:CODE,SS:STACK START:

MOV DX,203H ;设置为b口输入,c口输出 MOV AL,92H

OUT DX,AL

BG: MOV DX,201H ;将b口状态从c口输出

IN AL,DX MOV DX,202h OUT DX,AL JMP BG CODE ENDS

END START

实验五 A/D转换实验

一、实验要求

编程用查询方式采样电位器输入电压,并将采样到的结果实时地通过8279显示在 数码管上。(只须显示一位即可。用0~F表示0~+5V电压)。 二.实验目的

1.掌握A/D芯片AD0809的转换性能及编程方法。

2.学习A/D芯片与其他芯片(如8279)接口的方法,初步建立系统的概念。 三.实验电路及连线

CS79接译码处210~217这个插孔。A/D的CS插译码处208~20F这个插孔,0809的IN0 接至电位器W1的中心抽头插孔。

注意:电位器W1两边的两个插孔已经分别接好电源+5V和地,请不要再接,以防接

错,出现短路。 四、实验说明

本实验中所用A/D转换芯片为逐次逼近型,精度为8位每转换一次约100微钞,所以 程序若为查询式,则在启动后要加适应延时。另外,0809芯片提供转换完成信号(EOC), 利用此信号可实现中断采集。有兴趣者可自行编制程序。

Z8279 EQU 212H D8279 EQU 210H

LEDMOD EQU 00 ;左边输入,八位显示外部译码八位显示 LEDFEQ EQU 38H ;扫描频率 CODE SEGMENT

ASSUME CS:CODE,DS:code START: push cs pop ds call delay MOV DX,Z8279 MOV AL,LEDMOD OUT DX,AL MOV AL,LEDFEQ OUT DX,AL

MOV CX,06H

XZ: MOV DX,D8279 MOV AL,00H OUT DX,AL LOOP XZ

MOV DX,D8279 MOV AL,5eH OUT DX,AL MOV DX,D8279 MOV AL,77H

OUT DX,AL ;

以上为写(AD ) NOP

bg: mov dx,208h

mov al,0 out dx,al call delay in al,dx

mov cl,04h ror al,cl

and al,0fh

push ax mov dx,z8279

mov al,81h out dx,al pop ax LEA BX,LED XLAT

MOV DX,D8279 ;将AL中内容写到数码管上 OUT DX,AL call delay jmp bg

LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H DB 5EH,79H,71H delay proc near

push cx mov cx,01f00h

loop $ pop cx

ret delay endp

CODE ENDS

END START

实验六 D/A转换实验

一、实验要求

编写程序,使D/A转换模块循环输出三角波和锯齿波。 二、实验目的

1.掌握DAC0832芯片的性能、使用方法及对应硬件电路。 2.了解D/A转换的基本原理。 三、实验电路连线

DAC0832的片选CS孔接译码处208-20F插孔(注:0832旁的短路帽应下插,做51实验时应上插)。 四、实验说明

D/A转换是量转化成模拟量的过程,本实验输出为模拟电压信号,本次实验生成的波形 较为简单,有兴趣者可试编程序生成各种波形,如方波,正弦波等,也可与键盘显示模块结 合起来,构成一个简单的波形发生器,通过键盘输入各种参数,如频率,振幅(小于+5V), 方波的占空比等。

CODE SEGMENT

ASSUME CS:CODE,DS:code,SS:code START: push cs pop ds BG: NOP

MOV DX,208H ;锯齿波 MOV AL,00H MOV CX,07ffH

BB:

OUT DX,AL

ADD AL,01 CMP AL,00H JNZ BB LOOP BB NOP

MOV AL,00H MOV CX,07ffH

EE:

OUT DX,AL FF:

OUT DX,AL

SUB AL,01H CMP AL,00H JNE FF LOOP EE ADD AL,01H CMP AL,0FFH JNE EE

JMP BG

CODE ENDS

END START

实验九 步进电机驱动实验

一、实验要求

利用8255的PC口PC-PC3轮流输出脉冲序列,小键盘控制步进电机的转速和转动方 向。 二、实验目的

1、 了解控制步进电机的基本原理。 2、 掌握控制步进电机转动的编程的方法。 三、实验连线

用硬导线将8255选信号CS接至200-207,PC0-PC3接至SMA-SMD。将 8279的片选信号CS接至208-20F。

在运行过程中,可按动小键盘的“0-9”数码键,控制步进电机的转速, 按“+或-”键控制步进电机的方向,按“REG”键退出。

C8279 EQU 20AH D8279 EQU 208H C8255 EQU 203H P8255C EQU 202H CODE SEGMENT

ASSUME CS:CODE,DS:CODE

START:PUSH CS POP DS INI:MOV DX,C8255 MOV AL,90H

OUT DX,AL ;8255初始化 MOV DX,C8279 MOV AL,00H OUT DX,AL MOV AL,2AH

OUT DX,AL ;8279初始化 MOV AL,0D1H

OUT DX,AL ;关显示 WAIT1:IN AL,DX MOV AH,AL AND AL,80H

JNZ WAIT1 ;FIFO正在清除期间则跳转等待 MOV AL,AH AND AL,0FH CMP AL,00H

JE WAIT1 ;无键按下则跳转等待 LEA BX,STEP RUN:CALL CHKKEY CALL DISPLAY

MOV CX,08H ;步进电机控制 LOOP3:MOV DX,P8255C MOV AL,[SI] OUT DX,AL

INC SI CALL DELAY LOOP LOOP3 JMP RUN CHKKEY PROC NEAR RDKEY:MOV DX,C8279 IN AL,DX MOV AH,AL AND AL,80H CMP AL,80H JE RDKEY MOV AL,AH AND AL,0FH CMP AL,00H JE RTN

MOV AL,40H

OUT DX,AL ;读FIFO/传感器RAM命令 MOV DX,D8279 IN AL,DX CHK:CMP AL,38H

JE QUIT ;RST 退出

CMP AL,30H ;键值大于30H,为方向控制键 JNC DIRE MOV DELAYTIME,AL JMP RTN

DIRE:CMP AL,32H ;HERE 顺时针 JNE NEXT MOV DIRDSP,40H LEA BX,STEP JMP RTN

NEXT:CMP AL,33H ;EXEC 逆时针 JNE RTN MOV DIRDSP,46H LEA BX,STEP

ADD BX,08H ;逆时针控制表地址 RTN:

MOV SI,BX RET CHKKEY ENDP QUIT:MOV DX,C8279 MOV AL,0D2H OUT DX,AL jmp $ DELAY PROC NEAR PUSH CX

;判断键值,获得相应延时循环值 MOV AL,20H ;\"9\" SUB AL,DELAYTIME JNZ L1 MOV CX,04H

L1: MOV AL,08H ;\"8\" SUB AL,DELAYTIME

JNZ L2 MOV CX,05H

L2: MOV AL,00H ;\"7\" SUB AL,DELAYTIME JNZ L3

L3: MOV AL,21H ;\"6\" SUB AL,DELAYTIME MOV CX,07H JNZ L4 MOV CX,08H

L4: MOV AL,09H ;\"5\" SUB AL,DELAYTIME JNZ L5 MOV CX,09H

L5: MOV AL,01H ;\"4\" SUB AL,DELAYTIME JNZ L6 MOV CX,0AH

L6: MOV AL,22H ;\"3\" SUB AL,DELAYTIME JNZ L7 MOV CX,10H

L7: MOV AL,0AH ;\"2\" SUB AL,DELAYTIME JNZ L8 MOV CX,20H

L8: MOV AL,02H ;\"1\"

SUB AL,DELAYTIME JNZ L9 MOV CX,30H L9: MOV AL,03H

SUB AL,DELAYTIME ;\"0\" JNZ LOOP1 MOV CX,40H LOOP1:PUSH CX MOV CX,0155H LOOP2:NOP LOOP LOOP2 POP CX LOOP LOOP1 POP CX RET DELAY ENDP DISPLAY PROC NEAR PUSH BX MOV DX,D8279 MOV AL,DELAYTIME

LEA BX,LED ;查表显示速度值 XLAT OUT DX,AL MOV AL,DIRDSP

OUT DX,AL ;显示电机转动方向 MOV CX,0006H ;显示界面\"STEP\" LEA BX,DSP

LOOP4:MOV AL,[BX] OUT DX,AL INC BX LOOP LOOP4 MOV DX,C8279 MOV AL,0C2H OUT DX,AL POP BX RET DISPLAY ENDP

LED DB 07H,66H,06H,3FH DB 00H,00H,00H,00H DB 7FH,6DH,5BH,71H DB 00H,00H,00H,00H

DB 00H,00H,00H,00H DB 00H,00H,00H,00H DB 00H,00H,00H,00H DB 00H,00H,00H,00H

DB 6FH,7DH,4FH,79H DB 00H,00H,00H,00H DB 77H,7CH,39H,5EH DB 00H,00H,00H,00H

DB 06H,5BH,4FH,66H DB 00H,00H,00H,00H

DB 06H,5BH,4FH,66H DB 00H,00H,00H,00H

DSP DB 00H,00H,73H,79H,31H,6DH,00H DELAYTIME DB 01H DIRDSP DB 40H

STEP DB 01h,03H,02h,06H,04h,0cH,08h,09H DB 09H,08h,0cH,04h,06H,02h,03H,01h CODE ENDS END START

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