搜档网
当前位置:搜档网 › 微机原理与接口实验报告

微机原理与接口实验报告

微机原理与接口实验报告
微机原理与接口实验报告

实验报告

专业班级:

学号:

姓名:

指导老师:陆勤

实验一 8255A应用—数码管动态显示

一、实验目的

1、掌握8255A的工作方式、编程原理和微机接口方法。

2、了解LED数码管动态显示的工作原理及编程方法。

二、实验内容

编制程序,使数码管显示“DICE88”字样。

三、实验程序框图

图6-1 实验程序流程图

四、实验步骤

联机模式:

(1)在PC机和实验系统联机状态下,运行实验系统dj8086k.exe(双击桌面OTA图标或通过开始-程序-dj8086k-DJ8086k微机原理与接口技术),新建文件并在编辑窗口输入汇编源程序,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。

(2)数码管显示“DICE88”字样。

脱机模式:

(1)在P.态下,通过单板机小键盘,从2DF0地址开始输入机器码(参见附录三),完成后返回监控,输入起始地址2DF0,再按EX键执行。

(2)数码管显示“DICE88”字样。

五、实验程序清单

CODE SEGMENT ; display "DICE88"

ASSUME CS:CODE

ORG 2DF0H

START: JMP START0

PA EQU 0FF20H ;字位口

PB EQU 0FF21H ;字形口

PC EQU 0FF22H ;键入口

BUF DB ?,?,?,?,?,?

data1:

db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h

db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0H,89h,0c1h,87h

;修改89h、0c1h、87h各自对应:H、U、t

START0: CALL BUF1

CON1: CALL DISP

JMP CON1

DISP: MOV AL,0FFH ;00H

MOV DX,PA

OUT DX,AL

MOV CL,0DFH ;显示子程序 ,5ms

MOV BX,OFFSET BUF

DIS1: MOV AL,[BX]

MOV AH,00H

PUSH BX

MOV BX,OFFSET DATA1

ADD BX,AX

MOV AL,[BX]

POP BX

MOV DX,PB

OUT DX,AL

MOV AL,CL

MOV DX,PA

OUT DX,AL

PUSH CX

DIS2: MOV CX,00A0H

LOOP $

POP CX

CMP CL,0FEH ;01H

JZ LX1

MOV AL,0FFH ;00H

MOV DX,PA

OUT DX,AL

INC BX

ROR CL,1 ;SHR CL,1

JMP DIS1

LX1: MOV AL,0FFH

MOV DX,PB

OUT DX,AL

RET

BUF1: MOV BUF,0DH ;实验修改 mov BUF,0Ah MOV BUF+1,01H ;实验修改 mov BUF+1,16h

MOV BUF+2,0CH ;实验修改 mov BUF+2,17h

MOV BUF+3,0EH ;实验修改 mov BUF+3,18h

MOV BUF+4,08H ;实验修改mov BUF+4,00h

MOV BUF+5,08H ;实验修改mov BUF+5,09h

RET

CODE ENDS

END START

六、思考题:

修改程序使之可以显示其他字符,如“AHUt09”。

见上面程序修改部分

七、实验遇到的难点:

刚开始对发光二极管的控制不到位,总是与想要显示的不相符,后来理解了编码方式后,能够对二极管有一个很好的控制,之后我还自己编写并显示了“I LOVE U”,觉得挺有趣的

实验二 8259单级中断控制器实验

一、实验目的

1.掌握8259中断控制器的接口方法。

2.掌握8259中断控制器的应用编程。

二、实验内容

利用8259实现对外部中断的响应和处理,要求程序对每次中断进行计数,并将计数结果送数码显示。

三、实验接线图

图6-2 实验二接线图

四、编程指南

⑴8259芯片介绍

中断控制器8259A是专为控制优先级中断而设计的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中。因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式。即中断结构可以由用户编程来设定。同时,在不需要增加其它电路的情况下,通过多片8259A的级联,能构成多达64级的矢量中断系统。

⑵本实验中使用3号中断源IR3,“”插孔和IR3相连,中断方式为边沿触发方式,每拨1次AN开关产生一次中断,满5次中断,显示“good”。如果中断源电平信号不符合规定要求,则自动转到7号中断,显示“Err”。

五、实验程序框图

图6-3 主程序流程图6-4 IR3中断服务程序流程IR3中断服务程序:

IR7中断服务程序:

图6-5 IR7中断服务流程

六、实验步骤

1、按图6-2连好实验线路图。

⑴8259的INT连8088的INTR;⑵8259的INTA连8088的INTA;⑶

“”插孔和8259的3号中断IR3插孔相连,

“”端初始为低电平;⑷8259的CS端接FF80H孔。

2、输入并运行实验程序,系统显示8259-1。

3、按动AN开关按钮,按满5次显示good。

七、实验程序清单

CODE SEGMENT

;

ASSUME CS: CODE

INTPORT1 EQU 0FF80H

INTPORT2 EQU 0FF81H

INTQ3 EQU INTREEUP3

INTQ7 EQU INTREEUP7

PA EQU 0FF20H

;字位口

PB EQU 0FF21H

;字形口

PC EQU 0FF22H

;键入口

ORG 12D0H

START: JMP START0

BUF DB ?,?,?,?,?,?

intcnt db ?

data1:

db0c0h,0f9h,0a4h,0b0h,99h,92h

,82h,0f8h,80h,90h,88h,83h,0c6

h,0a1h

db

86h,8eh,0ffh,0ch,89h,0deh,0c7h,8c

h,0f3h,0bfh,8FH

START0: CLD

CALL BUF1

CALL WRINTVER

;WRITE INTRRUPT

MOV AL,13H

MOV DX,INTPORT1

OUT DX,AL

MOV AL,08H

MOV DX,INTPORT2

OUT DX,AL

MOV AL,09H

OUT DX,AL

MOV AL,0F7H

OUT DX,AL

MOV intcnt,01H

;TIME=1

STI

WATING: CALL DISP

;DISP 8259-1

JMP WATING

WRINTVER: MOV AX,0H

MOV ES,AX

MOV DI,002CH

LEA AX,INTQ3

STOSW

MOV AX,0000h

STOSW

MOV DI,003CH

LEA AX,INTQ7

STOSW

MOV AX,0000h

STOSW

RET

INTREEUP3: CLI

push ax

push bx

push cx

push dx

MOV AL,INTCNT

CALL CONVERS

MOV BX,OFFSET BUF

;077BH

MOV AL,10H

MOV CX,05H

INTRE0: MOV [BX],AL

INC BX

LOOP INTRE0

MOV AL,20H

MOV DX,INTPORT1

OUT DX,AL

ADD INTCNT,01H

CMP INTCNT,06H

JNA INTRE2

CALL BUF2

;DISP:good

INTRE1: CALL DISP

JMP INTRE1

CONVERS: AND AL,0FH

MOV BX,offset buf

;077AH

MOV [BX+5],AL

RET

INTRE2: MOV AL,20H

MOV DX,INTPORT1

OUT DX,AL

pop dx

pop cx

pop bx

pop ax

STI

IRET

INTREEUP7: CLI

MOV AL,20H

MOV DX,INTPORT1

OUT DX,AL

call buf3

;disp:err

INTRE3: CALL DISP

JMP INTRE3

DISP: MOV AL,0FFH

;00H

MOV DX,PA

OUT DX,AL

MOV CL,0DFH

;20H ;显示子程序 ,5ms

MOV BX,OFFSET BUF

DIS1: MOV AL,[BX]

MOV AH,00H

PUSH BX

MOV BX,OFFSET DATA1

ADD BX,AX

MOV AL,[BX]

POP BX

MOV DX,PB

OUT DX,AL

