首页 > 文库大全 > 实用范文 > 其他范文

微机原理实验报告封面[样例5]

微机原理实验报告封面[样例5]



第一篇:微机原理实验报告封面

重 重 庆 交 通 大 学 学

学 学 生 实 验 报 告

实验课程名称

开课实验室

学院

年级

专业班

学 学 生 姓 名

开 开 课 时 间

学年第 学期

总 总 成 绩

教师签名

批改日期

第二篇:微机原理实验报告

学号: 学生姓名: 打印日期: 评分: 评语:

实验报告

COURSE PAPER 8255控制开关状态显示

学院 :机电工程与自动化学院

一、实验目的;

(本课程设计是在完成《微机原理与接口技术使用教程》知识后进行的一次综合性训练。通过本课程设计,既可以巩固对所学知识的理解和掌握,又可以培养解决实际问题的本领,也能够提高运用文字图表表达设计思想和对Proteus与Emu8086应用的能力。

二、实验要求;

(1)功能要求:设定8255的PA口为开关量输入,PB口为开关量输出,要求能随时将PA口的开关状态通过PB口的数码管显示出来,如开关为0000,则数码管显示为0;若开关为1111,则数码管显示为F。

(2)具体参数:将8255A的端口A设置为方式0并作为输入口,读取开关量,PB口设置为方式0作为输出口。并设定A、B、C口和控制口的地址为60H、62H、64H、66H。LED为共阴极连接方式。

(3)用Proteus画出实现上述功能的8086和8255及LED相关连接的硬件电路,编写相关程序,结合emu8086,完成仿真调试,给出硬件电路图、程序代码和仿真结果图。

三、实验说明;

 利用前期实验建立组态控制  组态软件的操作界面和主要功能;  混料罐工程或交通灯工程工程组态

四、实验步骤;(1)硬件设计

8255A的四个端口地址为60H、62H、64H、66H。其二进制码分别为0110 0000H、0110 0010H、0110 0100H、0110 0110H。则可以判断,8255A的A0与A1端口应该与8086的A1和A2端口对应。8086的A7、A4、A3、A0为0,A6、A5为1时,8255A接受指令。为完成上述操作,可以使用138译码器。8255A的A端口作为输入口,连接四位开关;B端口作为输出口,连接一个共阴极的LED显示管。

(2)硬件电路图

(3)汇编语言设计 assume cs:code code segment start: MOV DX,066H MOV AL,90H OUT DX,AL

AA: MOV BX, OFFSET TABL MOV DX,060H IN AL,DX AND AL,0FH XLAT MOV DX,062H OUT DX,AL JMP AA

TABL: DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H

code ends end start(4)实验结果

五、实验心得;

通过对proteus及emu8086软件的应用,可以使我将从课堂与书本上学习到的知识,以模拟的方式,制作成成品。在本次课外项目中,我对于8255A的工作方式以及8086如何控制其他元器件输入输出数据有了清晰的认识。通过使用模拟软件,我有了更多的方式去深入了解课本上的知识。

第三篇:化工原理实验报告封面格式

课程名称: 化工原理实验 课题

系院:

专业:

实验人员:

学号:

同组人员:

实验时间:

指导教师:流体流动阻力的测定生物与化学工程系11级应用化学朱颖妍1***

47、戴军凡

49、陈谢萍

51、徐晓丽

52、丁忱202_年2 月 25 日杨金杯

第四篇:北京交通大学微机原理实验报告(yuan)

微机原理

实 验 报 告

隋伟 08212013 自动化0801

目 录

一、I/O地址译码与交通灯控制实验……………………………………3

二、可编程定时器/计数器(8253)……………………………………6

三、中断实验(纯DOS)………………………………………………11

四、模/数转换器…………………………………………………………18

五、串行通讯 ……………………………………………………………16

六、课程综合实验(抢答器)……………………………………………28

七、自主设计实验——LED显示………………………………………32

八、参考文献……………………………………………………………35

一、I/O地址译码与交通灯控制实验

一.实验目的

通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。

二.实验内容

如图5-3,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律燃灭。

十字路口交通灯的变化规律要求:

(1)南北路口的绿灯、东西路口的红灯同时亮3秒左右。(2)南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。(3)南北路口的红灯、东西路口的绿灯同时亮3秒左右。(4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。(5)转(1)重复。

8255动态分配地址: 控制寄存器: 0C40BH

A口地址: 0C408H C口地址: 0C40AH

三.程序流程图和程序清单

DATA SEGMENT X DB ? DATA ENDS

STACK1 SEGMENT STACK DW 100H DUP(0)STACK1 ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA

MOV DS,AX MOV DX,0EC0BH

;写控制字;---------------INIT----------------

MOV AL,80H OUT DX,AL

L3: MOV DX,0EC0AH

CALL DELAY CALL DELAY;长延时,3s左右 MOV AL,24H OUT DX,AL;南北绿灯,东西红灯亮

CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY

MOV BL,8 MOV AL,04H L0: XOR AL,40H;南北黄灯闪,东西红灯亮

MOV AL,81H OUT DX,AL;南北红灯亮,东西绿灯亮 CALL DELAY OUT DX,AL CALL DELAY;延时

CALL DELAY DEC BL;闪烁几次 JNZ L0

CALL DELAY CALL DELAY CALL DELAY;长延时,3s左右

CALL DELAY CALL DELAY CALL DELAY CALL DELAY

MOV BL,9 MOV AL,80H L1: XOR AL,02H;南北红灯亮,东西黄灯闪

OUT DX,AL CALL DELAY DEC BL;延时

CALL DELAY JNZ L1;闪烁几次

CALL DELAY

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

;-----------延时函数------------DELAY : PUSH CX PUSH DX MOV CX,1FFFH LOP1: MOV DX,0FFFFH LOP2: DEC DX

LOOP LOP1 POP DX POP CX RET JNZ LOP2 MOV AH,4CH INT 21H MOV DL,0FFH MOV AH,06H INT 21H JZ L3;六号功能判断若无字符输入ZF=1继续循环

CODE ENDS END START

四.实验遇到的问题和解决方法

问题:绿灯灭后黄灯没有出现闪烁的效果,一直保持常亮

解决方法:修改程序,通过利用异或和循环指令使绿灯灭、红灯亮后,黄灯口的状态从0到1循环变换,并通过调用延迟子程序,从而实现人眼可辨的黄灯闪的效果。

二、可编程定时时钟/计数器(8253)

一、实验目的

掌握8253的基本工作原理和编程方法。

二、实验内容

1. 按图5-1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。

图 5-1

2. 按图5-2连接电图,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。

图5-2 三.实验原理

8253具有3个独立的计数通道,采用减1计数方式。在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。当计数脉冲是已知周期的时钟信号时,计数就成为定时。作计数器时,要求计数的次数可直接作为计数器的初值预置到减“1”计数器中。

8253中各通道可有6种可供选择的工作方式,以完成定时、计数或脉冲发生器等多种功能。本实验用到的是方式0—计数结束中断。在写入计数值N之后的第一个CLK的下降沿将N装入计数执行单元,待下一个CLK的下降沿到来且门控信号GATE为高电平时,通道开始启动计数。在计数过程中,OUT一直保持低电平,直到计数达“0”时,OUT输出由低电平变为高电平,并且保持高电平。8253动态分配地址: 控制寄存器: 0C403H

计数器0地址: 0C400H 计数器1地址: 0C401H

四.程序流程图和程序清单 1)DATA SEGMENT N EQU 0BH CHL

STACK1 SEGMENT STACK DW 100 DUP(0)STACK1 ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX;--------------INIT----------------

L0:;MOV AL,0;计数器初值,不大于0FH DB 0AH,0DH,'$';换行

DATA ENDS MOV DX,0C403H MOV AL,10H OUT DX,AL MOV DX,0C400H MOV AL,N;控制寄存器地址

;计数器0,低字节,方式0,二进制计数;写入控制字

OUT DX,AL;写入计数初值 MOV CL,N;计数器0锁存

;MOV DX,IO8253;OUT DX,AL MOV DX,0C400H IN AL,DX CMP AL,CL JNE L0 DEC CL MOV DL,AL;若AL不等于CL,则继续到L0循环;更改CL值

;读取当前数值

CMP DL,09H;是0~9吗? JLE ASCI ADD DL,07H;是A~F MOV AH,02H;单字符输出计数器当前值 INT 21H MOV DX,OFFSET CHL MOV AH,09H INT 21H

;输出字符串换行 ASCI: ADD DL,30H

CMP CL,0 JNL L0;CL不小于0时,继续循环

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

MOV AH,4CH INT 21H END START CODE ENDS

2)

