NEUQ微机原理实验报告.docx
- 文档编号:5454831
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:22
- 大小:97.90KB
NEUQ微机原理实验报告.docx
《NEUQ微机原理实验报告.docx》由会员分享,可在线阅读,更多相关《NEUQ微机原理实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
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的使用方法,对汇编语言的设计和使用有了更进一步的了解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NEUQ 微机 原理 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)