MOV AL,CL

MOV DX,PA

OUT DX,AL

PUSH CX

DIS2: MOV CX,00A0H

LOOP $

POP CX

CMP CL,0FEH

;01H

JZ LX1

INC BX

ROR CL,1

;SHR CL,1

JMP DIS1

LX1: MOV AL,0FFH

MOV DX,PB

OUT DX,AL

RET

BUF1: MOV BUF,08H MOV BUF+1,02H

MOV BUF+2,05H

MOV BUF+3,09H

MOV BUF+4,17H

MOV BUF+5,01H

RET

BUF2: MOV BUF,09H

MOV BUF+1,00H

MOV BUF+2,00H

MOV BUF+3,0dH

MOV BUF+4,10H

MOV BUF+5,10H

RET

BUF3: MOV BUF,0eH MOV BUF+1,18H

MOV BUF+2,18H

MOV BUF+3,10H

MOV BUF+4,10H

MOV BUF+5,10H

RET

CODE ENDS

END START

八、思考题:

若用IR5产生中断,要求修改硬件和软件并调试,修改位置

硬件修改:将连接到8259的IR3线连接到IR5

软件修改:在IR5所对应的中断向量的字段中写入中断程序的入口地址,并修改8259A的OCW1 命令字指定IR5开放中断。

(1)START0中修改为:MOV DX,INTPORT2

OUT DX,AL

MOV AL,09H

OUT DX,AL

MOV AL,0DFH

OUT DX,AL

MOV intcnt,01

......

(2)WRINTVER中修改为:

WRINTVER:

.....

MOV DI,0034H

LEA AX,INTQ3

......

实验八8250 串口实验

一、实验目的

(1)系统扩展以8250 为核心的可编程串行异步通讯接口芯片。

(2)对扩展的串行通讯接口实现自发自收。

二、实验内容

将寄存器AH 的内容从10H 开始通过8250 发送、接收,每次收发后AH 的内容自动增1 直到FFH 为止,同时将每次接收到的数据,依次写到内存4000H~40EFH 单元中,实现自发自收。

三、编程指南

1、通讯协议

1 个起始位,8 位数据位,1 个停止位,波特率:4800。

2、8250 的内部寄存器的端口地址

* 通讯线控制寄存器第7 位(DLAB)=0 ,** DLAB=1

3、8250 的内部寄存器格式(见课本)

4、波特率除数锁存器的值与波特率的对应关系(16 进制数)

5、8250 的初始化编程

(1)设置波特率

(2)设置通讯数据格式

(3)设置操作方式

(4)设置中断允许寄存器

四、实验接线图

五、实验步骤

1.连FF80H 孔到CS7,连TXD 到RXD(8250 实验区)。

2.编辑、调试、运行程序。

3.当系统显示“8250——good”表示自发自收结束,按RST 键,系统返回

P 态,用内存读写命令检查4000H~40EFH 内容是否为10H~FFH,验证其正确性。

六、参考程序

CODE SEGMENT ;H8250.ASM

ASSUME CS: CODE ;H8250.ASM

DATA EQU 0ff80H ;BTS-LSB

MSB EQU 0ff81H

LINE EQU 0ff83H

LSTAT EQU 0ff85H

PA EQU 0FF20H ;字位口

PB EQU 0FF21H ;字形口

PC EQU 0FF22H ;键入口

ORG 29A0H;源地址

START: JMP START0;跳转到START0

BUF DB ?,?,?,?,?,?;定义6字节缓冲区

data1:

db

0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90 h,88h,83h,0

c6h,0a1h;定义七段码

db

86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bf h,8FH

START0: MOV AL,80H ;DLAB=1

MOV DX,LINE

OUT DX,AL

MOV AL,18H ;BTS=4800;置波特率因子低8位

MOV DX,DATA ;ff80H

OUT DX,AL MOV DX,MSB;置波特率因子高8位

MOV AL,00

OUT DX,AL

MOV AL,03H ;8- BIT ,1-STOP

MOV DX,LINE

OUT DX,AL

MOV AL,00 ;NO-INT

MOV DX,MSB ;8001H

OUT DX,AL

MOV AH,10H;AH中的内容

MOV BX,4000H

MAIN: CALL TXD;调用TXD

CALL RCV;调用RCV

MOV [BX],AL

INC BX;BX自加

INC AH;AH自加

CMP AH,00H;AH 与00H作比较

JNZ MAIN;不相等,跳转到MAIN

CALL BUF1;调用BUF1

MOV CX,00FFH;将00FFH初始给CX,循环次数S3:

PUSH CX;CX入栈

CALL DISP;显示

POP CX;CX出栈

LOOP S3;循环

CALL BUF3

S1: CALL DISP;显示

JMP S1;跳转到S1

TXD: MOV DX,LSTAT;

WAIT1: IN AL,DX;读取LSTAT中的值(读取线路状态寄存器)

TEST AL,20H;检验D5位是否为1,即检查发送保持器是否为空,不为空则等待

JZ WAIT1;不为空等待

MOV AL,AH;从AH中取出发送数据

MOV DX,DATA

OUT DX,AL

RET;中断返回

RCV: MOV DX,LSTAT

WAIT2: IN AL,DX;读线路状态寄存器

TEST AL,01H;查接收缓冲器是否为满,不满则继续等待

JZ WAIT2

TEST AL,0EH

JNZ ERR;不相等,显示err

MOV DX,DATA

IN AL,DX;读取DATA端口值

RET;中断返回

ERR: CALL BUF2;调用BUF2程序

S2: CALL DISP;调用显示程序

JMP S2;循环显示

DISP: MOV AL,0FFH ;00H

MOV DX,PA

OUT DX,AL

MOV CL,0DFH ;20H ;显示子程序,5ms

MOV BX,OFFSET BUF;将BUF的偏移值送BX

DIS1: MOV AL,[BX];将[AL]中的内容读到Al中MOV AH,00H

PUSH BX;BX入栈

MOV BX,OFFSET DATA1;将DATA1的偏移地址给BX ADD BX,AX

MOV AL,[BX];读取对应的七段码

POP BX

MOV DX,PB;输出到PB端口

OUT DX,Al

MOV AL,CL;显示MOV DX,PA

OUT DX,AL

PUSH CX

DIS2: MOV CX,00A0H;循环,延时DELAY: LOOP DELAY

POP CX

CMP CL,0FEH ;01H

JZ LX1;相等跳转到LX1

INC BX;BX自加,地址后移一位ROR CL,1 ;SHR CL,1

JMP DIS1;跳转到DIS1,循环显示LX1: MOV AL,0FFH;PB端口清零MOV DX,PB

OUT DX,AL

RET;中断返回

BUF1: MOV BUF,08H;显示8250——MOV BUF+1,02H

MOV BUF+2,05H

MOV BUF+3,00H

MOV BUF+4,17H

MOV BUF+5,17H

RET

BUF2: MOV BUF,08H;显示err MOV BUF+1,02H

MOV BUF+2,05H

MOV BUF+3,00H

MOV BUF+4,0EH

MOV BUF+5,18H

RET

BUF3: MOV BUF,09H;显示good-- MOV BUF+1,00H

MOV BUF+2,00H

MOV BUF+3,0DH

MOV BUF+4,10H

MOV BUF+5,10H

RET

CODE ENDS

END START

思考题

如果使用通讯协议:

1 个起始位,7 位数据位,

2 个停止位,波特率:9600。系统将如何实现。解决方案:

将以下部分MOV AL,18H

MOV DX,DATA OUT DX,AL MOV DX,MSB MOV AL,00 OUT DX,AL MOV AL,03H MOV DX,LINE OUT DX,AL

改为:

MOV AL,0CH

MOV DX,DATA ;ff80H