DATA SEGMENT X DB ? DATA ENDS

STACK1 SEGMENT STACK DW 100H DUP(0)STACK1 ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV AL,36H MOV DX,0C403H;写计数器0控制字 OUT DX,AL MOV AX,1000;写计数器0初值 MOV DX,0C400H OUT DX,AL;先写低字节后写高字节 MOV AL,AH OUT DX,AL;----------------MOV AL,76H MOV DX,0C403H OUT DX,AL;写计数器1控制字 MOV AX,1000;写计数器0初值 MOV DX,0C401H OUT DX,AL MOV AL,AH;先写低字节后写高字节 OUT DX,AL CODE ENDS END START

五.实验遇到的问题和解决方案 问题:计数初值没有显示出来

解决方法:进行TD调试,发现逻辑上出现了问题。修改程序,通过利用CMP AL,CL

JNZ L0来实现将所有的计数值都显示出来。

三、中断实验(纯DOS)

一、实验目的

1、掌握PC机中断处理系统的基本原理。

2、学会编写中断服务程序。

二、实验原理与内容

1、实验原理

PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。IBMPC、PC/XT机内有一片8259中断控制器对外可以提供8个中断源: 中断源 中断类型号 中断功能

IRQ0 08H 时钟

IRQ1 09H 键盘

