微机原理实验报告讲解.docx

上传人:b****5 文档编号:7263644 上传时间:2023-01-22 格式:DOCX 页数:23 大小:912.99KB
下载 相关 举报
微机原理实验报告讲解.docx_第1页
第1页 / 共23页
微机原理实验报告讲解.docx_第2页
第2页 / 共23页
微机原理实验报告讲解.docx_第3页
第3页 / 共23页
微机原理实验报告讲解.docx_第4页
第4页 / 共23页
微机原理实验报告讲解.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

微机原理实验报告讲解.docx

《微机原理实验报告讲解.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告讲解.docx(23页珍藏版)》请在冰豆网上搜索。

微机原理实验报告讲解.docx

微机原理实验报告讲解

《微机原理实验》

课程实验研究性学习手册

姓名

学号

班级

微机教师

微机实验老师

时间2014年12月

上课时间10-13周

 

实验一:

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

一、实验目的

1、掌握并行接口8255的基本原理

2、掌握8255的编程方法

3、掌握利用X86汇编语言技巧

二、实验内容

如图,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。

编程使六个灯按交通灯变化规律燃灭。

三、编程提示

1、8255控制寄存器端口地址28BH

A口的地址288H

C口的地址28AH

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

(1)南北路口的绿灯、东西路口的红灯同时亮3秒左右。

(2)南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。

(3)南北路口的红灯、东西路口的绿灯同时亮3秒左右。