OUT DX,AL

MOV DX,MSB

MOV AL,00

OUT DX,AL

MOV AL,06H

MOV DX,LINE

OUT DX,AL

实验五 A/D转换实验

一、实验目的

了解模/数转换基本原理,掌握ADC0809的使用方法;

掌握定时数据采集程序的编制方法。

二、实验内容

1、A/D转换实验

利用实验系统上电位器提供的可调电压作为0809模拟信号的输入,编制程序,将模拟量转换为数字量,通过数码管显示出来。

(1)实验接线图

ADC0809接线见图6-9

图6-9 ADC0809接线图

(2)编程指南

ADC0809的START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号,实验电路中将其相连,以便同时锁存通道地址并开始A/D采样转换,其输入控制信号为CS和WR,故启动A/D转换只须如下两条指令:

MOV DX,ADPORT ;ADC0809端口地址

OUT DX,AL ;发CS和WR信号并送通道地址

用延时方式等待A/D转换结果,使用下述指令读取A/D转换结果。

MOV DX,ADPORT ;ADC0809端口地址

IN AL,DX

循环不断采样A/D转换的结果,边采样边显示A/D转换后的数字量。

(3)实验程序框图

A/D转换流程见图6-10

图6-10 A/D转换流程

(4)实验步骤

①将0809 CS4插孔连到译码输出FF80H插孔。

②将通道0模拟量输入端IN0连电位器W1的中心插头AOUT1(0-5V)插孔,8MHZ→T。

③运行实验程序,系统上显示“0809 XX”。“XX”表示输入模拟量转换后的数字量。

④调节电位器Wl, 显示器上会不断显示新的转换结果。

模拟量和数字量对应关系的典型值为:

0V→00H +2.5V→80H +5V→FFH

⑤按RST键退出。

(5)实验程序清单

CODE SEGMENT ;

ASSUME CS:CODE

ADPORT EQU

0FF80h ;8259A偶地址入

PA EQU 0FF20H

;字位口

PB EQU 0FF21H

;字形口

PC EQU 0FF22H

;键入口

ORG 1000H ;源地址

START: JMP START0 ;跳转到START0

BUF DB ?,?,?,?,?,? ;定义6字节缓冲区

data1:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h ,0f8h,80h,90h,88h,83h,

0c6h,0a1h ;定义七段码

db

86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch

,0f3h,0bfh,8FH

START0: CALL BUF1 ;调用BUF1子程序

ADCON: MOV AX,00

MOV DX,ADPORT ;ADC0809端口地址

OUT DX,AL ;发CS和WR信号并送通道地址

MOV CX,0500H ;置循环数;DELAY: LOOP DELAY ;空循环,延时

MOV DX,ADPORT ;ADC0809端口地址

IN AL,DX

CALL CONVERS;调用子程序CONVERS

CALL DISP ;调用显示子程序DISP

JMP ADCON ;跳转到ADCON CONVERS: MOV AH,AL;将 ax中的低字节赋给高字节

AND AL,0FH ;保留al中的低四位

MOV BX,OFFSET BUF;buf的偏移地址

MOV [BX+5],AL;将al中的值给[Bx+5]

MOV AL,AH ;取al中的高四位

AND AL,0F0H

MOV CL,04H ;值移位数

SHR AL,CL;右移四位

MOV [BX+4],Al ;将Al中的值给[BX+4]

RET;返回

DISP: MOV AL,0FFH ;PA端口全置1,

使其灯无显示

MOV DX,PA

OUT DX,AL

MOV CL,0DFH ;将0DFH给CL

MOV BX,OFFSET BUF;取BUF

的偏移地址给BX

DIS1: MOV AL,[BX];将[BX]中的内

容取出给Al

MOV AH,00H

PUSH BX;BX入栈

MOV BX,OFFSET DATA1;取

DATA1的偏移地址给BX

ADD BX,AX;BX与Ax相加

MOV AL,[BPBX];将[BX]的内

容取到AL中

POP BX;BX出栈

MOV DX,PB;Al中得内容在PB

端口输出

OUT DX,AL

MOV AL,CL;显示

MOV DX,PA

OUT DX,AL

PUSH CX;CX入栈DIS2: MOV CX,00A0H;循环00A0H

次,延时

LOOP $

POP CX;CX出栈

CMP CL,0FEH;Cl 与0FEH比

JZ LX1 ;Cl与00A0H相等,

则程序跳转到LX1

INC BX ;BX自加1

ROR CL,1;Cl循环左移1位

JMP DIS1;循环显示

LX1: MOV AL,0FFH;PB端口清零

MOV DX,PB

OUT DX,AL

RET;中断返回

BUF1: MOV BUF,00H

MOV BUF+1,08H

MOV BUF+2,00H

MOV BUF+3,09H

MOV BUF+4,00H

MOV BUF+5,00H

RET

CODE ENDS

END START

2、数据采集实验

要求:用8253定时器1通道定时,每隔半秒使从ADC0809的0通道IN0采集一个数据,若模拟电压在0-2V范围内(0-102),则使LED显示器L7-L4亮;若模拟电压大于2V,小于3V,则使L5-L2亮;若模拟电压大于等于3V,则使LED显示器L3-L0亮。

(主程序重复所采集的数据)

(1)实验接线图

数据采集实验系统接线图见图6-11

图6-11 数据采集系统接线图(2)程序流程图

主程序流程见图6-12

图6-12 主程序流程图中断服务程序流程见图6-13

图6-13 中断服务程序流程

(3)实验程序清单

CODE SEGMENT ;

ASSUME CS:CODE

INTPORT1 EQU 0FF80H ;8259A偶地址入口

INTPORT2 EQU 0FF81H ;8259A 奇地址入口

INTQ3 EQU INTREEUP3 ;中断源IR3地址

TCONTR0 EQU 0043H;8253端口地址

TCON1 EQU 0041H;8253端口地址

IOCONPT EQU 0FF2BH

IOBPT EQU 0FF29H

IOAPT EQU 0FF28H

PA EQU 0FF20H ;字位口

PB EQU 0FF21H ;字形口

PC EQU 0FF22H ;键入口

ADPORT EQU 0FE00H ;ADC0809端口地址

ORG 12D0H;源地址

START: JMP START0;跳转到START0

BUF DB ?,?,?,?,?,?;定义6字节的缓冲区

intcnt db ?

RES DB ?

data1 db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90 h,88h,83h,0c6h

db

0a1h,86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3 h,0bfh,8FH;

定义七段码

START0: CLD;置方向位

CALL BUF1;调用BUF1

CALL WRINTVER ;调用WRINTVER

MOV AL,13H;初始化ICW1,单片,边沿触发,设置ICW4

MOV DX,INTPORT1

OUT DX,AL

MOV AL,08H;写ICW2,允许IR3中断

MOV DX,INTPORT2

OUT DX,AL

MOV AL,09H;写ICW4,8259A在缓冲方式下工作,8086/8088系统

OUT DX,AL

MOV AL,0F7H;写OCW1,允许中断源IR3,其余均被屏蔽

OUT DX,AL

MOV intcnt,25

MOV DX,TCONTR0

MOV AL,74H;8253工作通道1,先读(写)低字节,再读(写)高字节,方式4,二进制计数

OUT DX,AL

MOV DX,TCON1

MOV AX,40000;8253初始值40000

OUT DX,AL

MOV AL,AH;写初值的高字节

OUT DX,AL

MOV DX,0FF2BH;8255初始

化,PA口方式0,输出

MOV AL,82H

OUT DX,AL

STI;开中断

WATING: CALL DISP;调用显示程序

JMP WATING;循环,延时

WRINTVER: MOV AX,0H