IRQ2 0AH 保留

IRQ3 OBH 串行口2 IRQ4 0CH 串行口1 IRQ5 0DH 硬盘

IRQ6 0EH 软盘

IRQ7 0FH 并行打印机

8个中断源的中断请求信号线IRQ0~IRQ7在主机的62线ISA总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。对于PC/AT及286以上微机内又扩展了一片8259中断控制,IRQ2用于两片8259之间级连,对外可以提供16个中断源:

中断源 中断类型号 中断功能

IRQ8 070H 实时时钟

IRQ9 071H 用户中断

IRQ10 072H 保留

IRQ11 O73H 保留

IRQ12 074H 保留

IRQ13 075H 协处理器

IRQ14 076H 硬盘

IRQ15 077H 保留

PCI总线中的中断线只有四根,INTA#、INTB#、INTC#、INTD#,它们需要通过P&P的设置来和某一根中断相连接才能进行中断申请。

2、实验内容

实验电路如图31,直接用手动产单脉冲作为中断请求信号(只需连接一根导线)。要求每按一次开关产生一次中断,在屏幕上显示一次“TPC pci card Interrupt”,中断10次后程序退出。

三、编程提示

1.由于9054的驱动程序影响直写9054芯片的控制寄存器,中断实验需要在纯DOS的环境中才能正常运行。这里指的纯DOS环境是指微机启动时按F8键进入的DOS环境。WINDOWS重启进入MSDOS方式由于系统资源被重新规划过,所以也不能正常实验。

2.由于TPC卡使用PCI总线,所以分配的中断号每台微机可能都不同,编程时需要了解当前的微机使用那个中断号并进行设置,获取方法请参看汇编程序使用方法的介绍。(也可使用自动获取资源分配的程序取得中断号)

3.在纯DOS环境下,有些微机的BIOS设置中有将资源保留给ISA总线使用的选项,致使在纯DOS环境(WINDOWS环境下不会出现此问题)下PCI总线无法获得系统资源,也就

无法做实验,这时需要将此选项修改为使用即插即用。

4.在纯DOS环境下,有些微机的BIOS设置中有使用即插即用操作系统的选项,如果在使用即插即用操作系统状态下,BIOS将不会给TPC卡分配系统资源,致使在纯DOS环境(WINDOWS环境下不会出现此问题)下PCI总线无法获得系统资源,也就无法做实验,这时需要将此选项修改为不使用即插即用操作系统。

5.由于TPC卡使用9054芯片连接微机,所以在编程使用微机中断前需要使能9054的中断功能,代码如下:

mov dx,ioport_cent+68h;设置 tpc 卡中9054芯片io口,使能中断

in ax,dx or ax,0900h out dx,ax

其中IOPORT_CENT是9054芯片寄存器组的I/O起始地址,每台微机可能都不同,编程时需要了解当前的微机使用哪段并进行设置,获取方法请参看本书结尾部分的介绍。(也可使用自动获取资源分配的程序取得),+68H的偏移是关于中断使能的寄存器地址,设置含义如下:

程序退出前还要关闭9054的中断,代码如下:

mov dx,ioport_cent+68h;设置 tpc 卡中9054芯片io口,关闭中断

in ax,dx

and ax,0f7ffh out dx,ax

6.PC机中断控制器8259 的地址为20H、21H,编程时要根据中断类型号设置中断矢量,8259中断屏蔽寄存器IMR对应位要清零(允许中断),中断服务结束返回前要使用中断结束命令:

MOV AL,20H OUT 20H,AL

中断结束返回DOS时应将IMR对应位置1,以关闭中断。

四、参考流程图

五、参考程序 程序名:INT.ASM;386以上微机适用

;纯dos下才能使用

;tasm4.1或以上编译

data segment

int_vect EQU 071H;中断0-7的向量为:08h-0fh,中断8-15的向量为:70h-77h 55

irq_mask_2_7 equ 011111011b;中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零

irq_mask_9_15 equ 011111101b;中断0-7时全一,中断8-15时从低至高相应位为零

ioport_cent equ 0d800h;tpc 卡中9054芯片的io地址

csreg dw ?

ipreg dw ?;旧中断向量保存空间

irq_times dw 00h;中断计数

msg1 db 0dh,0ah,'TPC pci card Interrupt',0dh,0ah,'$' msg2 db 0dh,0ah,'Press any key to exit!',0dh,0ah,'$'

msg3 db 0dh,0ah,'Press DMC to interrupt 10 times and exit!',0dh,0ah,'$' data ends

stacks segment db 100 dup(?)stacks ends code segment

assume cs:code,ds:data,ss:stacks,es:data start:

;Enable Local Interrupt Input.386 cli

mov ax,data mov ds,ax mov es,ax mov ax,stacks mov ss,ax

