NEUQ微机原理实验报告.docx

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

NEUQ微机原理实验报告.docx

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

NEUQ微机原理实验报告.docx

NEUQ微机原理实验报告

微机原理与接口技术

实验报告

 

学号:

姓名:

专业:

时间:

 

东北大学秦皇岛分校

【实验编号】

1

【实验名称】

8253可编程定时器/计数器

【实验目的】掌握8253的基本工作原理和编程方法。

【实验内容】

实验一:

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

程序框图:

程序清单:

Ioportequ0d400h-0280h

io8253aequioport+283h

io8253bequioport+280h

codesegment

assumecs:

code

start:

moval,14h;设置8253通道0为工作方式2,二进制计数

movdx,io8253a

outdx,al

movdx,io8253b;送计数初值为0FH

moval,0fh

outdx,al

lll:

inal,dx;读计数初值

calldisp;调显示子程序

pushdx

movah,06h

movdl,0ffh

int21h

popdx

jzlll

movah,4ch;退出

int21h

dispprocnear;显示子程序

pushdx

andal,0fh;首先取低四位

movdl,al

cmpdl,9;判断是否<=9

jlenum;若是则为'0'-'9',ASCII码加30H

adddl,7;否则为'A'-'F',ASCII码加37H

num:

adddl,30h

movah,02h;显示

int21h

movdl,0dh;加回车符

int21h

movdl,0ah;加换行符

int21h

popdx

ret;子程序返回

dispendp

codeends

endstart

实验二:

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

程序框图:

程序清单:

Ioportequ0d400h-0280h

io8253aequioport+280h

io8253bequioport+281h

io8253cequioport+283h

codesegment

assumecs:

code

start:

movdx,io8253c;向8253写控制字

moval,36h;使0通道为工作方式3

outdx,al

movax,1000;写入循环计数初值1000

movdx,io8253a

outdx,al;先写入低字节

moval,ah

outdx,al;后写入高字节

movdx,io8253c

moval,76h;设8253通道1工作方式2

outdx,al

movax,1000;写入循环计数初值1000

movdx,io8253b

outdx,al;先写低字节

moval,ah

outdx,al;后写高字节

movah,4ch;程序退出

int21h

codeends

endstart

【实验结果】

实验内容一:

计数初值由F变为0,一个周期红灯灭、绿灯亮一次。

实验内容二:

OUT1输出1Hz的方波,红绿灯交替闪烁。

【实验总结】

通过本次实验,掌握了8253的基本工作原理和编程方法,能够对8253进行初始化,进一步熟悉并掌握了汇编语言。

【实验编号】

2

【实验名称】

七段数码管显示实验

【实验目的】掌握数码管显示数字的原理

【实验内容】

1.静态显示

按下图连接好电路,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。

编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。

程序框图

 

程序清单:

实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。

datasegment

ioportequ0d400h-0280h

io8255aequioport+288h

io8255bequioport+28bh

leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh

mesg1db0dh,0ah,'Inputanum(0--9h):

',0dh,0ah,'$'

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,io8255b;使8255的A口为输出方式

movax,80h

outdx,al

sss:

movdx,offsetmesg1;显示提示信息

movah,09h

int21h

movah,01;从键盘接收字符

int21h

cmpal,'0';是否小于0

jlexit;若是则退出

cmpal,'9';是否大于9

jgexit;若是则退出

subal,30h;将所得字符的ASCII码减30H

movbx,offsetled;bx为数码表的起始地址

xlat;求出相应的段码

movdx,io8255a;从8255的A口输出

outdx,al

jmpsss;转SSS

exit:

movah,4ch;返回DOS

int21h

codeends

2.动态显示

按下图连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255C口的PC1,PC0。

编程在两个数码管上显示“56”

程序框图:

程序清单:

datasegment

ioportequ0d400h-0280h

io8255aequioport+28ah

io8255bequioport+28bh

io8255cequioport+288h

leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码

buffer1db5,6;存放要显示的个位和十位

bzdw?

;位码

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,io8255b;将8255设为A口输出

moval,80h

outdx,al

movdi,offsetbuffer1;设di为显示缓冲区

loop2:

movbh,02

lll:

movbyteptrbz,bh

pushdi

decdi

adddi,bz

movbl,[di];bl为要显示的数

popdi

moval,0

movdx,io8255a

outdx,al

movbh,0

movsi,offsetled;置led数码表偏移地址为SI

addsi,bx;求出对应的led数码

moval,byteptr[si]

movdx,io8255c;自8255A的口输出

outdx,al

moval,byteptrbz;使相应的数码管亮

movdx,io8255a

outdx,al

movcx,3000

delay:

loopdelay;延时

movbh,byteptrbz

shrbh,1

jnzlll

movdx,0ffh

movah,06

int21h

jeloop2;有键按下则退出

movdx,io8255a

moval,0;关掉数码管显示

outdx,al

movah,4ch;返回

int21h

codeends

endstart

3.动态显示(选作)

使用下图的电路,编程在两个数码管上循环显示“00-99”。

程序清单:

datasegment