MOV ES,AX;ES指向AX

MOV DI,002CH;置DI初值为002CH

LEA AX,INTQ3;取INTQ3的初值

STOSW

MOV AX,0000h

STOSW

RET;中断返回

INTREEUP3: DEC INTCNT;INTCNT自减1 JNZ INTRE2;不相等跳转到INTRE2

MOV INTCNT, 25

ADCON: MOV AX,00;设定输入电压值

MOV DX,ADPORT

OUT DX,AL

MOV CX,0500H;循环值,延时

DELAY: LOOP DELAY

MOV DX,ADPORT;读电压值

IN AL,DX

MOV RES,AL;将Al中值存入到RES中

CALL CONVERS;调用CONVERS

MOV AL,RES

CMP AL, 66H;Al与66H比较

JA NEXT1;若大于,跳转到NEXT1

MOV AL, 0F0H

MOV DX, IOAPT;输出

OUT DX,AL

JMP INTRE2;跳转到INTRE2

NEXT1: CMP AL, 99H;AL与99H比较

JA NEXT2;跳转到NEXT2(灯L7-L10亮)

MOV AL, 0C3H

MOV DX, IOAPT

OUT DX,AL

JMP INTRE2;跳转到INTRE2

NEXT2: MOV AL, 0FH

MOV DX, IOAPT

OUT DX,AL

INTRE2: MOV AL,20H;中断

MOV DX,INTPORT1

OUT DX,AL

IRET;中断返回

CONVERS: MOV AH, AL;取Al中得低四位

AND AL, 0FH

MOV BX, OFFSET BUF;取BUF 的偏移地址给BX

MOV [BX+5], AL;将Al中得值给[BX+5]

MOV AL,AH;取Al中的高四位

AND AL, 0F0H

MOV CL, 04H

SHR AL, CL;Al中的内容右移4位

MOV [BX+4], AL;将Al中的内容给[BX+4]

RET;中断返回

DISP: MOV AL, 0FFH ;PA端口清零

MOV DX, PA

OUT DX, AL

MOV CL, 0DFH ;显示

MOV BX, OFFSET BUF;取BUF 的偏移地址

DIS1: MOV DX, PC;将Al中的内容输出到PC端口

OUT DX, AL

MOV AL, [BX]

MOV AH, 00H

PUSH BX;BX入栈

MOV BX, OFFSET DATA1;取DATA1得偏移地址

ADD BX, AX

MOV AL, [BX];将对应的七段码给Al

POP BX;BX出栈

MOV DX, PB;输出到PB口

OUT DX, AL

MOV AL, CL显示

MOV DX, PA

OUT DX, AL

PUSH CX;CX出栈

DIS2: MOV CX, 00A0H;空循环,延时

LOOP $

POP CX

CMP CL,0FEH

JZ LX1

INC BX

ROR CL, 1

JMP DIS1

LX1: MOV AL, 0FFH;PB口清零

MOV DX, PB

OUT DX, AL

RET;中断返回

BUF1: MOV BUF, 00H

MOV BUF+1, 08H

MOV BUF+2, 00H

MOV BUF+3 ,09H

MOV BUF+4, 00H

MOV BUF+5, 00H

RET

CODE ENDS

END START

思考题:如果改用DAC0832的输出(比如:产生近似正弦输出)作为ADC0809的输入,并将采集值在数码管上显示出来。硬件和软件应如何修改?

解决方案:

1.硬件修改:将DAC0832采用单缓冲方式工作,Vout接ADC0809的IN0。

2.程序修改:给DAC0832设定地址,根据连线可以设定为。设为DAC1,DAC2,在程序头部声明.

设置正弦数据区:BUFSIN db 128,88,53,24,6,06,24,53,88,128,168,203,232,

db 250,255,232,203,168

最后再在主程序后添加如下程序:

GENERATESINWAVE: Mov si,offset buf MOV DX,DAC1

Mov cx,20

OUTPUT:

MOV AL,[SI] OUT DX,AL

INC SI

LOOP OUTPUT

JMP GENERATESINWAVE

微机原理实验报告

西安交通大学实验报告 课程_微机与接口技术第页共页 系别__生物医学工程_________实验日期:年月日 专业班级_____组别_____交报告日期:年月日 姓名__ 学号__报告退发 ( 订正、重做 ) 同组人_教师审批签字 实验一汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。编程并显示结果: 如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子

程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H = xxxxxxxxH 四、实验代码及结果 1.1、实验代码: DATA SEGMENT SZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOW DB 'THE MAX IS: ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX MOV DX,OFFSET SHOW ;调用DOS显示字符串 MOV AH,09H INT 21H MOV SI ,OFFSET SZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DH NEXT: MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DH NEXT1: INC SI ;偏移地址加1 LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H NEXT2: MOV CL,4 ROL DH,CL ;将DH循环右移四位

微机原理实验报告软件实验1-4

微机原理实验报告 学院:算机科学与软件教育学院 1. 掌握存储器读写方法 2. 了解存储器的块操作方法 二、实验原理 存储器读写和块操作 三、实验设备仪器及材料 计算机,WA VE 6000软件 四、实验过程 S1.asm 代码流程图 data segment Block db 256 dup(55h) data ends code segment assume cs:code, ds:data start proc near mov ax, data mov ds, ax mov bx, offset Block ; 起始地址 mov cx, 256 ; 清256 字节Again: mov [bx], byte ptr 0 inc bx ; 地址+1 Loop Again ; 记数减一jmp $ ;死循环code ends end start

五、实验步骤 (1) 进入Wave6000,输入程序并检查,保存程序。 (2) “编译”程序。 (3) “全速执行”程序。 (4) “暂停”程序运行,在“数据窗口(MEMOREY)”查看0400H起始的单元内容,并记录。 (5) 在指令“jmp $”处设断点。“全速执行”程序。 (6) 在“数据窗口(MEMOREY)”查看0400H起始的单元内容,记录并分析实验结果。 六、实验结果及总结 运行前:运行后: 2、调试:如何将存储器块的内容置成某固定值(例全填充为0FFH)? 总结:通过本实验,我了解到单片机读写存储器的读写方法,同时也了解到单片机编程,调试方法。学会内存的移动方法,也加深对存储器读写的认识。

微机原理实验报告 学院:算机科学与软件教育学院 实验 课程 名 微机原理实验成绩实验 项目名称实验二、二进制到BCD码转换 指导老 师 1. 了解BCD值和ASCII值的区别。 2. 了解如何将BCD值转换成ASCII值。 3. 了解如何查表进行数值转换及快速计算。 二、实验原理 ASCII码表 三、实验设备仪器及材料 计算机,WA VE 6000软件 data segment Result db 3 dup(?) data ends code segment assume cs:code, ds:data start proc near mov ax, data mov ds, ax mov ax, 123 mov cl, 100 div cl mov Result, al ; 除以 100, 得百位数 mov al, ah mov ah, 0 mov cl, 10 div cl mov Result+1, al ; 余数除以 10, 得十位数 mov Result+2, ah ; 余数为个位 数 jmp $ code ends end start 代码流程图

微机原理实验四实验报告

实验报告

实验四 8251可编程串行口与PC机通信实验一、实验要求 利用实验箱内的8251A芯片,实现与PC机的通信。 二、实验目的 1.掌握8251A芯片结构和编程方法; 2.了解实现串行通信的硬件环境,数据格式和数据交换协议; 3.了解PC机通信的基本要求。 三、实验原理 (一)8251A芯片工作方式配置: 1. 8个数据位; 2.无奇偶校验位; 3.1个停止位; 4.波特率因子设为16; 5. 波特率设为9600。 (二)8251A主要寄存器说明 图4-1 模式字 图4-2 命令字