mov dx,ioport_cent+68h;设置 tpc 卡中9054芯片io口,使能中断

in ax,dx or ax,0900h out dx,ax

mov al,int_vect;保存原中断向量

mov ah,35h int 21h mov ax,es mov csreg,ax mov ipreg,bx

mov ax,cs;设置新中断向量 56

mov ds,ax

mov dx,offset int_proc mov al,int_vect mov ah,25h int 21h

in al, 21h;设置中断掩码

and al, irq_mask_2_7 out 21h, al in al, 0a1h

and al, irq_mask_9_15 out 0a1h, al mov ax,data mov ds,ax

mov dx,offset msg2 mov ah,09h int 21h

mov dx,offset msg3 mov ah,09h int 21h

mov irq_times,0ah sti loop1:

cmp irq_times,0;等待中断并判断中断10次后退出

jz exit mov ah,1 int 16h

jnz exit;按任意键退出

jmp loop1 exit: cli

mov bl, irq_mask_2_7;恢复中断掩码

not bl in al, 21h or al, bl out 21h, al

mov bl, irq_mask_9_15 not bl in al, 0a1h 57

or al, bl out 0a1h, al

mov dx,ipreg;恢复原中断向量

mov ax,csreg mov ds,ax mov ah,25h mov al,int_vect int 21h

mov dx,ioport_cent+68h;设置 tpc 卡中9054芯片io口,关闭中断

in ax,dx

and ax,0f7ffh out dx,ax mov ax,4c00h int 21h

int_proc proc far;中断处理程序

cli

push ax push dx push ds

dec irq_times

mov ax,data;Interrupt to do mov ds,ax

mov dx,offset msg1 mov ah,09h int 21h

mov al,20h;Send EOI out 0a0h,al out 20h,al pop ds pop dx pop ax sti iret

int_proc endp code ends

四、模/数转换器

一、实验目的

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

二、实验内容

1、实验电路原理图如图38。通过实验台左下角电位器RW1输出0~5V直流电压送入ADC0809通道0(IN0),利用debug的输出命令启动A/D转换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。

启动IN0开始转换: Out 0298 0 读取转换结果: In 0298

2、编程采集IN0输入的电压,在屏幕上显示出转换后的数据(用16进制数)。

3、将JP3的1、2短接,使IN2处于双极性工作方式,并给IN1输入一个低频交流信号(幅度为±5V),编程采集这个信号数据并在屏幕上显示波形。

三、实验提示

1、ADC0809的IN0口地址为298H,IN1口地址为299H。

2、IN0单极性输入电压与转换后数字的关系为:

其中Ui为输入电压,UREF为参考电压,这里的参考电压为PC机的+5V电源。

3、一次A/D转换的程序可以为

MOV DX,口地址

OUT DX,AL ;启动转换

;延时

IN AL,DX ;读取转换结果放在AL中

四、参考流程图

五、参考程序1:AD_1.ASM ioport equ 0d400h-0280h io0809a equ ioport+298h code segment assume cs:code

start:mov dx,io0809a;启动A/D转换器

out dx,al

mov cx,0ffh;延时

delay:loop delay

in al,dx;从A/D转换器输入数据

mov bl,al;将AL保存到BL mov cl,4

shr al,cl;将AL右移四位

call disp;调显示子程序显示其高四位

mov al,bl and al,0fh

call disp;调显示子程序显示其低四位

mov ah,02

mov dl,20h;加回车符

int 21h mov dl,20h int 21h

push dx

mov ah,06h;判断是否有键按下

mov dl,0ffh int 21h pop dx

je start;若没有转START mov ah,4ch;退出

int 21h

disp proc near;显示子程序

mov dl,al

cmp dl,9;比较DL是否>9

jle ddd;若不大于则为'0'-'9',加30h为其ASCII码

add dl,7;否则为'A'-'F',再加7 ddd: add dl,30h;显示

mov ah,02 int 21h ret

disp endp code ends end start

五、串行通讯

一、实验目的

1、进一步了解串行通信的基本原理。

2、掌握串行接口芯片8250的工作原理和编程方法。

3、熟悉PC机串行口的基本连接方法

二、实验内容

1、PC机RS-232串口自发自收。

按照PC机串口自发自收的连接方法连线。编写PC机自发自收串行通信程序,要求:从键盘输入一个字符,将字符通过串口发送出去,再由此串口将字符接收回来并在屏幕上显示,实现自发自收。

2、两台PC机间RS-232串口通信。

按照PC机RS-232串口直接互连的方法连接两台PC机。编写PC机直接互连串行通信程序;要求:由甲机键盘键入字符经串口发送给乙机,再由乙机通过串口接收字符并显示在屏幕上。当键入感叹号“!”,结束收发过程。三.实验原理

1)本实验为异步通信:以字符为单位进行传送,每传送一个字符,以起始位作为开始标志,以停止位作为结束标志。

