微机原理实验报告.docx

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

微机原理实验报告.docx

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

微机原理实验报告.docx

微机原理实验报告

实验一可编程定时器/计数器(8253)

一、实验目的

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

2、掌握8253的编程方法

二、实验内容

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

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

 

三、编程分析

1、8253地址分析:

控制寄存器地址:

0C403H

计数器0地址:

04C400H

计数器1地址:

04C401H

CLK0连接时钟:

1MHz。

2、程序参考流程图

(2)

四、汇编语言程序

程序1

DATASEGMENT

NDB0BH

DATAENDS

STACK1SEGMENTPARASTACK

DB20DUP(0)

STACK1ENDS

CODESEGMENT

START:

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

MOVAX,DATA

MOVDS,AX

MOVAL,10H

MOVDX,0C403H

OUTDX,AL;写控制字

MOVAL,N

MOVDX,0C400H

OUTDX,AL;写入计数器0初值,初始化完成

READ:

MOVDX,0C400H

INAL,DX;读入计数值

CMPAL,09H

JLEASCI

ADDAL,07H

ASCI:

ADDAL,30H;转化成ascii码

MOVDL,AL

MOVAH,02H

INT21H;显示计数值

MOVDL,0DH;加回车符,只显示一个符号

INT21H

MOVDL,0FFH;有键按下回DOS

MOVAH,06H

INT21H

JNZEXIT

JMPREAD

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

程序2

CODESEGMENT

ASSUMECS:

CODE

START:

MOVDX,0C403H

MOVAL,00110110B;计数器0方式3产生方波

OUTDX,AL

MOVDX,0C400H

MOVAX,1000;计数器0计数值1000

OUTDX,AL

MOVAL,AH

OUTDX,AL

MOVDX,0C403H

MOVAL,01110110B;计数器1方式3

OUTDX,AL

MOVDX,0C401H

MOVAX,1000;计数器1送入记数值1000

OUTDX,AL

MOVAL,AH

OUTDX,AL

MOVDL,0FFH;有按键时结束

MOVAH,06H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

 

实验二交通灯控制实验(8255)

一、实验目的

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

2、掌握8253的编程方法

二、实验内容

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

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

 

三、编程分析

1、8255地址分析:

控制寄存器地址:

0C40BH

A口地址:

04C408H

C口地址:

04C40AH

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

(1)南北路口的绿灯、东西路口的红灯同时亮三秒;

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

(3)南北路口的红灯、东西路口的绿灯同时亮三秒;

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

(5)转

(1)重复。

3、C口置数分析

由于发光二极管是共阴极相连,所以若要其发亮应给高电平;黄灯闪烁是让其不断交替亮灭来实现;同时分析可知只要有绿灯亮,灯就会持续亮三秒,黄灯亮就会闪烁三次。

4、程序设计流程图

N

四、汇编语言程序

STACKSEGMENT

DB100DUP(0)

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK

DYPROCNEAR

PUSHAX

PUSHCX

MOVAX,0FFFFH;延时程序

MOVCX,02FFFH

L0:

DECAX

JNZL0

LOOPL0

POPCX

POPAX

RET

DYENDP

START:

MOVDX,0C40BH

MOVAL,10000000B

OUTDX,AL

MOVDX,0C40AH

MOVBL,6H;设置延迟3秒

L1:

MOVAL,00100100B;南北绿灯亮,东西红灯亮

OUTDX,AL

CALLDY;调用延迟子程序

DECBL

JNZL1

MOVBL,4H;设置第二次闪烁3次

L2:

MOVDX,0C40AH

MOVAL,01000100B;南北黄灯亮,东西红灯亮

OUTDX,AL

CALLDY

MOVAL,00000100B;南北黄灯灭,东西红灯亮,实现要求闪的功能

OUTDX,AL

CALLDY

DECBL

JNZL2

MOVBL,6H;第三次设置亮灭时间为3秒

L3:

MOVAL,10000001B;南北黄灯亮,东西红灯亮

OUTDX,AL

CALLDY

DECBL