(4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。

(5)转

(1)重复。

四、参考流程图

五、实验源程序

CODESEGMENT

ASSUMECS:

CODE

START:

MOVDX,0EC0BH;8255初始化,写控制寄存器

MOVAL,10010000B;

OUTDX,AL

FIRST:

MOVDX,0EC0AH;C口地址

MOVAL,00100100B

OUTDX,AL;南北绿,东西红,写入C口

MOVCX,0;送入初值65536(FFFF+1)

MOVAX,4000H;软件长延时

DELAY1:

DECAX

JNZDELAY1

LOOPDELAY1;双重循环

MOVBL,5;黄灯闪5次

SECOND:

MOVDX,0EC0AH

MOVAL,01000100B

OUTDX,AL;南北黄,东西红,写入C口

MOVCX,3000H;写入初值

MOVAX,0100H;延时

LI1:

DECAX

JNZLI1

LOOPLI1;双循环

MOVDX,0EC0AH

MOVAL,00000100B;南北黄灭,写入C口

OUTDX,AL

MOVCX,3000H;写入初值

MOVAX,0100H;延时

WEN1:

DECAX

JNZWEN1;软件短延时

LOOPWEN1

DECBL

JNZSECOND;黄灯闪5次

THIRD:

MOVDX,0EC0AH;写入C口

MOVAL,10000001B

OUTDX,AL;南北红,东西绿,写入C口

MOVCX,0;送初值65536

MOVAX,4000H;软件长延时

DELAY2:

DECAX

JNZDELAY2

LOOPDELAY2

MOVBL,5;黄灯闪5次

FORTH:

MOVDX,0EC0AH;写入C口

MOVAL,10000010B

OUTDX,AL;南北红,东西黄,写入C口

MOVCX,3000H;送初值

MOVAX,0100H;短延时

LI2:

DECAX

JNZLI2;软件短延时

LOOPLI2

MOVDX,0EC0AH;C口

MOVAL,10000000B

OUTDX,AL;东西黄灭,写入C口

MOVCX,3000H;送初值

MOVAX,0100H;短延时

WEN2:

DECAX

JNZWEN2

LOOPWEN2

DECBL

JNZFORTH;黄灯闪5次

MOVDL,0FFH

MOVAH,06H

INT21H;执行键盘输入操作

JZFIRST;若没有输入,继续循环;若有输入,返回操作系统

MOVAH,4CH

INT21H;返回操作系统

CODEENDS

 

六、实验遇到的问题和解决方法

问题:

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

解决方法:

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

七、总结

这是第一次的微机原理实验,实验内容是I/O地址译码与交通灯控制实验。

以前的实验譬如数电实验,模电实验,信号系统研学,都是要么是硬件实验,要么是软件实验,这样又要连接电路,又要编写程序的实验这还是第一次做,因此这次实验对我来说是一次全新的体验。

通过这次实验使我更加深入地了解微机接口和汇编语言,对8255的芯片了解以及编程的学习不仅停留在书本上,自己的动手能力也得到了很大的提升,在实践的同时也进一步巩固了微机原理的基础知识。

 

实验二:

可编程定时器/计数器

一、实验目的

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

二、实验内容

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

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

 

三、编程提示

1.8253控制寄存器地址283H

计数器0地址280H

计数器1地址281H

CLK0连接时钟1MHZ。

2.参考流程图:

四、实验原理

8253具有3个独立的计数通道,采用减1计数方式。

在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。

当计数脉冲是已知周期的时钟信号时,计数就成为定时。

作计数器时,要求计数的次数可直接作为计数器的初值预置到减“1”计数器中。

8253中各通道可有6种可供选择的工作方式,以完成定时、计数或脉冲发生器等多种功能。

本实验用到的是方式0—计数结束中断。

在写入计数值N之后的第一个CLK的下降沿将N装入计数执行单元,待下一个CLK的下降沿到来且门控信号GATE为高电平时,通道开始启动计数。

在计数过程中,OUT一直保持低电平,直到计数达“0”时,OUT输出由低电平变为高电平,并且保持高电平。

8253动态分配地址:

控制寄存器:

0C403H

计数器0地址:

0C400H

计数器1地址:

0C401H

五、实验程序源代码

实验一:

DATASEGMENT

CHLDB0AH,0DH,'$';换行指令

DATAENDS

STACK1SEGMENTSTACK

DW100DUP(?

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK1,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAL,10H;设置控制字00010000B(计数器0,方式0,写两个字节,二进制计数)

MOVDX,0EC03H;写计数器0控制字

OUTDX,AL

MOVDX,0EC00H;将计数初值0FH写入计数器0

MOVAL,0FH

OUTDX,AL

MOVCL,0FH;给参考变量附初值0FH

LP1:

MOVAL,00H;将当前AL中存储的计数值锁存

MOVDX,0EC03H

OUTDX,AL

MOVDX,0EC00H;读计数值

INAL,DX

CMPCL,AL;执行一次循环后,CL减1。

而AL中计数值变换的速度由人手按键的速度决定。

所以,为了避免在该段时间里,在1MHz时钟作用下不断重复输出同一计数值,我们利用CL与锁存的AL值进行比较的方法,是每个计数值在屏幕上只显示一次

JNZLP1

DECCL

CALLDISP;调用DISP子程序

PUSHDX;将DX内容保存到堆栈段(因为DX装有端口地址所对应的值,在后续程序中要用到DX,所以先将值放入堆栈保存)

MOVDL,0FFH;执行按键输入操作

MOVAH,06H

INT21H

MOVDX,OFFSETCHL;输出换行

MOVAH,09H

INT21H

POPDX;将DX的内容推出栈段

INAL,DX

CMPAL,0

JNZLP1;如果DX的内容是0,就跳转到LP1

MOVAH,4CH;返回操作系统

INT21H

DISPPROCNEAR;定义一个名为DISP的子程序

PUSHDX;把DX的内容保存到堆栈段中

ANDAL,0FH;将AL寄存器的内容与0FH进行“与”运算,再把结果存入AL中

MOVDL,AL;将AL的值送入DL寄存器

CMPDL,9;比较DL中的值与9的大小

JLENUM;如果DL的值小于或等于9时,则跳转到NUM

ADDDL,7;将DL的值与7进行相加后,再送入DL中(在十六进制条件下,从10到15分别由A到F表示)

NUM:

ADDDL,30H;将DL的值与30H进行相加后,再送入DL中

MOVAH,02H;将02H存入AH

INT21H;调用DOS21中断

POPDX;将DX的内容推出栈段

RET;子程序在功能完成后返回调用程序继续执行

DISPENDP

CODEENDS

ENDSTART

实验二:

DATASEGMENT

XDB?

DATAENDS

STACK1SEGMENTSTACK

DW100DUP(?

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX

MOVDX,0EC03H

MOVAL,36H;计时器0控制字(计数器0,方式3,写两个字节,二进制计数)

OUTDX,AL;将AL的值送入DX端口

MOVAX,1000;写初值

MOVDX,0EC00H

OUTDX,AL

MOVAL,AH;将AX的高8位存入AL寄存器中

OUTDX,AL

MOVDX,0EC03H

MOVAL,76H;计数器1控制字(计数器1,方式3,写两个字节,二进制计数)

OUTDX,AL;将AL的值送入DX端口

MOVAX,1000

MOVDX,0EC01H

OUTDX,AL;写入计数器1低字节

MOVAL,AH;写入计数器1高字节

OUTDX,AL

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

六、总结

有了第一次微机实验的经验之后,我这次在实验前做了充足的预习工作,已经将程序写好,检查无误,只需要在实验室连接外部电路,调试程序即可,因此实验进行得很顺利。

这次实验是针对可编程定时时钟/计数器(8253),8253有六种工作方式,我在实验中主要用到了8253的工作方式0和工作方式3,此外调用了02号功能单字符输出显示,以及09号功能输出显示字符串,我在做宏汇编研究性学习的时候就已经研究过这两个功能的使用方法,所以这次使用得心应手,要注意的是:

执行02号功能必须进行ASSIC码转换,执行09号功能必须在字符串结尾写一个符号'$',表示字符串结束。

此外,在实验老师的指导下,我进一步熟悉了调试的方法,之前只会F8单步调试,但是在遇到很长的循环程序时,就不能单步调试的了,通过这次实验我学会了如何使用F4让程序进行到任意指定位置,这样就可以跳过循环继续执行代码。

 

实验三、PC机串行通信

一、实验目的

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

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

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

二、实验内容

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

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

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

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

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

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

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

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

当键入感叹号“!

”,结束收发过程。

三、实验原理及提示

1.连线图

2.8250寄存器地址

PC机自带两个串口,分为COM1和COM2,地址分别在3F8-3FFH,2F8-2FFH,接口芯片选用8250。

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

各寄存器的地址和格式如下所示:

 

四、程序源代码

1.自发自收程序:

DATASEGMENT

CHLDB0AH,0DH,'$';换行字符串

DATAENDS

STACK1SEGMENTSTACK;定义堆栈段

DW100DUP(0)

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX

;--------------INIT----------------

MOVDX,3FBH;8250初始化

MOVAL,80H;DLAB=1

OUTDX,AL

MOVAX,0CH;N=12BAUD=9600bps

MOVDX,3F8H;写除数寄存器,低位

OUTDX,AL

MOVAL,AH;写除数寄存器,高位

INCDX

OUTDX,AL

MOVAL,03H;八位数据,1停止,无校验

MOVDX,3FBH;线路控制REG

OUTDX,AL

MOVAL,0;屏蔽全部中断

MOVDX,3F9H

OUTDX,AL

WAIT1:

MOVDX,3FDH;读线路状态寄存器

INAL,DX

TESTAL,1EH;判断是否有错

JNZERROR

TESTAL,01H;判断是否收到

JNZRECEIVE

TESTAL,20H;判断发送端是否空

JZWAIT1

MOVDL,0FFH;六号功能调用读入待发送数据

MOVAH,06H

INT21H

JZWAIT1

MOVDX,3F8H;写发送REG

OUTDX,AL

JMPWAIT1;返回WAIT1

CHAR:

PUSHAX

MOVDL,AL;显示接收

MOVAH,02H

INT21H

POPAX

JMPWAIT1

ERROR:

MOVDX,3FDH

INAL,DX

MOVDL,'?

';对于错误显示'?

"

MOVAH,02H

INT21H

JMPWAIT1

RECEIVE:

MOVDX,3F8H

INAL,DX;读数据接收寄存器

CMPAL,'!

';判断是否结束

JNECHAR

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

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2.两台PC机间RS-232串口通信:

(1)发送端:

CODESEGMENT

ASSUMECS:

CODE

START:

MOVAL,80H;8250初始化,设DLAB=1

MOVDX,3FBH

OUTDX,AL

MOVAX,30H

MOVDX,3F8H

OUTDX,AL;写入除数低字节

MOVAL,AH

INCDX

OUTDX,AL;写入除数高字节

MOVAL,0AH;7位数据,1位停止,奇校验

MOVDX,3FBH

OUTDX,AL;写入线路控制寄存器

MOVAL,03H;请求发送、数据终端就绪:

00000011

MOVDX,3FCH

OUTDX,AL;写入Modem控制寄存器

MOVAL,0

MOVDX,3F9H

OUTDX,AL;写中断允许寄存器,屏蔽所有中断

WAIT1:

MOVDX,3FDH;读线路状态寄存器

INAL,DX

TESTAL,1EH;出错否

JNZERROR

TESTAL,01H;接收数据就绪否

JNZSEND;发送

TESTAL,20H;发送寄存器空否,不空,返回等待

JZWAIT1

SEND:

MOVAH,1

INT21H;读键盘

CMPAL,21H;是'!

'?

JZEXIT;是,返回操作系统

MOVDX,3F8H;不是,则发送

OUTDX,AL

JMPWAIT1;返回等待

ERROR:

MOVDX,3FDH;出错则清除线路状态寄存器

INAL,DX

MOVDL,'?

';显示'?

'

MOVAH,02H

INT21H

JMPWAIT1

EXIT:

MOVDX,3F8H

OUTDX,AL

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

 

(2)接收端:

CODESEGMENT

ASSUMECS:

CODE

START:

MOVAL,80H;8250初始化

MOVDX,3FBH

OUTDX,AL

MOVAX,30H;写除数

MOVDX,3F8H

OUTDX,AL;写入除数低字节

MOVAL,AH

INCDX

MOVDX,3F9H

OUTDX,AL;写入除数高字节

MOVAL,0AH

MOVDX,3FBH

OUTDX,AL;写入线路控制寄存器

MOVAL,03H

MOVDX,3FCH

OUTDX,AL;写入Modem控制寄存器

MOVAL,0

MOVDX,3F9H

OUTDX,AL;写中断允许寄存器,屏蔽所有中断

WAIT1:

MOVDX,3FDH;读线路状态寄存器

INAL,DX

TESTAL,1EH;出错否

JNZERROR

TESTAL,01H;接收数据就绪否

JNZRECEIVE;转接收

TESTAL,20H;发送寄存器空否,不空,返回等待

JZWAIT1

JMPWAIT1;均返回等待

RECEIVE:

MOVDX,3F8H;读接收数据

INAL,DX

ANDAL,01111111B;保留位数据

CMPAL,21H;是'!

'?

JNZCHAR

MOVAH,4CH;返回操作系统

INT21H

CHAR:

PUSHAX

MOVDL,AL

MOVAH,2;显示接受字符

INT21H

POPAX

JMPWAIT1;返回等待

ERROR:

MOVDX,3FDH;出错则清除线路状态寄存器

INAL,DX

MOVDL,'?

';显示'?

'

MOVAH,02H

INT21H

JMPWAIT1

CODEENDS

ENDSTART

五、实验总结

在这次实验中,PC机RS-232串口自发自收实验进行得比较顺利,但是在两台PC机间RS-232串口通信时,遇到了问题:

实验题目要求从键盘输入“!

”时,结束双机通信,可是我作为发送端可以在输入感叹号时立即结束通信并返回DOS,而对方接收端确认就处于等待接收的状态。

一开始,我认为一定是接收端的程序有漏洞,反复检查与调试运行都没有发现问题,然后冷静下来重新审查全部程序,发现竟然是发送端的错误,当判断出此刻输入的是感叹号时,没有将感叹号发送给对方,就立即结束了发送程序,接收方一直接收不到代表终止通信命令的感叹号,所以一直在等待接收。

由此我认识到排查错误时一定要全面考虑,错误的发生点不一定是错因的根节点,某一环节出现错误或是有所遗漏,即使不会对当前部分有影响,也会埋下隐患,对其他环节造成不利影响,尤其是通信过程每一环节都要做到面面俱到,万无一失,才能保证提供可靠的通信质量。

 

实验四:

竞赛抢答器

一、实验目的

通过本实验锻炼接口技术完成一个较大的综合设计,学会综合使用本课程中的接口芯片、中断、定时、DOS功能调用等知识,学会多种接口的配合使用,掌握软件、硬件协同工作,掌握微机原理与接口技术的综合应用。

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

(2)掌握微机通过8255A控制七段数码管的原理。

(3)掌握并行接口8255、中断、定时、D0S功能综合应用。

二、实验内容

图为竞赛抢答器(模拟)的原理图,逻辑开关K0~K7代表竞赛抢答按钮0~7号,当某个逻辑电平开关置“1”时,相当某组抢答按钮按下。

在七段数码管上将其组号(0~7)显示出来,并使喇叭响一下。

从键盘上按空格键开始下一轮抢

答,按其它键程序退出。

设置8255为C口输入、A口输出,读取C口数据,若为0表示无人抢答,若不为0则有人抢答。

根据读取数据可判断其组号。

从键盘上按空格键开始下一轮抢答,按其它键程序退出。

响铃的DOS功能调用:

MOVDL,7;响铃ASCII码为07

MOVAH,2

INT21H

二、实验流程图

四、实验源代码

DATASEGMENT

LISTDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;共阴极数码管的0~9的LED显示器七段显示代码

DATAENDS

STACK1SEGMENTSTACK

DW100HDUP(0)

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX;数据段段基值送入DS寄存器

MOVDX,0EC0BH

MOVAL,89H;10001001B,即A口方式0,A口输出,C口输入

OUTDX,AL;对8255进行初始化

L0:

MOVDX,0EC0AH

INAL,DX;读C口状态

CMPAL,0;如果为0则循环

JZL0

;如果开关K0~K8状态发生改变,那么便跳出上述循环,进入如下程序

MOVBL,0

L1:

INCBL

SHRAL,1;将AL逻辑右移

JNCL1

DECBL

MOVAL,BL;求出开关号码

MOV

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

当前位置:首页 > 小学教育 > 其它课程

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

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