异步串行通信的工作过程是:传送开始后,接收设备不断地检测传输线是否有起始位到来,当接收到一系列的“1”(空闲或停止位)之后,检测到第一个“0”,说明起始位出现,就开始接收所规定的数据位、奇偶校验位及停止位。经过接收器处理,将停止位去掉,把数据位拼装成一字节数据,并且经奇偶校验无错误,才算是正确地接收到了一个字符。当一个字符接收完毕,接收设备又继续测试传输线,监视“0”电平的到来(下一个字符的开始),直到全部数据接收完毕。

帧 Dn„D0 D1 数据位 起 空闲位 始 位 奇 偶 校验位 停 止 位 空闲位

2)8250各部分功能说明

8250片内有10个寄存器,其中有几个是共用地址的,其识别由线路控制寄存器(LCR)的最高位DLAB来决定。各寄存器的地址和格式如下所示:.3)数据发送和接收:

四.程序清单 1.自发自收

DATA SEGMENT CHL

STACK1 SEGMENT STACK DW 100 DUP(0)STACK1 ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX;--------------INIT----------------DB 0AH,0DH,'$';换行字符串

DATA ENDS

MOV DX,3FBH;MOV AL,80H;DLAB=1

OUT DX,AL MOV AX,0CH;N=12 BAUD=9600bps MOV DX,3F8H;低位

MOV AL,AH INC DX OUT DX,AL OUT DX,AL MOV AL,03H;八位数据,1停止,无校验 MOV DX,3FBH;线路控制REG OUT DX,AL MOV AL,0;屏蔽全部中断 MOV DX,3F9H

OUT DX,AL WAIT1: MOV DX,3FDH;读线路状态寄存器

CHAR: PUSH AX

MOV DL,AL MOV AH,02H INT 21H MOV DX,OFFSET CHL;输出字符串换行 MOV AH,09H IN AL,DX TEST AL,1EH;判断是否有错 JNZ ERROR TEST AL,01H;判断是否收到 JNZ RECEIVE TEST AL,20H;判断发送端是否空 JZ WAIT1 MOV DL,0FFH;六号功能调用读入待发送数据 MOV AH,06H INT 21H JZ WAIT1 MOV DX,3F8H;写发送REG OUT DX,AL JMP WAIT1;返回 WAIT1;显示接收

INT 21H POP AX JMP WAIT1 ERROR: MOV DX,3FDH

RECEIVE:MOV DX,3F8H

IN AL,DX JNE CHAR;读数据接收寄存器

CMP AL,'!';判断是否结束;------------------------------MOV AH,4CH INT 21H CODE ENDS END START

IN AL,DX MOV DL,'?';对于错误显示'?" MOV AH,02H INT 21H JMP WAIT1 2.双机通信(1)发送端: CODE SEGMENT ASSUME CS:CODE START: MOV AL,80H;8250初始化,设DLAB=1 MOV DX,3FBH OUT DX,AL

MOV AX,30H MOV DX,3F8H OUT DX,AL;写入除数低字节 MOV AL,AH INC DX OUT DX,AL;写入除数高字节 MOV AL,0AH;7位数据,1位停止,奇校验 MOV DX,3FBH OUT DX,AL;写入线路控制寄存器

MOV AL,03H MOV DX,3FCH OUT DX,AL;写入Modem控制寄存器

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

WAIT1: MOV DX,3FDH;IN AL,DX TEST AL,1EH;JNZ ERROR

;TEST AL,01H;;JNZ SEND;

TEST AL,20H;JZ WAIT1

SEND: MOV AH,1 INT 21H;CMP AL,21H;JZ EXIT

MOV DX,3F8H;OUT DX,AL JMP WAIT1;

ERROR: MOV DX,3FDH;IN AL,DX MOV DL,'?';MOV AH,02H INT 21H JMP WAIT1

EXIT: MOV AH,4CH INT 21H CODE ENDS END START

写中断允许寄存器,屏蔽所有中断读线路状态寄存器 出错否 接收数据就绪否 发送 发送寄存器空否,不空,返回等待 读键盘 是'!'? 是,返回操作系统

不是,则发送 返回等待 出错则清除线路状态寄存器 显示'?' 26

;

(2)接收端:

CODE SEGMENT ASSUME CS:CODE START: MOV AL,80H;8250初始化 MOV DX,3FBH OUT DX,AL

MOV AX,30H;MOV DX,3F8H OUT DX,AL;MOV AL,AH INC DX MOV DX,3F9H OUT DX,AL;

MOV AL,0AH MOV DX,3FBH OUT DX,AL;

MOV AL,03H MOV DX,3FCH OUT DX,AL;

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

WAIT1: MOV DX,3FDH;IN AL,DX TEST AL,1EH;JNZ ERROR

TEST AL,01H;JNZ RECEIVE;

;TEST AL,20H;;JZ WAIT1 JMP WAIT1;

RECEIVE: MOV DX,3F8H;IN AL,DX