CO MMAN D I NSTR UCT ION FO RMA T 图4-3 状态字 (三)8251编程 对8251 的编程就是对8251 的寄存器的操作,下面分别给出8251 的几个寄存器的格式。(1)方式控制字 方式控制字用来指定通信方式及其方式下的数据格式,具体各位的定义如图4-4所示。 图4-4 方式控制字说明 (2)命令控制字 命令控制字用于指定8251 进行某种操作(如发送、接收、内部复位和检测同步字符等)或处于某种工作状态,以便接收或发送数据。图4-5 所示的是8251 命令控制字各位的定义。 图4-5命令控制字说明 (3)状态字 CPU 通过状态字来了解8251 当前的工作状态,以决定下一步的操作,8251 的状态字如 图4-6所示。 图4-6 状态字说明 四、实验电路连接: 1.CS8251接228H,CS8279已固定接至238H; 2.扩展通信口18中的232RXD连8251RXD ,232TXD连8251TXD;

3.计算机的两个RS232通信口,一个连至仿真机通信口,一个连至扩展通信口18(所有通信口均为DB9)。注意:RS232通信口必须在设备断电状态下插拔! 图4-7 连线图 五、实验内容及要求 1. 将例程从PDF文档中导入到WMD86软件编辑环境中,调试通过。使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。将结果截图保存,贴入实验报告。 2.剔除例程中冗余部分,实现对例程的精简和优化。将精简内容与相应理由写入实验报告。 3.将自己学号的后三位数字通过RS232端口的Txd管脚输出。使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。将结果截图保存,贴入实验报告。 4.通过读状态寄存器的方法,获得发送移位寄存器是否为空的信息,实现学号后三位数字的循环发送。将结果截图保存,贴入实验报告。 5.给每帧数据间添加固定的时间间隔,时间间隔为10000个指令周期。将结果截图保存,

微机原理实验报告

汇编语言程序设计实验 一、实验内容 1.学习并掌握IDE86集成开发环境的使用,包括编辑、编译、链接、 调试与运行等步骤。 2.参考书例4-8,P165 (第3版161页)以单步形式观察程序的 执行过程。 3.修改该程序,求出10个数中的最大值和最小值。以单步形式观 察,如何求出最大值、最小值。 4.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态。 二、实验目的 1.学习并掌握IDE86集成开发环境的使用 2.熟悉汇编语言的基本算法,并实际操作 3.学会利用IDE86进行debug的步骤 三、实验方法 1.求出10个数中的最大值和最小值 (1)设计思路:利用冒泡法,先对数据段的10个数字的前2个比 较,把二者中大的交换放后面。在对第二个和第三个数比较,把 二者中较大的交换放后面,依此类推直到第十个数字。这样第十 位数就是10个数里面最大的。然后选出剩下9个数字里面最大 的,还是从头开始这么做,直到第九个数字。以此类推直到第一 个数字。

(2)流程图 2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态

(1)设计思路:结果存放在sum里面,加数是i(初始为1),进行 100次循环,sum=sum+I,每次循环对i加1. (2)流程图: 四、 1.求出10个数中的最大值和最小值

DSEG SEGMENT NUM DB -1,-4,0,1,-2,5,-6,10,4,0 ;待比较数字 DSEG ENDS CODE SEGMENT ASSUME DS:DSEG,CS:CODE START:MOV AX,DSEG MOV DS,AX LEA SI,NUM MOV DX,SI MOV CL,9 ;大循环计数寄存器初始化 NEXT1:MOV BL,CL ;大循环开始,小循环计数器初始化MOV SI,DX NEXT2:MOV AL,[SI+1] CMP [SI],AL ;比较 JGGONE ;如果后面大于前面跳到小循环末尾CHANGE:MOV AH,[SI] ;交换 MOV [SI+1],AH MOV [SI],AL JMP GONE GONE:add SI,1 DEC BL JNZ NEXT2

微机原理与接口技术 实验报告

微机原理与接口技术 实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级: 学号: 姓名:

实验一8259中断控制器应用实验 一、实验目的 1.掌握PC机中断处理系统的基本原理。 2. 掌握可编程中断控制器8259的应用编程方法。 二、实验内容 1.PC机内中断实验。使用单次脉冲模拟中断产生。验证中断处理程序,在显示器屏幕上显示一行预设定的字符串。 2.PC机内中断嵌套实验。使用单次脉冲模拟两个中断源的中断产生,填写中断处理程序,体会中断嵌套的过程。 3.扩展多中断源查询方式应用实验。利用实验平台上8259控制器作为中断扩展源,编写程序对8259控制器的中断请求进行处理。 三、实验步骤 1.实验1-1:PC机内中断应用实验 (1)按接线图连好接线,调用程序源代码8259-1.asm,观察实验现象,屏幕显示结果截图如下: (2)自设计实验。改变接线方式,将单次脉冲连到USB核心板上的IRQ10插孔上,参考本实验代码,编程实现IRQ10中断。(注意:考虑PC机内中断级联的方式,参看前面的原理说明),代码如下: DA TA SEGMENT MESS DB 'IRQ10 ',0DH,0AH, '$' DA TA ENDS

CODE SEGMENT ASSUME CS:CODE, DS:DA TA START: MOV AX, CS MOV DS, AX MOV DX,OFFSET INT10 MOV AX,2572H ;设置IRQ10对应的中断向量 INT 21H IN AL,21H ;读取中断屏蔽寄存器 AND AL,0F3H ;开放IRQ3中断和从片 OUT 21H,AL IN AL,0A1H ;从片的中断屏蔽寄存器 AND AL,0FBH ;开放IRQ10中断 OUT 0A1H,AL MOV CX,10 STI WAIT: JMP W AIT INT10: MOV AX, DATA ;中断服务程序 MOV DS, AX MOV DX, OFFSET MESS MOV AH, 09 ;在屏幕上显示每次中断的提示信息 INT 21H MOV AL, 20H ; 发出EOI结束中断到PC内主片的地址20H OUT 20H, AL LOOP NEXT IN AL, 21H ;读中断屏蔽寄存器,获取中断屏蔽字 OR AL, 08H ;关闭IRQ3中断 OUT 21H, AL ;将中断屏蔽字送到中断屏蔽寄存器 STI ;置中断标志位 MOV AH, 4CH ;返回DOS INT 21H NEXT: IRET ;中断返回 CODE ENDS END START 调用程序代码,观察实验现象,屏幕显示截图如下:

微机原理实验报告

微 机 原 理 实 验 报 告 班级: 指导老师:学号: 姓名:

实验一两个多位十进制数相加的实验 一、实验目的 学习数据传送和算术运算指令的用法 熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。 二、实验内容 将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。 三、程序框图 图3-1

四、参考程序清单 DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H;被加数 DATA1END EQU $-1 DATA2 DB 34H,35H,30H,38H,32H;加数 DATA2END EQU $-1 SUM DB 5 DUP(?) 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 AX,TOP MOV SP,AX

MOV SI,OFFSET DATA1END MOV DI,OFFSET DATA2END CALL ADDA MOV AX,4C00H INT 21H ADDA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,05H AD1: SUB BYTE PTR [SI],30H SUB BYTE PTR [DI],30H DEC SI DEC DI DEC BX JNZ AD1 MOV SI,DX MOV DI,BP MOV CX,05H CLC AD2: MOV AL,[SI] MOV BL,[DI] ADC AL,BL

微机原理与单片机实验报告

北京联合大学信息学院实验报告 课程名称:微型计算机原理学号: 姓名: 2012 年 6 月 9 日

