北京交通大学微机原理实验报告Word格式.docx

上传人:b****5 文档编号:20843115 上传时间:2023-01-26 格式:DOCX 页数:38 大小:821.80KB
下载 相关 举报
北京交通大学微机原理实验报告Word格式.docx_第1页
第1页 / 共38页
北京交通大学微机原理实验报告Word格式.docx_第2页
第2页 / 共38页
北京交通大学微机原理实验报告Word格式.docx_第3页
第3页 / 共38页
北京交通大学微机原理实验报告Word格式.docx_第4页
第4页 / 共38页
北京交通大学微机原理实验报告Word格式.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

北京交通大学微机原理实验报告Word格式.docx

《北京交通大学微机原理实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《北京交通大学微机原理实验报告Word格式.docx(38页珍藏版)》请在冰豆网上搜索。

北京交通大学微机原理实验报告Word格式.docx

STACK1

START:

MOVAX,DATA

MOVDS,AX

;

---------------INIT----------------

MOVDX,0ce0BH;

写控制字

MOVAL,80H

OUTDX,AL

L3:

MOVDX,0ce0AH

MOVAL,24H;

南北绿灯,东西红灯亮

OUTDX,AL

CALLDELAY

CALLDELAY;

长延时,3s左右

MOVBL,8

MOVAL,04H

L0:

XORAL,40H;

南北黄灯闪,东西红灯亮

延时

DECBL;

闪烁几次

JNZL0

CALLDELAY

MOVAL,81H;

南北红灯亮,东西绿灯亮

CALLDELAY;

MOVBL,9

MOVAL,80H

L1:

XORAL,02H;

南北红灯亮,东西黄灯闪

延时

DECBL

JNZL1;

MOVDL,0FFH

MOVAH,06H

INT21H

JZL3;

六号功能判断若无字符输入ZF=1继续循环

------------------------------

MOVAH,4CH

-----------延时函数------------

DELAY:

PUSHCX

PUSHDX

MOVCX,1FFFH

LOP1:

MOVDX,0FFFFH

LOP2:

DECDX

JNZLOP2

LOOPLOP1

POPDX

POPCX

RET

CODEENDS

ENDSTART

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

问题:

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

解决方法:

修改程序,通过利用异或和循环指令使绿灯灭、红灯亮后,黄灯口的状态从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)

NEQU0BH;

计数器初值,不大于0FH

CHLDB0AH,0DH,'

$'

;

换行

DW100DUP(0)

MOVDS,AX

--------------INIT----------------

MOVDX,0C403H;

控制寄存器地址

MOVAL,10H;

计数器0,低字节,方式0,二进制计数

OUTDX,AL;

写入控制字

MOVDX,0C400H

MOVAL,N

OUTDX,AL;

写入计数初值

MOVCL,N

MOVAL,0;

计数器0锁存

MOVDX,IO8253

MOVDX,0C400H

INAL,DX;

读取当前数值

CMPAL,CL

JNEL0;

若AL不等于CL,则继续到L0循环

DECCL;

更改CL值

MOVDL,AL

CMPDL,09H;

是0~9吗?

JLEASCI

ADDDL,07H;

是A~F

ASCI:

ADDDL,30H

MOVAH,02H;

单字符输出计数器当前值

MOVDX,OFFSETCHL;

输出字符串换行

MOVAH,09H

CMPCL,0

JNLL0;

CL不小于0时,继续循环

2)

STACK1SEGMENTSTACK

ASSUMECS:

STACK1

MOVDS,AX

MOVAL,36H

MOVDX,0C403H;

写计数器0控制字

MOVAX,1000;

写计数器0初值

MOVDX,0C400H

先写低字节后写高字节

MOVAL,AH

OUTDX,AL

-----------------------------------------------

MOVAL,76H

MOVDX,0C403H

写计数器1控制字

MOVDX,0C401H

MOVAL,AH;

CODEENDS

ENDSTART

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

计数初值没有显示出来

进行TD调试,发现逻辑上出现了问题。

修改程序,通过利用CMPAL,CLJNZL0来实现将所有的计数值都显示出来。

三、中断实验(纯DOS)

一、实验目的

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

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

二、实验原理与内容

1、实验原理

PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。

中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。

IBMPC、PC/XT机内有一片8259中断控制器对外可以提供8个中断源:

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

IRQ008H时钟

IRQ109H键盘

IRQ20AH保留

IRQ3OBH串行口2

IRQ40CH串行口1

IRQ50DH硬盘

IRQ60EH软盘

IRQ70FH并行打印机

8个中断源的中断请求信号线IRQ0~IRQ7在主机的62线ISA总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。

对于PC/AT及286以上微机内又扩展了一片8259中断控制,IRQ2用于两片8259之间级连,对外可以提供16个中断源:

52

IRQ8070H实时时钟

IRQ9071H用户中断

IRQ10072H保留

IRQ11O73H保留

IRQ12074H保留

IRQ13075H协处理器

IRQ14076H硬盘

IRQ15077H保留

PCI总线中的中断线只有四根,INTA#、INTB#、INTC#、INTD#,它们需要通过P&

P的设置来和某一根中断相连接才能进行中断申请。

2、实验内容

实验电路如图31,直接用手动产单脉冲作为中断请求信号(只需连接一根导线)。

要求每按一次开关产生一次中断,在屏幕上显示一次“TPCpcicardInterrupt”,中断10次后程序退出。

三、编程提示

1.由于9054的驱动程序影响直写9054芯片的控制寄存器,中断实验需要在纯DOS的环境中才能正常运行。

这里指的纯DOS环境是指微机启动时按F8键进入的DOS环境。

WINDOWS重启进入MSDOS方式由于系统资源被重新规划过,所以也不能正常实验。

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