JNZL3

MOVBL,4H

L4:

MOVAL,10000010B;南北红灯亮,东西黄灯亮

OUTDX,AL

CALLDY

MOVAL,10000000B;南北红灯亮,东西黄灯灭,实现闪的功能

OUTDX,AL

CALLDY

DECBL

JNZL4

MOVDL,0FFH;判断是否有键按下,结束程序

MOVAH,06H

INT21H

JZSTART;没有键按下,进入下一次循环

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

五、实验现象及分析:

红黄绿灯变化规律如下:

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

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

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

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

依次重复。

六、实验出现错误及感想:

延时过短,经计算后采用新的循环数值,得到预期结果

此程序条理很清晰,调试非常顺利。

两个实验的独自完成,使我对汇编语言产生了浓厚的兴趣,对之后的实验也有了信心。

 

实验三竞赛抢答器(8255)

一、实验目的

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

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

二、实验内容

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

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

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

三、编程分析

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

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

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

2、计算组号的算法:

组号=C口数据连续除以2得到商为零的除法运算次数

MOVAH,0

MOVDL,2

MOVCL,0

JISUAN:

DIVDL

INCCL

CMPAL,0

JNZJISUAN

DECCL

MOVAL,CL

3、响铃的DOS功能调用:

MOVDL,7;响铃ASCII码为07

MOVAH,2

INT21H

4、程序设计流程图

四、汇编语言程序

DATASEGMENT

LISTDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DATAENDS

STACK1SEGMENTPARASTACK

DB20DUP(0)

STACK1ENDS

CODESEGMENT

START:

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSETLIST

MOVDX,0C40BH

MOVAL,10001001B

OUTDX,AL;8255初始化

INPUT:

MOVDX,0C408H

MOVAL,0FFH

OUTDX,AL

MOVDX,0C40AH

INAL,DX;C口输入

CMPAL,0

JZINPUT

MOVAH,0

MOVDL,2

MOVCL,0

JISUAN:

DIVDL

INCCL

CMPAL,0

JNZJISUAN

DECCL

MOVAL,CL;计算出组号

XLAT

MOVDX,0C408H

OUTDX,AL;查表并从A口输出

MOVDL,7

MOVAH,2

INT21H;响铃

MOVAH,01H

INT21H

CMPAL,'';接收一字符

JZINPUT

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

五、实验现象及分析:

初始状态为数码管全亮。

拨下任一开关后,铃响,同时数码管显示该组的组号。

按空格键,恢复到初始状态

六、实验出现错误及感想:

1、组号的计算是一个难点,在这个算法的设计上花费了较多的时间。

我用除2循环实现要求之后,经过与别人交流,发现用移位算法更为直观,方便理解。

但是除以2与右移一位本来是等价的,所以这两种算法本质还是相同的。

2、第一次运行时发生故障,抢答后无法恢复初始状态。

经检查发现相关代码位置有误,重新调整之后实现预想结果。

 

实验四8250串行通信实验

一、实验目的

1、掌握串行接口芯片8250的基本原理和编程方法

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

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

二、实验内容

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

2、自发自收实验:

将RS232C的DB9的电缆插头第2脚和第3脚短接,然后编程实现。

3、2台PC的串行通信:

用RS232C的DB9的电缆(交叉线)将两台机器连接,然后编程实现收发数据。

三、硬件连接

四、汇编语言程序

程序1-自发自收

CODESEGMENT

ASSUMECS:

CODE

START:

MOVAL,10000000B;8250初始化,设DLAB=1

MOVDX,3FBH

OUTDX,AL

MOVAX,30H;写入除数低字节

MOVDX,3F8H

OUTDX,AL

MOVAL,AH;写入除数高字节

MOVDX,3F9H

OUTDX,AL

MOVAL,00001010B;7位数据,1位停止,奇校验

MOVDX,3FBH

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

MOVAL,00010000B;自检控制

MOVDX,3FCH

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

MOVAL,0

MOVDX,3F9H

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

WAIT_FOR:

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

INAL,DX