目录 实验1 EMU8086模拟器的使用 (3) 实验2 数据传送指令的使用 (5) 实验3 多位十六进制加法运算实验 (9) 实验5 循环程序实验 (11) 实验6 由1 到100 求和实验 (13) 实验7 求表中正数_负数_0 的个数实验 (14) 实验8 数据排列实验(冒泡排序) (16) 实验9 系统功能调用(大小写转换) (18) 实验10 阶乘(递归运算) (20) 实验11 ProteusIO工程文件的建立 (21) 实验12 IO口读写实验(245、373) (22) 实验13 8255 接口实验 (24) 实验14 声光报警 (25) 实验总结 (28)

实验1 EMU8086模拟器的使用 一实验要求 利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的: 熟悉EMU8086实验环境 三EMU8086环境: 1 模拟器编辑窗口 2 模拟器调试窗口

四实验内容 实验内容1:新建文件。 运行emu8086 1. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码: MOV AX, 1020H MOV BX, 2030H MOV AX, BX ADD AX, BX MOV [BX], AX MOV [2032H], AX HLT 2. 编译:单击“编译”按钮,对程序段进行编译; 3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。 4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。 5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。 6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。 7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为400毫秒,单击“全速”按钮,运行程序, 8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容 9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序

微机原理与接口技术实验报告

微机原理与接口技术》 上机报告 学院:机电学院指导教师:胡勇学号:631424210229 姓名:鞠其林

实验一初级程序的编写与调试实验 、实验目的 1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序. 2、深入了解数据在存储器中的存取方法, 及堆栈中数据的压入与弹出 3、掌握各种寻址方法以及简单指令的执行过程. 二、实验内容 1、设堆栈指针SP=2000H,AX=3000H,BX=5000H请, 编一程序段将AX的内容和BX 的内容进行交换. 请用堆栈作为两寄存器交换内容的中间存储单元, 用DEBUG调试程序进行汇编与调试. 程序: MOV AX,3000 MOV BX,5000 MOV SP,2000 PUSH AX PUSH BX POP AX POP BX HLT

2、设AX=0002H,编一个程序段将AX的内容乘10, 要求用移位的方法完成程序: MOV AX,0002 MOV BX,AX MOV CL,2 SHL AX,CL ADD AX,BX MOV CL,1 SHL AX,CL HLT

三、心得体会 从这个程序的编辑过程中我感受到了汇编语言的强大,很直观的就可以读懂程 序的含义,但代码比较难记,而且语法严谨,我调试的过程中犯了一点错误, 修改的次数较多,希望我以后可以不再犯同样的错误,也是因为我练的比较的 少,还很生疏,我以后一定多加练习,把汇编学好 实验二 加法及判断程序的编写与调试 、实验目的 1、熟练掌握编写汇编语言源程序的基本方法和基本框架 2、学会编写顺序结构 , 分支结构和循环结构的汇编程序

3、掌握程序中数据的产生与输入输出的方法. 二、实验内容 1、用汇编语言编写一个加法程序: 1325+9839 请用ASCII 码的形式将加数与被加数存放在数据区DATA1和DATA2中, 并将相加结果显示输出. 程序: DATA SEGMENT DATA1 DB '5','2','3','1' DATA2 DB '9','3','8','9' DATA ENDS STACK SEGMENT PARA STACK 'STACK' DB 200 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX LEA SI,DATA1 LEA DI,DATA2 MOV CX,4 MOV AH,0 NEXT: MOV AL,[SI] ADC AL,[DI] ADC AL,AH MOV AH,0 AAA ADD AL,30H MOV [DI],AL INC DI INC SI LOOP NEXT MOV CX,5 ADD AH,30H MOV [DI],AH NEXT1:MOV DL,[DI] MOV AH,02 INT 21H DEC DI

四川大学微机原理实验报告..

微机原理实验报告 学院: 专业班级: 姓名 学号

实验一汇编语言编程基础 1.3汇编语言程序上机操作和调试训练 一.功能说明 运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。 运用MASM﹒EXE文件进行汇编,修改程序中的各种语法错误,直至正确,形成*.OBJ文件。 运用LINK.EXE文件进行连接,形成*.EXE文件。 仔细阅读和体会DEBUG调试方法,掌握各种命令的使用方法。 运用DEBUG。EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。 再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG的设置断点,单步执行等功能发现错误所在并加以改正。 二.程序流程图 设置被除数、商的地址指针 设置单位除法次数计数器 取被除数一位作十进制调整 作字节除法、存商 N 被除数各位已除完? Y 显示运算结果 结束 三.程序代码 修改后的程序代码如下: DATA SEGMENT A D B 9,6,8,7,5 B DB 5 C DB 5 DUP (0) N EQU 5 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX

MOV ES,AX CLD LEA SI,A LEA DI,C MOV CX,N MOV AH,0 LP1: LODSB AAD DIV B STOSB LOOP LP1 MOV CX,N LEA DI,C LP2: MOV DL,[DI] ADD DL,30H MOV AH,2 INT 21H INC DI LOOP LP2 MOV AH,4CH INT 21H CODE ENDS END START 四.实验感想和收获 通过这次试验,我对微机原理上级试验环境有了初步的认识,可以较为熟练地对汇编语言进行编译,汇编及连接,同时也学会了用DEBUG调试程序,收获很大。 在这次试验中我也遇到了一些困难。在刚开始我发现自己无法打开MASM.EXE,计算机提示是由于版本不兼容。我这才想起来我的操作系统是64位的,和该软件版本不兼容。不过我并没有放弃,经过我的摸索之后,我发现用DOSBOX这个程序可以解决我的电脑运行不了该程序的问题。在解决了第一个难题后,我开始着手改正试验1.3中的语法错误和逻辑错误,但是无论我怎么修改却始终都无法通过编译,并且基本上每句话都有编译错误。根据我多年编程的经验来看,这应该是中文输入法在搞鬼,之后我耐心地把程序重新输了一遍,果然通过了编译,并且之后的连接也进行的很顺利。在用DEBUG调试时发现得出的结果也很正确。 尽管这次的实验内容非常简单,仅仅是教会我们一些基本的操作,但我却明显感觉到了汇编语言和C语言等高级语言所不同的地方。越是底层,基础的东西就越不人性化,用C语言一行代码就能实验的功能在汇编语言中可能要花上数十行。看来汇编语言的学习不是几周就能速成的,必须要有长年累月的积淀才能掌握。

微机原理 实验报告

微机原理与接口技术 实验指导书 班级 学号099074 姓名 安徽工业大学计算机学院

实验一存贮器读写实验 一、实验内容 对指定地址区间的RAM(4000H~4FFH)先进行写数据55AAH,然后将其内容读出再写到5000H~5FFH中。 二、实验步骤 l、将实验系统与PC机连接; 2、在PC机上启功DJ-8086k软件,实验系统进入联机状态; 3、在DJ-8086k软件环境下编辑、调试程序,将程序调试、编译通过; 4、运行程序。 5、稍后按RST键退出,用存贮器读方法检查4000H~43FFH中的内容和5000~53FFH中的内容应都是55AA。 三、实验程序清单 CODE SEGMENT ; ASSUME CS:CODE PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 ORG 1850h START: JMP START0 BUF DB ,,,,, data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1 h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH START0: MOV AX,0H MOV DS,AX MOV BX,4000H MOV AX,55AAH MOV CX,0200H RAMW1: MOV DS:[BX],AX ADD BX,0002H LOOP RAMW1 MOV AX,4000H MOV SI,AX MOV AX,5000H MOV DI,AX

微机原理实验报告材料

微型计算机原理及单片机 实验报告 班级: 学号: :