写除数 写入除数低字节 写入除数高字节 写入线路控制寄存器 写入Modem控制寄存器 写中断允许寄存器,屏蔽所有中断读线路状态寄存器 出错否 接收数据就绪否 转接收 发送寄存器空否,不空,返回等待 均返回等待 读接收数据 27

AND AL,01111111B;保留位数据 CMP AL,21H;是'!'? JNZ CHAR INT 21H CHAR: PUSH AX MOV DL,AL MOV AH,2;显示接受字符 INT 21H POP AX JMP WAIT1;返回等待

ERROR: MOV DX,3FDH;出错则清除线路状态寄存器 IN AL,DX MOV DL,'?';显示'?' MOV AH,02H INT 21H JMP WAIT1 CODE ENDS END START

MOV AH,4CH;返回操作系统

五.实验遇到的问题和解决方法

问题:当按下一个字符时,屏幕上会显示两个字符。其中一个不正确。解决方法:显示字符时,用6号功能代替2号功能。这样问题就得到了解决。

六、课程综合实验(抢答器)

一、实验目的

1、了解微机化竞赛抢答器的基本原理。

2、进一步学习使用并行接口。

二、实验内容

图5-4为竞赛抢答器(模拟)的原理图,逻辑开关K0~K7代表竞赛抢答按钮0~7号,当某个逻辑电平开关置“1”时,相当某组抢答按钮按下。在七段数码管 上将其组号(0~7)显示出来,并使喇叭响一下。从键盘上按空格键开始下一轮抢答,按其它键程序退出。

图 5-4

8255动态分配地址: 控制寄存器: 0C40BH

A口地址: 0C408H C口地址: 0C40AH

三.程序流程图和程序清单

DATA SEGMENT LIST DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DATA ENDS

STACK1 SEGMENT STACK DW 100H DUP(0)STACK1 ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX;-------------------MOV DX,0C40BH MOV AL,89H OUT DX,AL;对8255进行初始化 L0: MOV DX,0C40AH IN AL,DX;读C口状态 CMP AL,0;如果为0则循环 JZ L0

MOV BL,0 L1: INC BL SHR AL,1;将AL逻辑右移 JNC L1 DEC BL MOV AL,BL;求出组号

MOV BX,OFFSET LIST;七段显示代码表的首址送BX AND AX,00FFH;屏蔽AX高字节,组号 ADD BX,AX;形成显示字符的地址 MOV AL,[BX];取出字符送AL MOV DX,0C408H OUT DX,AL;送到A口输出显示

MOV DL,7 MOV AH,2 INT 21H;响铃功能调用

MOV AH,01H INT 21H CMP AL,20H;当为空格时跳到CLOSE JZ CLOSE MOV AH,4CH INT 21H CLOSE: MOV AL,0 MOV DX,0C408H OUT DX,AL JMP L0

CODE ENDS END START 四.实验遇到的问题和解决方法

1.问题:读取C口状态后不知如何将其转换为相应的组号

解决方法:对AL进行逻辑右移,通过判断CF是否为1,来计算相应的组号(具体方法见程序)

2.问题:数码管始终显示‘7’

解决方法:调用响铃程序的位置出现错误。通过先进行组号显示,再调用响铃程序,问题得到了解决。

七、自主设计实验——LED显示

一、实验内容

1.按图连接好电路,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。

2.七段数码管的字型代码表如下表:

二、程序流程图

三、实验源程序 data segment ioport equ 0c400h-0280h io8255a equ ioport+288h io8255b equ ioport+28bh led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh mesg1 db 0dh,0ah,'Input a num(0--9h):',0dh,0ah,'$' data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,io8255b

;使8255的A口为输出方式

mov ax,80h out dx,al sss: mov dx,offset mesg1;显示提示信息

mov ah,09h int 21h mov ah,01

;从键盘接收字符

int 21h cmp al,'0'

;是否小于0 jl exit

;若是则退出

cmp al,'9'

;是否大于9 jg exit

;若是则退出

sub al,30h

;将所得字符的ASCII码减30H mov bx,offset led;bx为数码表的起始地址

xlat

;求出相应的段码

mov dx,io8255a

;从8255的A口输出

out dx,al jmp sss;转SSS exit: mov ah,4ch

;返回DOS int 21h code ends end start

四、总结

通过自主设计实验,提升了运用已经学过的理论知识与实践的联系的能力,复习巩固了芯片的使用方法。

八、参考文献

1.戴胜华,张凡,盛珣华.微机原理与接口技术[M].北京:北京交通大学出版社, 202_.2.Barry B.Brey.intel系列微处理器结构、编程和接口技术大全[M].北京:机械工程出版社,1998.35

第五篇:数码转换 实验报告 微机原理

实验九

数码转换

一、实验目的

1、掌握计算机常用数据编码之间的相互转换方法。

2、进一步熟悉DEBUG软件的使用方法。

二、实验内容

1.ACSII码转换为非压缩型BCD码