TESTAL,00011110B;出错否

JNZERROR;出错,转ERROR

TESTAL,00000001B;接收数据就绪否

JNZRECEIVE;就绪,转接受

TESTAL,00100000B;发送寄存器空否,不空,返回等待

JZWAIT_FOR

MOVAH,1

INT21H;读键盘

MOVDX,3F8H;发送

OUTDX,AL

JMPWAIT_FOR;返回等待

RECEIVE:

PUSHCX

PUSHAX

MOVCX,02000H

T1:

MOVAX,0FFFFH

T2:

DECAX

JNZT2

LOOPT1;延时程序

MOVDX,3F8H;读接收数据

INAL,DX

ANDAL,01111111B;保留7位数据

CMPAL,03H;是Ctrl+C?

JNZCHAR

MOVAH,4CH;返回DOS

INT21H

CHAR:

PUSHAX

MOVDL,AL

MOVAH,2H;显示接收字符

INT21H

POPAX

JMPWAIT_FOR;返回等待

ERROR:

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

INAL,DX

MOVDL,'?

';显示'?

'

MOVAH,02H

INT21H

JMPWAIT_FOR

CODEENDS

ENDSTART

 

程序2-双机通信

发送部分:

CODESEGMENT

ASSUMECS:

CODE

START:

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

MOVDX,3FBH

OUTDX,AL

MOVAX,0030H

MOVDX,3F8H

OUTDX,AL;写入除数低字节

MOVAL,AH

MOVDX,3F9H

OUTDX,AL;写入除数高字节

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

MOVDX,3FBH

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

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

MOVDX,3FCH

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

MOVAL,0

MOVDX,3F9H

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

WAIT_FOR:

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

INAL,DX

TESTAL,00100000B;发送寄存器空否,不空,返回等待

JZWAIT_FOR

SEND:

MOVAH,1

INT21H

CMPAL,21H

JZEXIT

MOVDX,3F8H;读键盘,若是'!

',返回DOS,若不是,则发送

OUTDX,AL

JMPWAIT_FOR;返回等待

EXIT:

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

接收部分:

CODESEGMENT

ASSUMECS:

CODE

START:

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

MOVDX,3FBH

OUTDX,AL

MOVAX,0030H

MOVDX,3F8H

OUTDX,AL;写入除数低字节

MOVAL,AH

MOVDX,3F9H

OUTDX,AL;写入除数高字节

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

MOVDX,3FBH

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

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

MOVDX,3FCH

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

MOVAL,0

MOVDX,3F9H

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

WAIT_FOR:

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

INAL,DX

TESTAL,00000001B;接收数据就绪否

JNZRECEIVE;转接收

JMPWAIT_FOR;返回等待

RECEIVE:

MOVDX,3F8H;读接收数据

INAL,DX

ANDAL,01111111B;保留7位数据

CMPAL,21H;是'!

'?

JNZCHAR

MOVAX,4C00H;返回DOS

INT21H

CHAR:

PUSHAX

MOVDL,AL

MOVAH,2;显示接收字符

INT21H

POPAX

JMPWAIT_FOR;返回等待

CODEENDS

ENDSTART

五、实验现象及分析:

自发自收:

输入带屏幕显示字符后,屏幕上会出现一个相同的字符

双机通信:

发送机发出一个字符,接收机屏幕上会显示该字符。

当发送字符为“!

”时,程序停止运行

六、实验出现错误及感想:

1、自发自收由于要求和细节比较多,难度较大,因此参照课本上的例题编写程序。

最后的结果是输入一个字符时,屏幕上会几乎同时显示两个相同的字符。

为了使发送和接收的过程更为明显,在程序中接受字符之前加一段延时。

这样得到的最终结果是:

发出一个带屏幕显示的字符后,过1~2秒的时间,屏幕上会显示一个相同的字符。

2、双机通信的编写较为顺利,由于有了自发自收编写程序的经验,双机通信第一次运行就完好地实现了功能。

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

当前位置:首页 > 人文社科 > 法律资料

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

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