实验一 汇编语言程序设计 1 分支程序设计实验 1.1.1 实验目的 1. 掌握分支程序的结构。 2. 掌握分支程序的设计、调试方法。 1.1.2 实验设备 PC 机一台,TD-PITE 实验装置一套。 1.1.3 实验容 设计一数据块间的搬移程序。设计思想:程序要求把存中一数据区(称为源数据块)传送到另一存储区(成为目的数据块)。源数据块和目的数据块在存储中可能有三种情况,如图1.1所示。 源数据块 目的数据块0H FFFFFH 源数据 块目的数据块0H FFFFFH 源数据 块 目的数据块0H FFFFFH (a ) (b ) (c ) 图1.1 源数据块与目的数据块在存储中的位置情况 对于两个数据块分离的情况,如图1.1(a ),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论: 当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图1.14(b )所示。 当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图1.14(c )所示。 实验程序流程图如图1.5所示。 1.1.4 实验程序如下 SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START:

MOV CX, 0010H图1.5 程序流程图 MOV SI, 6000H Array MOV DI, 7000H CMP SI, DI JA A2 ADD SI, CX ADD DI, CX DEC SI DEC DI A1: MOV AL, [SI] MOV [DI], AL DEC SI DEC DI DEC CX JNE A1 JMP A3 A2: MOV AL, [SI] MOV [DI], AL INC SI INC DI DEC CX JNE A2 A3: JMP A3 CODE ENDS END START 1.1.5 实验步骤 1. 按流程图编写实验程序,经编译、无误后装入系统。 2. 用E命令在以SI为起始地址的单元中填入16个数。 3. 运行程序,待程序运行停止。 4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同。 5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程 序的功能。

微机原理实验报告

大学 科技学院 实 验 报 告 课程名称:微机原理实验

实验一数据转换实验 一、实验目的 (1)初步掌握在PC机上建立、汇编、链接和运行8086/88汇编语言程序的过程。 (2)通过对两个验证性试验的阅读、调试、掌握不同进制数及编码相互转换的程序设计方法。 (3)完成程序设计题,加深对数码转换的理解,了解简单程序设计方法。 二、实验内容 1.十六进制数转换为ASCII码 设二字节十六进制数存放于其实地址为3500H的内存单元中,把他们转换成ASCII码后,再分别存入起始地址为350A的四个内存单元中。从书上ASCII码表中可知十六进制数加30H即可得到0H~9H的ASCII码,而要得到AH~FH 的ASCII码,则需再加7H。 请根据所给流程图理清思路,总结出对应的若干要点。将流程图与参考程序相互。根据分析的结果将运行时内存的变化列写出来。 学习并使用MASM或WAVE仿真软件分析程序运行过程中相关寄存器及相应内存的变化情况来验证自己的猜想,以巩固命令的学习,提高编程能力。

图1-1-1

DATAS SEGMENT ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 MOV CX,0004H;根据转换个数设定循环次数 ;(两字节十六进制数如6B2C对应有四个用十六进制表示的ASCII码表示,即四个字节) MOV DI,3500H;指向该两字节十六进制数起始地址,此时在调试窗口修改内存字节 MOV DX,[DI];将地址3500H中的内容(6B2C)给DX A1: MOV AX,DX;第一次时DX=6B2C, ;因为想顺序取C、2、6、B,所以需要一个中间变量AND AX,000FH;取低四位,第一次取到C, CMP AL,0AH;判断AL属于0~9,还是A~F JB A2;如果是0~9,则跳转到A2 ADD AL,07H;若属于A~F,再加上07H后也是再加上30H即得到转换。 A2: ADD AL,30H;0~9的ASCII码对应的十六进制比其 ;本身(注意:亦是十六进制)大30H MOV [DI+0AH],AL;将转码后的C,即43H给350A INC DI;将DI指向下一字节,用于存储转码后的值,第一次自增后要存‘2’ PUSH CX;功能是接下来要用到CX作为一个中间变量, ;而刚才已经使用并且接下来还会用到CX的值, ;也可以不用CX,用其他不用的寄存器或者直接立即数形式的。 MOV CL,04H;若直接用立即数,可能不稳定,(原因不详)用一个中间变量。

微机原理实验报告冒泡排序

一、实验目的 (1)学习汇编语言循环结构语句的特点,重点掌握冒泡排序的方法。 (2)理解并掌握各种指令的功能,编写完整的汇编源程序。 (3)进一步熟悉DEBUG的调试命令,运用DEBUG进行调试汇编语言程序。 二、实验内容及要求 (1)实验内容:从键盘输入五个有符号数,用冒泡排序法将其按从小到大的顺序排序。 (2)实验要求: ①编制程序,对这组数进行排序并输出原数据及排序后的数据; ②利用DEBUG调试工具,用D0命令,查瞧排序前后内存数据的变化; ③去掉最大值与最小值,求出其余值的平均值,输出最大值、最小值与平均值; ④用压栈PUSH与出栈POP指令,将平均值按位逐个输出; ⑤将平均值转化为二进制串,并将这组二进制串输出; ⑥所有数据输出前要用字符串的输出指令进行输出提示,所有数据结果能清晰显示。 三、程序流程图Array (1)主程序:MAIN

(2)

就是 NAME BUBBLE_SORT DATA SEGMENT ARRAY DW 5 DUP(?) ;输入数据的存储单元 COUNT DW 5 TWO DW 2 FLAG1 DW 0 ;判断符号标志 FLAG2 DB 0 ;判断首位就是否为零的标志FAULT DW -1 ;判断出错标志 CR DB 0DH,0AH,'$' STR1 DB 'Please input five numbers seperated with space and finished with Enter:','$' STR2 DB 'The original numbers:','$' STR3 DB 'The sorted numbers:','$' STR4 DB 'The Min:','$' STR5 DB 'The Max:','$' STR6 DB 'The Average:','$' STR7 DB 'The binary system of the average :','$' STR8 DB 'Input error!Please input again!''$' DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA,ES:DATA START: PUSH DS AND AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA DX,STR1 MOV AH,09H ;9号DOS功能调用,提示输入数据 INT 21H CALL CRLF ;回车换行 REIN: CALL INPUT ;调用INPUT子程序,输入原始数据CMP AX,FAULT ;判断就是否出错, JE REIN ;出错则重新输入

微机原理实验报告

目录 软件实验部分: 实验一清零程序 实验二拆字程序 实验三拼字程序 实验四数据区传送子程序 实验五数据排序实验 实验六查找相同数个数 实验七无符号双字节快速乘法子程序 实验八多分支程序 实验九脉冲计数(定时/计数器实验) 实验十电脑时钟(定时器、中断综合实验) 硬件实验部分: 实验一 P1口亮灯实验 实验二 P1口转弯灯实验 实验三 P3.3口输入,P1口输出 实验四工业顺序控制 实验五继电器控制 实验六 8255控制交通灯 实验七 LED16×16点阵显示实验 实验八串并转换实验 实验九 A/D转换实验 实验十 D/A转换 实验十一电子音响 实验十二步进电机控制 实验十三 8032串行口应用实验㈠——双机通信 实验十四小直流电机调速实验 软件实验部分 本节共编了十个软件实验,通过这些实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。 本节提供的软件实验,涉及外部数据存储器扩展寻址操作,因此需按下图连接实验线路。