编写并调试正确的汇编语言源程序,使之实现:设从键盘输入一串十进制数,存入DATA1单元中,按回车停止键盘输入。将其转换成非压缩型(非组合型)BCD码后,再存入DATA2开始的单元中。若输入的不是十进制数,则相应单元中存放FFH。调试程序,用D命令检查执行结果。

2.BCD码转换为二进制码

编写并调试正确的汇编语言源程序,使之将一个16位存储单元中存放的4位BCD码DATA1,转换成二进制数存入DATA2字单元中。调试程序,用D命令检查执行结果。3.十六进制数转换为ASCII码

编写并调试正确的汇编语言源程序,使之将内存DATA1字单元中存放的4位十六进制数,转换为ASCⅡ码后分别存入DATA2为起始地址的4个单元中,低位数存在低地址的字节中,并在屏幕上显示出来。

三、实验预习

1.复习材料中有关计算机数据编码部分的内容。2.按要求编写程序。

四、实验步骤

1.编辑源文件,经汇编连接产生EXE文件。2.用DEBUG调试、检查、修改程序。

五、实验内容

1.ACSII码转换为非压缩型BCD码 STACK SEGMENT PARA STACK 'STACK'

DB 256 DUP(?)

;为堆栈段留出256个字节单位

STACK ENDS DATA SEGMENT PARA 'DATA';定义数据段

DATA1 DB 32

;缓冲区最大长度

DB ? DB 32 DUP(?)DATA2 DB 32 DUP(?)DATA ENDS CODE SEGMENT

;定义代码段 ASSUME SS:STACK ASSUME CS:CODE ASSUME DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,DATA1

;规定:DX存放输入字符串的缓冲区首地址 MOV AH,0AH INT 21H

;字符串输入 AL=键入的ASCII码 LEA SI,DATA1 LEA DI,DATA2 INC SI MOV CL,[SI] INC SI LP1: MOV AL,[SI] SUB AL,30H CMP AL,0 JL LP2 CMP AL,9 JG LP2 MOV BL,AL MOV [DI],BL INC DI INC SI DEC CL JMP LP1 LP2: MOV AL,0FFH MOV BL,AL MOV [DI],BL INC DI INC SI DEC CL CL=CL-1 JNZ LP1 LP3: MOV AH,4CH INT 21H CODE ENDS END START

;DI存放DATA2首地址

;取输入字符串长度

;指向第一个输入字符

;输入的字符存为ASCII码,将其转换成十进制数

;若AL<0(AL-0<0),跳转到LP2

;若AL>9(AL-9>0),跳转到LP2

;将AL->BL

;将结果存到DATA2开始的单元中

;若输入的不是十进制数,在相应的单元存放FFH

;以字母开头的十六进制数前面需加'0'

;将AL->BL

;CL=0,执行LP3中的语句

2.BCD码转换为二进制码

DATA

SEGMENT

DATA1 DW 2497H

DATA2 DW ?

DATA

ENDS

CODE

SEGMENT

ASSUME SS:STACK,CS:CODE,DS:DATA

START:

MOV AX,DATA

MOV DS,AX

XOR BX,BX

;累加单元清0(BX=0)

MOV SI,0AH

;设置乘数10

MOV CL,4

;指4位BCD码

MOV CH,3

;循环次数=3 MOV AX,DATA1

;取十进制数

LP:

ROL AX,CL

;取数字

MOV DI,AX

;保存当前AX值

AND AX,0FH

;屏蔽高位

ADD AX,BX

;累加

MUL SI

MOV BX,AX

MOV AX,DI

DEC CH

;循环次数减1

JNZ LP

;以上完成循环三次

ROL AX,CL

;取个位数字

AND AX,0FH

;屏蔽高位

ADD AX,BX

;进行累加,直接将最后的累加结果放到AX中

MOV DATA2,AX

MOV AH,4CH

INT 21H

CODE

ENDS

END START

3.十六进制数转换为ACSII码 STACK

SEGMENT

DB 256 DUP(?)

STACK

ENDS

DATA

SEGMENT

DATA1 DB 24H,06DH

DATA2 DB 4 DUP(?)

;存放ASCII码

JUMP DB 4 DUP(?)

;4位十六进制数分别存放在DATA3的4个字节中

DATA ENDS

CODE

SEGMENT

ASSUME SS:STACK,DS:DATA,CS:CODE

START:

MOV AX,DATA

MOV DS,AX

LEA SI,DATA1

LEA DI,JUMP

MOV CL,2

;循环2次,取两次两位十六进制数

LP0:

MOV AL,[SI]

;取2位十六进制数

AND AL,0F0H

;低四位为零

ROR AL,4

;右移4位

相当于除以16

MOV [DI],AL

;高位数存放在高地址字节中

INC DI

MOV AL,[SI]

;取2位十六进制数

AND AL,0FH

;高四位为零

MOV [DI],AL

;低位数存放在低地址字节中

INC SI

INC DI

DEC CL

JNZ LP0

LEA SI,JUMP