ioportequ0d400h-0280h

io8255aequioport+28ah

io8255bequioport+28bh

io8255cequioport+288h

leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码

buffer1db0,0;存放要显示的十位和个位

bzdw?

;位码

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,io8255b;将8255设为A口输出

moval,80h

outdx,al

movdi,offsetbuffer1;设di为显示缓冲区

loop1:

movcx,0300h;循环次数

loop2:

movbh,02

lll:

movbyteptrbz,bh

pushdi

decdi

adddi,bz

movbl,[di];bl为要显示的数

popdi

movbh,0

movsi,offsetled;置led数码表偏移地址为SI

addsi,bx;求出对应的led数码

moval,byteptr[si]

movdx,io8255c;自8255A的口输出

outdx,al

moval,byteptrbz;使相应的数码管亮

movdx,io8255a

outdx,al

pushcx

movcx,3000;如果显示过快,可更改cx值为最大0ffffh

delay:

loopdelay;延时

popcx

movbh,byteptrbz

shrbh,1

jnzlll

looploop2;循环延时

movax,wordptr[di]

cmpah,09

jnzset

cmpal,09

jnzset

movax,0000

mov[di],al

mov[di+1],ah

jmploop1

set:

movah,01

int16h

jneexit;有键按下则转exit

movax,wordptr[di]

incal

aaa

mov[di],al;al为十位

mov[di+1],ah;ah中为个位

jmploop1

exit:

movdx,io8255a

moval,0;关掉数码管显示

outdx,al

movah,4ch;返回DOS

int21h

codeends

endstart

【实验结果】

实验内容一:

从键盘输入一位任意十进制数字(0~9),数码管上会显示这个数字。

实验内容二:

数码管显示数字“56”。

实验内容三:

数码管循环显示“00—99”。

【实验总结】

通过本次试验,掌握了数码管显示数字的原理,能够用汇编语言控制硬件,对汇编有了更深的理解。

 

【实验编号】

3

【实验名称】

交通灯控制实验

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

【实验要求】

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

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

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

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

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

(5)转

(1)重复。

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

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

程序框图:

 

程序清单:

datasegment

ioportequ0d400h-0280h

io8255aequioport+28ah

io8255bequioport+28bh

portc1db24h,44h,04h,44h,04h,44h,04h;六个灯可能

db81h,82h,80h,82h,80h,82h,80h;的状态数据

db0ffh;结束标志

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,io8255b

moval,90h

outdx,al;设置8255为C口输出

movdx,io8255a

re_on:

movbx,0

on:

moval,portc1[bx]

cmpal,0ffh

jzre_on

outdx,al;点亮相应的灯

incbx

movcx,20;参数赋初值

testal,21h;是否有绿灯亮

jzde1;没有,短延时

movcx,2000;有,长延时

de1:

movdi,9000;di赋初值5000

de0:

decdi;减1计数

jnzde0;di不为0

loopde1

pushdx

movah,06h

movdl,0ffh

int21h

popdx

jzon;没有,转到on

exit:

movah,4ch;返回

int21h

codeends

endstart

【实验结果】交通灯如实验要求中闪烁变化。

【实验总结】

通过本次实验,进一步掌握了对并行口的控制和使用。

【实验编号】

4

【实验名称】

模/数转换器

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

【实验内容】

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

程序框图:

 

程序清单:

Ioportequ0a400h-0280h

io0809bequioport+299h

codesegment

assumecs:

code

start:

movax,0012h;设屏幕显示方式为VGA640X480模示

int10h

andcx,0;cx为横坐标

draw:

movdx,io0809b;启动A/D转换器通道1

outdx,al

movbx,500;延时

delay:

decbx

jnzdelay

inal,dx;读入数据

movah,0

movdx,368;dx为纵坐标

subdx,ax

moval,0ah;设置颜色

movah,0ch;画点

int10h

cmpcx,639;一行是否满

jzstart;是则转start

inccx;继续画点

pushdx

movah,06h;是否有键按下

movdl,0ffh

int21h

popdx

jedraw;无,则继续画点

movax,0003;有恢复屏幕为字符方式

int10h

movah,4ch;返回DOS

int21h

codeends

endstart

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

程序清单:

Ioportequ0d400h-0280h

io0809aequioport+298h

codesegment

assumecs:

code

start:

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

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

movah,02

movdl,20h;加回车符

int21h

movdl,20h

int21h

pushdx

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

movdl,0ffh

int21h

popdx

jestart;若没有转START

movah,4ch;退出

int21h

dispprocnear;显示子程序

movdl,al

cmpdl,9;比较DL是否>9

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

adddl,7;否则为'A'-'F',再加7

ddd:

adddl,30h;显示

movah,02

int21h

ret

dispendp

codeends

endstart

【实验结果】

实验内容二:

改变滑动变阻器,屏幕上数字从0开始变大。

【实验总结】

通过本次实验,了解了模/数转换的基本原理,掌握了ADC0809的使用方法,对汇编语言的设计和使用有了更进一步的了解。

 

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

当前位置:首页 > 医药卫生 > 基础医学

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

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