1.将存储器单元的D0—D7总线接口用8芯扁平线与数据总线单元D0—D7的任一接口相连,存储器单元的A0—A7地址接口与地址总线单元(低8)A0—A7的任一接口相连,存储器单元的A8—A12地址接口与地址总线单元(高8)A8—A12的任一接口相连。注意外部扩充的数据区的有效范围。 2.存储器单元的WE/PGM插孔与六位LED左下方的IOWE插孔相连。 3.存储器单元的OE插孔与六位LED左下方的IORD插孔相连。 4.存储器单元的CS1插孔与六位LED右下方的IOWE插孔相连。 实验一清零程序 一、实验目的 掌握汇编语言设计和调试方法,熟悉键盘操作。 二、实验内容 把2000H-20FFH的内容清零 三、程序框图 四、实验步骤 用连续或单步方式运行程序,检查2000-20FF中执行程序前后的内容变化。 五、思考 假使把2000H-20FFH中的内容改成FF,如何修改程序。 接P1.0到L1,试编写程序,对片外数据存储器6264进行读写操作,若L1闪动则表示6264RAM读写正常。(此思考题也可留在硬件实验中做) ORG 0640H

微机原理实验报告

微机原理实验报告 实验课程:____微机原理与接口技术__ 学生姓名:________××_________ 学号:_______××_______ 专业班级:_______××______

第一部分硬件实验 实验一 8255控制交通灯实验 一、实验目的与要求 1、了解8255芯片的工作原理,熟悉其初始化编程方法以及输入、输出程序设计技巧。学会使用8255并行接口芯片实现各种控制功能,如本实验(控制交通灯)等。 2、熟悉8255内部结构和与8088的接口逻辑,熟悉8255芯片的3种工作方式以及控制字格式。 3、认真预习本节实验内容,尝试自行编写程序,填写实验报告。 二、实验设备 STAR系列实验仪一套、PC机一台 三、实验内容 1、编写程序:使用8255的PA0.. 2、PA4..6控制LED指示灯,实现交通灯功能。 2、连接线路验证8255的功能,熟悉它的使用方法。 四、实验原理图

五、实验步骤 1、连线说明: 2、观察实验结果,是否能看到模拟的交通灯控制过程。 六、实验结果

七、实验扩展及思考 如何对8255的PC口进行位操作? 在端口C置1/置0控制字中,最高位D7应为0;其中的D6,D5,D4三位不用,是0是1对控制字无影响,一般置0即可,D3,D2,D1组合用来选中端口C 的某一位(2^3=8,故端口C的8位都可选择),最后一位D0用于指出选中位是置1还是置0,D0为1则置1,D0为0则置0.03H=00000011B;D7=0,说明此控制字为端口C置1/置0控制字,D6,D5,D4三位不用(本控制字中全部置 0),D3,D2,D1三位的组合为"001",按8255A的控制字格式选中的是端口C的 第2位(即PC1位),D0=1说明对PC1进行置1操作。 实验二 74HC138译码器实验 一、实验目的与要求 1、掌握74HC138译码器的工作原理,熟悉74HC138译码器的具体运用连接方法,了解74HC138是如何译码的。

微机原理及应用实验报告

微机原理及应用实验报告标准化文件发布号:(9312-EUATWW-MWUB-WUNN-INNUL-DQQTY-

微机原理及应用实验报告 班级: 姓名: 学号: 中南大学 机电工程学院精密测控实验室

实验二软件程序设计 1.实验目的: 1、掌握MCS-51单片机指令系统及用汇编语言编程技巧; 2、了解和熟悉用MCS-51单片机仿真开发机调试程序的方法。 2.实验内容: 1、编写排序程序并上机调试通过。 已知8031内部RAM60H~69H单元中,依次存放了 FFH,99H,77H,CCH,33H,DDH,88H,BBH,44H,EEH,它们均为无符号数,编程 将它们按递减次序排序,即最大数放在60H中,最小数放在69H中。 2.、编写多字节加法程序并上机调试通过。 8031内部RAM20H~22H单元中,存放了3字节被加数(低字节在前),在2AH~2CH单元中存放3字节加数(低字节在前),求两数之和,并将结 果存入以20H为起始地址的区域中(低字节在前)。 3.实验设备名称、型号: 4.画出软件程序流程图,写出上机调试通过的汇编语言程序清单: 程序1、编写排序程序并上机调试通过。 已知8031内部RAM60H~69H单元中,依次存放了 FFH,99H,77H,CCH,33H,DDH,88H,BBH,44H,EEH,它们均为无符号数,编程 将它们按递减次序排序,即最大数放在60H中,最小数放在69H中。

解:本设计采用冒泡排序法,使用双重循环,并在内循环中进行比较如果合乎从大到小的顺序则不动,否则两两交换,这样比较下去,比较9次 后,最小的那个数就会沉底,在下一次比较时将减少一次比较次数。如 果一次比较完毕,没有发生交换,说明已经按照从大到小的顺序排列 了。则可以退出循环,结束程序。 程序结构框图和程序代码如下:

微机原理实验报告记录

微机原理实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

微机原理实验报告 班级:自动化72 组员梁慕佳 07054031 张乐 07054033 张林鹏 07054034

实验一:8255 并行接口实验 1 实验目的 1. 学习并掌握8255 的工作方式及其应用; 2. 掌握8255 典型应用电路的接法。 2 实验设备 PC机一台,TD-PITE 实验装置一套。 3 实验内容 1. 基本输入输出实验。编写程序,使8255 的A口为输入,B口为输出,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就发生相应改变。 2. 流水灯显示实验。编写程序,使8255 的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0 正相反,由右向左,每次仅点亮一个灯,循环显示。 4 实验原理 并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8 位、16 位或32 位等。8255可编程外围接口芯片是Intel公司生产的通用并行I/O 接口芯片,它具有A、B、C 三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。8255的内部结构及引脚如图2-6-1 所示,8255工作方式控制字和C口按位置位/复位控制字格式如图2-6-2所示。 图2-6-1 8255内部结构及外部引脚图

微机原理实验报告

微机原理实验报告实验名称:MIPS汇编程序设计 院系:电信学院 班级: 姓名: 指导老师: 一、实验目的: 1.熟悉MIPS汇编程序开发环境,学习使用Qtstim工具。知道如何查看内存空间分配。

2. 了解C语言语句与汇编指令之间的关系。 3. 掌握MIPS汇编程序设计,掌握QTSPIM的调试技术。 4. 了解MIPS汇编语言与机器语言之间的对应关系。 5. 熟悉常见的MIPS汇编指令 6. 掌握程序的内存映像。 二、实验内容 1.用汇编程序实现以下伪代码:要求使用移位指令实现乘除法运算。Int main () { Int K,Y; Int Z[50]; Y=56; For(k=0;k<50;K++) Z[k]=Y-16*(k/4+210); } 三、程序设计及分析 1.C语言分析: 有两个变量是int型,一个数组型;还有一个循环执行过程。 2.汇编程序实现分析: 首先需要定义用户数据段,获得一个内存空间作为数组空间。 再选定几个寄存器作为K,Y以及输出,其中输出输出和Y可以合用一个寄存器。 3.设计思路:

分配完空间地址后,最重要的是完成循环控制。循环控制有两个思路:可以是先判断后循环;或者是先循环后判断 即如图 slti $t2,$t0,50 #判断k 是否于50 beq $t2,$t3($t2=1循环,否则结束。) 四、程序实现及调试分析

1.汇编程序代码实现: 方法一 .data #定义用户数据段 z:.space 200 #数组为int型,大小为50,所以占内存4*50 str:.asciiz " "#输出结果之间的空隙 .text main: la $s0,z #$s0 #为数组在z[] li $t0,0 #$s1 #代表k计数,初始值为0 li $t1,56 #$t2 #代表Y,初值为56 loop: slti $t2,$t0,50 #判断k是否于50 beq $t2,$0,done #当k大于等于50,跳转结束 srl $t3,$t0,2 #k/4 addi $t3,$t3,210 #k/4+210 sll $t3,$t3,4 #16*(k/4+210) sub $t3,$t1,$t3 #y-16*(k/4+210) sw $t3,0($s0) #写进z[k] li $v0,1 #输出 addi $a0,$s0,0

相关主题