LEA DI,DATA2

MOV CL,4

LP1:

MOV AL,[SI]

CMP AL,9

JG LP3

ADD AL,30H

JMP LP3

LP2:

ADD AL,37H

LP3:

MOV [DI],AL

INC DI

INC SI

DEC CL

JNZ LP1

MOV AH,09H

INT 21H

MOV DX,OFFSET DATA2

MOV AH,09H

INT 21H

MOV AH,4CH

INT 21H

CODE

ENDS

END START

;SI=JUMP的首地址偏移量

;DI=DATA2的首地址偏移量

;因为是四位十六进制数,所以设置为循环4次

;取JUMP中的十六进制数

;若AL>9(AL-9>0),跳转到LP3

;0~9H+30H=ASCII

;A~FH+30H=ASCII

;将ASCII码依次存入DATA2中

六、实验习题与思考

1.编程实现:从键盘上输入两位十六进制数,转换成十进制数后显示在屏幕上。STACK SEGMENT

DB

256 DUP(?)

STACK ENDS

DATA SEGMENT

DATA1 DB

5,?,2 DUP(?)

DATA2 DB

DUP(?)

DATA3 DB

DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME

SS:STACK,DS:DATA,CS:CODE

START:MOV

AX,DATA

MOV

DS,AX

LEA

DX,DATA1

MOV

AH,0AH

INT

21H

;输入字符串

LEA

SI,DATA1+2

LEA

DI,DATA2

MOV

CL,2

;将ASC码转换为十六进制数

LP1: MOV

AL,[SI]

SUB

AL,30H

CMP

AL,9

JA

LP2

MOV

[DI],AL

INC

DI

INC

SI

DEC

CL

JZ

LP3

JNZ

LP1

LP2: SUB

AL,7

MOV

[DI],AL

INC

DI

INC

SI

DEC

CL

JNZ

LP1

;将十六进制数转换成十进制数,并保存

LP3: LEA

DI,DATA2

MOV

AL,[DI]

MOV

BL,[DI+1]

MOV

CL,4

SHL

AL,CL

ADD

AL,BL

MOV

[DI],AL

LEA

SI,DATA3

XOR

AH,AH

MOV

CL,100

DIV

CL

;AH=AX%100,AL=AX/100

MOV

[SI],AL

;保存百位数

MOV

AL,AH

XOR

AH,AH

MOV

CL,10

DIV

CL

MOV

[SI+1],AL

;保存十位数

MOV

[SI+2],AH

;保存个位数

;屏幕显示十进制数

LP4: MOV

DL,[SI]

;取百位数送显

OR

DL,30H

MOV

AH,02H

INT

21H

MOV

DL,[SI+1]

;取十位数送显

OR

DL,30H

MOV

AH,02H

INT

21H

MOV

DL,[SI+2]

;取个位数送显

OR

DL,30H

MOV

AH,02H

INT

21H

MOV

AH,4CH

INT

21H

CODE ENDS

END

START

2.十进制数转换为七段码。

为了在七段显示器上显示十进制数,需要把十进制数转换为七段代码。转换可采用查表法。设需要转换的十进制数已存放在起始地址为DATA1区域中,七段代码转换表存放在起始地址为TABLE表中,转换结果存放到起始地址为DATA2区域。若待转换的数不是十进制数,则相应结果单元内容为00H。

STACK SEGMENT

DB

256 DUP(?)

STACK ENDS

DATA SEGMENT

DATA1 DB

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,'A','B','C','$'

TABLE DB

00H,40H,01H,79H,02H,24H,03H,30H,04H,19H,05H,12H,06H,02H, 07H,78H,08H,00H,09H,18H,0AH,08H,0BH,03H,0CH,46H,0DH,21H,0EH,06H,0FH,0EH

;实际数据定义必须在同一行

DATA2 DB

DUP(0)

COUNT EQU

DATA ENDS CODE SEGMENT

ASSUME SS:STACK,DS:DATA,CS:CODE

START: MOV

AX,DATA

MOV

DS,AX

LEA

SI,DATA1

LEA

BX,DATA2

LEA

DI,TABLE

XOR

AH,AH

LP1: MOV

AL,[SI]

;外循环DATA1指向下一个

INC

SI

MOV

CX,16

;内循环TABLE 16次

LP2: CMP

[DI],AL

JE

LP3

ADD

DI,COUNT

;内循环TABLE指向下一组

DEC

CX

JNZ

LP2

MOV

BYTE PTR[BX],00H 若不是十进制数,则结果保存为00H

INC

BX

CMP

AL,'$'

;设置结束标志

JNZ

LP1

JZ

LP4

LP3: MOV

AL,[DI+1]

MOV

[BX],AL

;转换结果保存在DATA2中

INC

BX

LEA

DI,TABLE

CMP

CL,0

JNZ

LP1

LP4: MOV

AH,4CH

INT

21H

CODE ENDS

END START

相关内容

热门阅读
随机推荐