微机接口实验报告.docx
《微机接口实验报告.docx》由会员分享,可在线阅读,更多相关《微机接口实验报告.docx(30页珍藏版)》请在冰豆网上搜索。
微机接口实验报告
微机原理与接口技术
系别
专业
班级
姓名
学号
指导教师
学年第学期
实验一
1、实验目的:
寻找两个字符串中不同的字符
2、源程序代码:
datasegment//ds数据段data为段名
xdb“hello,world!
$”
dataends//data为段名
extrasegment
ydb“hello,world!
$”
extraends
codesegment//伪指令
assumecs:
code,ds:
data,es:
extra//cs与code关联,es与extra关联
start:
movax,data//符号地址送段寄存器
movds,ax//ds赋初值
movax,extra
moves,ax//将ax的内容送到es,es内容不变
leasi,x//取x的有效地址指向si
leadi,y//取y的有效地址指向di
movcx,0ch//cx=0ch
cld//df=0
repzcmpsb//如果ds:
si和es:
di所指向的两个字节相等,则继续比较。
所以如果相等的话,就停止循环。
jcxzexit//防止零作除数,即数组是空数组
decsi//si-1
decdi//di-1
print:
movdl,byteptr[si]//[si]以字节单位存入dl中
movah,02h
int21h//dos中断显示字符
movdl,byteptres:
[di]//将dl中的数据送入以es为基址,di为偏移量所指的地址中去,以字节为单位
movah,02h
int21h//dos中断显示字符
exit:
movah,4ch//返回dos
int21h
codeends//代码段结束
endstart//整个程序结束
3、实验流程图:
4、程序运行结果:
5、实验感想:
这个实验的关键是找两个字符串中的不同的字符,实验过程中需要定义两个不同的字符串。
实验二
1、实验目的:
灵活运用汇编语言
2、实验内容:
BCD码变量定义如下
XDB1234H
YDB5678H
ZDB
完成Z=X+Y,并显示X,Y,Z
3、
程序流程图:
4、源程序代码:
datasegment//ds数据段data为段名
XDW1234H
YDW5678H
ZDW?
dataends//data为段名
codesegment//伪指令
assumecs:
code,ds:
data
start:
movax,data//送符号地址送段寄存器
movds,ax//将通用寄存器ax的内容送入cpu的ds段寄存器
leasi,x//取x的有效地址指向si
leadi,y//取y的有效地址指向di
leabx,z//取x的有效地址指向bx
movcx,02h//(cx)=02h
clc/清除cf位
pushf//sp<-sp-2
lopx:
popf//sp<-sp+2
moval,byteptr[si]//[si]以字节单位存入al中
movdl,byteptr[di]//[di]以字节单位存入di中
adcal,dl//al+dl带单位存入al
daa//将al的内容调整为2位组合型的二进制
pushf//sp<-sp-2
movbyteptr[bx],al//al存入bx中并强制转换为字符单元
incsi//si跳转到下一个字符
incdi//di跳转到下一个字符
incbx//bx跳转到下一个字符
looplopx//cx减1
leasi,z//取z的有效地址指向si
movdx,[si]//[si]送入dx
movbx,04h//(bx)=04h
movcl,0ch//(cl)=0ch
print:
rordx,cl//dx循环右移cl
movbp,dx//dx送入bp
anddx,000fh//有0为0
adddx,30h//将dx加上30h并传入dx
movah,02h
int21h//dos中断显示字符
movdx,bp//bp送入dx
decbx//bx-1
jnzprint//bx不等于0时继续输出
exit:
movah,4ch
int21h//返回DOS
codeends//代码段结束
endstart//整个程序结束
5、程序运行结果:
6、实验感想:
这个实验没什么复杂的地方,把书上的原理搞懂了问题也就不大了。
实验三
1、实验目的:
流水灯
2、源程序代码:
inportequ0ff00h-280h
inportaequinport+288h
inportctequinport+28bh
codesegment
assumecs:
code
start:
xorax,ax
xordx,dx
moval,80h
movdx,inportct
outdx,al
moval,00h
stc
movdx,inporta
lop:
rclal,1
outdx,al
calldelay
jmplop
delayprocnear
movbx,03fffh
x2:
movbp,0ffffh
x1:
decbp
jnzx1
decbx
jnzx2
ret
delayendp
movah,4ch
int21h
codeends
endstart
3、实验内容:
灯循环依次点亮
4、接口连接:
红绿灯接线:
电源输出J5与开关上的J0相接
J8与计数器上的J0相接
32JHP上的JD2与计数器上的JD相连
计数器上的PA与开关上的JL1相接
计数器上的PB与开关上的JK相接
复位RST与计数器RST相接
计数器32JHP
A0A0
A1A1
8255CSY1
/WRIOW
/RDIOR
5、心得体会:
通过分析引脚来进行连线,就能清楚地了解接口之间如何接
实验四
一、实验目的
通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。
二、实验内容
1.如图16-1,L8、L7、L6作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。
编程使六个灯按交通灯变化规律亮灭。
2.L0对应东西路口绿灯,L1对应东西路口黄灯,L2对应东西路口红灯;L6对应南北路口绿灯,L7对应南北路口黄灯,L8对应南北路口红灯。
三、编程提示
1.十字路口交通灯的变化规律要求:
(1)南北路口的绿灯、东西路口的红灯同时亮30秒左右。
(2)南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。
(3)南北路口的红灯、东西路口的绿灯同时亮30秒左右。
(4)南北路口的红灯继续亮,同时东西路口的黄灯闪烁若干次。
(5)转
(1)重复。
2.由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不同,编程时需要了解当前的微机使用那段IO地址并进行设置,获取方法见《用户手册》第五章节5.3第10~12点中的介绍。
下面的程序JTD.ASM(在文件夹“ASM_汇编例程”中)是需要用户自己根据查找到的DVCC卡的I/O基址替换到程序中带下划线的位置。
四、实验流程图
五、实验代码
datasegment
ioportequ0ff00h-0280h
io8255aequioport+288h
io8255bequioport+289h
io8255cequioport+28ah
io8255ctequioport+28bh
dataends
codesegment
assumecs:
code,ds:
data
start:
xorax,ax
xordx,dx
movax,data
movds,ax
movdx,io8255ct
moval,80h
outdx,al
movdx,io8255c;全红
moval,24h
outdx,al
movdx,io8255a
moval,09h
outdx,al
calldelay
ok:
movdx,io8255c;东西绿,南北红
moval,64h
outdx,al
movdx,io8255a
moval,02h
outdx,al
calldelay
movdx,io8255c;东西黄,南北红
moval,0a4h
outdx,al
movdx,io8255a
moval,02h
outdx,al
calldelay
movdx,io8255c;东西红,南北绿
moval,09h
outdx,al
movdx,io8255a
moval,09h
outdx,al
calldelay
movdx,io8255c;东西红,南北黄
moval,12h
outdx,al
movdx,io8255a
moval,09h
outdx,al
calldelay
jmpok
delayprocnear
movbp,0aff0h
x2:
movbx,0ffffh
x1:
decbx
jnzx1
decbp
jnzx2
ret
delayendp
codeends
endstart
六、心得体会
了解了芯片的引脚构造组成,在连接电路图时遇到的了麻烦,没有试验指导书对引脚连线还是不会的,通过老师的示范有所了解,自己动手能连接电路并且实现了端口灯的控制这一应用。
实验五
1.实验内容:
交通灯
2.实验分析:
全红L11L10L9L8L7L6L5L4L3L2L1L0
100100100100
C口:
24H
A口:
09H
东西绿南北红
L11L10L9L8L7L6L5L4L3L2L1L0
101001100100
C口:
64H
A口:
02H
东西黄南北红
L11L10L9L8L7L6L5L4L3L2L1L0
001010100110
C口:
0A4H
A口:
02H
东西红南北绿
L11L10L9L8L7L6L5L4L3L2L1L0
100100001001
C口:
09H
A口:
09H
东西红南北黄
L11L10L9L8L7L6L5L4L3L2L1L0
100100010010
C口:
12H
A口:
09H
3实验代码
datasegment
ioportequ0ff00h-0280h
io8255cequioport+28ah
io8255kequioport+28bh
portc1db24h,44h,04h,44h,04h,44h,04h;六个灯可能
db81h,82h,80h,82h,80h,82h,80h;的状态数据
db0ffh;结束标志
dataends
codesegment
assumecs:
code,ds:
data
start:
movcx,3000
delay:
loopdelay
movax,data
movds,ax
movdx,io8255k
moval,80h
outdx,al
movdx,io8255c
re_on:
movbx,0
on:
moval,portc1[bx]
cmpal,0ffh
jzre_on
outdx,al
incbx
movcx,2000h
testal,21h
jzde1
movcx,0ffffh
de1:
movdi,0ffffh
de0:
decdi
jnzde0
loopde1
pushdx
movah,06h
movdl,0ffh
int21h
popdx
jzon
exit:
movah,4ch;返回
int21h
codeends
endstart
4.电路连线:
(常用门电路)RST——(8255并行接口8253定时/计数器)RST
(DVCC-32JHP)IOR——(8255并行接口8253定时/计数器)/RD
(DVCC-32JHP)IOW——(8255并行接口8253定时/计数器)/WR
(DVCC-32JHP)A0——(8255并行接口8253定时/计数器)A0
(DVCC-32JHP)A1——(8255并行接口8253定时/计数器)A1
(DVCC-32JHP)Y1——(8255并行接口8253定时/计数器)8255CS
(DVCC-32JHP)JD1——(8255并行接口8253定时/计数器)JD
(电源输出)J8——(8255并行接口8253定时/计数器)J0
(电源输出)J5——(开关量)J0
(开关量)L8——(8255并行接口8253定时/计数器)PA0
(开关量)L9——(8255并行接口8253定时/计数器)PA1
(开关量)L10——(8255并行接口8253定时/计数器)PA4
(开关量)L11——(8255并行接口8253定时/计数器)PA3
(开关量)JL1——(8255并行接口8253定时/计数器)PC
5.心得体会:
通过这次实验了解到交通灯的控制原理,首先必须计算出在全红、东西绿南北红、东西黄南北红、东西红南北绿、东西红南北黄的几种情况下,C口与A口的值,再编写源代码,然后连接电路图,此次电路图也比前两次的复杂一点,要更细心。
实验六
一、实验目的
了解数/模转换器的基本原理,掌握DAC0832芯片的技术参数和使用方法。
二、实验内容
1.按图接线,DAC0832采用单缓冲方式,具有单双极性输出端(图中的DOUT1、DOUT),利用输出指令OUTDX,AL,编写一个小程序,然后单步运行,输出数据给DAC0832,用万用表测量单极性输出端DOUT1及双极性输出端DOUT的电压,验证数字量与电压之间的线性关系。
2.编程从DOUT输出产生正弦波,用示波器观察。
三、编程提示
1.8位D/A转换器DAC0832的口地址为290H,输入数据与输出电压的关系为:
DOUT1=-Uref×N/256
DOUT=2×Uref×N/256-5
其中,Uref表示参考电压,就是0832第8脚上的电压为+5V,由外部输入。
N表示输入到DA0832的数字量。
3.产生正弦波可根据正弦函数建一个正弦数字量表,取值范围为一个周期,表中数据个数在16个以上。
4、实验流程图
5、实验代码
inportequ0ff00h-280h
da0832equinport+288h
codesegment
assumecs:
code
start:
xorax,ax
xordx,dx
movdx,da0832
ok:
moval,00h
outdx,al
calldelay
moval,0feh
outdx,al
calldelay
jmpok
delayprocnear
movbx,0f000h
x2:
movbp,0f000h
x1:
decbp
jnzx1
decbx
jnzx2
ret
delayendp
codeends
endstart
6、实验体会
芯片0832能实现D/A数模转换,它和D/A转换不同。
它主要是将计算机的数字信号转换为外部设备中连续变化的模拟信号。
而且0832芯片两级缓冲寄存器,利用双缓冲功能,D/A寄存器保持当前要转换的数据,而在输入寄存器中保存下一次要转换的数据。
实验七
一、实验目的
了解模/数转换的基本原理,掌握ADC0809的使用方法。
二、实验内容
1.按图接线。
编写实验程序,用ADC0809完成模拟信号到数字信号的转换,输入的模拟量由系统板上一可调电位器产生0~5V,由Vout插孔和J11同时引出,将此电压送入ADC0809通道0(即IN0),IN0由J1插座引出。
启动A/D转换器,输入命令读取转换结果,验证输入电压与转换后数字量的关系。
注意:
ADC0809通道IN1~IN7由插座J2~J8引出。
2.编程采集IN0输入的电压,在屏幕上显示出转换后的数据(用16进制数)。
3.由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不同,编程时需要了解当前的微机使用那段IO地址并进行设置,获取方法见《用户手册》第五章节5.3第10~12点中的介绍。
下面的程序AD_1.ASM(在文件夹“ASM_汇编例程”中)是需要用户自己根据查找到的DVCC卡的I/O基址替换到程序中带下划线的位置(0C400H)。
三、实验提示
1.ADC0809包括一个8位的逐次逼近式的ADC部分,并提供一个8通道的模拟多路开关和联合寻址逻辑。
用它可以直接输入8个单端的模拟信号,分时进行A/D转换,在多点巡回检测、过程控制等领域应用非常广泛。
2.IN0单极性输入电压与转换后数字量的关系为:
N=256×Ui/Uref
其中Ui为输入电压,Uref为参考电压,这里的参考电压为+5V。
3.一次A/D转换的程序可以为:
MOVAL,通道地址
MOVDX,0809片选地址
OUTDX,AL;启动转换
…;延时
INAL,DX;读取转换结果放在AL中
4、实验流程图
五、实验代码:
ioportequ0ff00h-0280h
io0809aequioport+289h
codesegment
assumecs:
code
start:
movdx,io0809a;启动A/D转换器
moval,0h
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
6、实验感想
模/数转换是将模拟电压或电流转换成数字量,它的过程和原理与用天平称重物体十分相似。
实验八
一、实验目的
1.了解串行通讯的基本原理。
2.掌握串行接口芯片8251的工作原理和编程方法。
二、实验内容
1.按连接好电路,其中8253用于产生8251发送和接收时钟,TXD和RXD连在一起。
2.编程:
从键盘输入一个字符,将其ASCII码加1后发送出去,再接收回来在屏幕上显示,实现自发自收。
显示的内容是:
前一个字符为键盘上输入的字符,后一个是键盘上输入字符的ASCII码加1后字符。
如键入的字符是A,显示的是AB。
3.由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不同,编程时需要了解当前的微机使用那段IO地址并进行设置,获取方法见《用户手册》第五章节5.3第10~12点中的介绍。
下面的程序D8251.ASM(在文件夹“ASM_汇编例程”中)是需要用户自己根据查找到的DVCC卡的I/O基址替换到程序中带下划线的位置(0C400H)。
三、实验提示
1.图示电路8251的片选地址为2B8H,8253的片选地址为280H。
2.8253计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。
3.收发采用查询方式。
四、实验流程图
五、实验代码:
datasegment
ioportequ0FF00h-0280h
io8251aequioport+288h
io8251bequioport+289h
mes1db'youcanplayakeyonthekeybord!
',0dh,0ah,24h
mes2ddmes1
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movdx,io8251b;初始化8251
xoral,al
movcx,03;向8251控制端口送3个0
delay:
callout1
loopdelay
moval,40h;向8251控制端口送40H,使其复位
callout1
moval,4eh;设置为1个停止位,8个数据位,波特率因子为16
callout1
moval,27h;向8251送控制字允许其发送和接收
callout1
ldsdx,mes2;显示提示信息
movah,09
int21h
waiti:
movdx,io8251b
inal,dx
testal,01;发送是否准备好
jzwaiti
movah,01;是,从键盘上读