(也可使用自动获取资源分配的程序取得中断号)

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

53

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

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

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

movdx,ioport_cent+68h;

设置tpc卡中9054芯片io口,使能中断

inax,dx

orax,0900h

outdx,ax

其中IOPORT_CENT是9054芯片寄存器组的I/O起始地址,每台微机可能都不同,编程时需要了解当前的微机使用哪段并进行设置,获取方法请参看本书结尾部分的介绍。

(也可使用自动获取资源分配的程序取得),+68H的偏移是关于中断使能的寄存器地址,设置含义如下:

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

设置tpc卡中9054芯片io口,关闭中断

andax,0f7ffh

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

MOVAL,20H

OUT20H,AL

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

四、参考流程图

五、参考程序程序名:

INT.ASM

386以上微机适用

纯dos下才能使用

tasm4.1或以上编译

datasegment

int_vectEQU071H;

中断0-7的向量为:

08h-0fh,中断8-15的向量为:

70h-77h

55

irq_mask_2_7equ011111011b;

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

irq_mask_9_15equ011111101b;

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

ioport_centequ0d800h;

tpc卡中9054芯片的io地址

csregdw?

ipregdw?

旧中断向量保存空间

irq_timesdw00h;

中断计数

msg1db0dh,0ah,'

TPCpcicardInterrupt'

0dh,0ah,'

msg2db0dh,0ah,'

Pressanykeytoexit!

'

msg3db0dh,0ah,'

PressDMCtointerrupt10timesandexit!

dataends

stackssegment

db100dup(?

stacksends

codesegment

assumecs:

code,ds:

data,ss:

stacks,es:

data

start:

EnableLocalInterruptInput

.386

cli

movax,data

movds,ax

moves,ax

movax,stacks

movss,ax

moval,int_vect;

保存原中断向量

movah,35h

int21h

movax,es

movcsreg,ax

movipreg,bx

movax,cs;

设置新中断向量

56

movdx,offsetint_proc

moval,int_vect

movah,25h

inal,21h;

设置中断掩码

andal,irq_mask_2_7

out21h,al

inal,0a1h

andal,irq_mask_9_15

out0a1h,al

movdx,offsetmsg2

movah,09h

movdx,offsetmsg3

movirq_times,0ah

sti

loop1:

cmpirq_times,0;

等待中断并判断中断10次后退出

jzexit

movah,1

int16h

jnzexit;

按任意键退出

jmploop1

exit:

cli

movbl,irq_mask_2_7;

恢复中断掩码

notbl

inal,21h

oral,bl

movbl,irq_mask_9_15

57

movdx,ipreg;

恢复原中断向量

movax,csreg

movax,4c00h

int_procprocfar;

中断处理程序

pushax

pushdx

pushds

decirq_times

movax,data;

Interrupttodo

movdx,offsetmsg1

moval,20h;

SendEOI

out0a0h,al

out20h,al

popds

popdx

popax

iret

int_procendp

codeends

四、模/数转换器

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

二、实验内容

1、实验电路原理图如图38。

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

启动IN0开始转换:

Out02980

读取转换结果:

In0298

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转换的程序可以为

MOVDX,口地址

OUTDX,AL;

启动转换

INAL,DX;

读取转换结果放在AL中

四、参考流程图

五、参考程序1:

AD_1.ASM

ioportequ0d400h-0280h

io0809aequioport+298h

code

movdx,io0809a;

启动A/D转换器

outdx,al

movcx,0ffh;

delay:

loopdelay

inal,dx;

从A/D转换器输入数据

movbl,al;

将AL保存到BL

movcl,4

shral,cl;

将AL右移四位

calldisp;

调显示子程序显示其高四位

moval,bl

andal,0fh

调显示子程序显示其低四位

movah,02

movdl,20h;

加回车符

movdl,20h

movah,06h;

判断是否有键按下

movdl,0ffh

jestart;

若没有转START

movah,4ch;

退出

dispprocnear;

显示子程序

movdl,al

cmpdl,9;

比较DL是否>

9

jleddd;

若不大于则为'

0'

-'

9'

加30h为其ASCII码

adddl,7;

否则为'

A'

F'

再加7

ddd:

adddl,30h;

显示

ret

dispendp

codeends

endstart

五、串行通讯

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

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

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

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

按照PC机串口自发自收的连接方法连线。

编写PC机自发自收串行通信程序,要求:

从键盘输入一个字符,将字符通过串口发送出去,再由此串口将字符接收回来并在屏幕上显示,实现自发自收。

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

按照PC机RS-232串口直接互连的方法连接两台PC机。

编写PC机直接互连串行通信程序;

要求:

由甲机键盘键入字符经串口发送给乙机,再由乙机通过串口接收字符并显示在屏幕上。

当键入感叹号“!

”,结束收发过程。

1)本实验为异步通信:

以字符为单位进行传送,每传送一个字符,以起始位作为开始标志,以停止位作为结束标志。

异步串行通信的工作过程是:

传送开始后,接收设备不断地检测传输线是否有起始位到来,当接收到一系列的“1”(空闲或停止位)之后,检测到第一个“0”,说明起始位出现,就开始接收所规定的数据位、奇偶校验位及停止位。

经过接收器处理,将停止位去掉,把数据位拼装成一字节数据,并且经奇偶校验无错误,才算是正确地接收到了一个字符。

当一个字符接收完毕,接收设备又继续测试传输线,监视“0”电平的到来(下一个字符的开始),直到全部数据接收完毕。

2)8250各部分功能说明

8250片内有10个寄存器,其中有几个是共用地址的,其识别由线路控制寄存器(LCR)的最高位DLAB来决定。

各寄

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1