兰州大学接口与通讯实验报告概览.docx
《兰州大学接口与通讯实验报告概览.docx》由会员分享,可在线阅读,更多相关《兰州大学接口与通讯实验报告概览.docx(16页珍藏版)》请在冰豆网上搜索。
兰州大学接口与通讯实验报告概览
实验6-68255并行接口(LED)实验
实验说明
8255工作于方式0,此时PA,PB,PC均为可独立输入输出的并行口。
8255的各寄存器对应的端口地址为:
PA口:
288H
PB口:
289H
PC口:
28AH
控制口:
28BH
8255的片选信号为CS连138译码器的288H-28FH。
由于各PC速度不同,为到达较好的实验效果,可以适当调节LED亮灭的延迟时间。
源代码:
datasegment
ioportequ0ff00h-0280h
io8255aequioport+288h;PA口
io8255bequioport+289h;PB口
io8255cequioport+28ah;PC口
io8255dequioport+28bh;控制口
mess1db'左循环按1',0dh,0ah,'$';提示信息
db'右循环按2',0dh,0ah,'$'
db'间隔闪烁按3',0dh,0ah,'$'
db'退出按4',0dh,0ah,'$'
mess2db'按无效键继续选择',0dh,0ah,'$'
mess3db'按任意键退回主菜单',0dh,0ah,'$'
dataends
stacksegment
stadb20dup(?
)
topequlengthsta
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack,es:
data
start:
movax,data;data段装填
movds,ax
movax,stack;stack段装填
movss,ax
movsp,top;设置栈顶
movsp,ax
movdx,io8255d
moval,80h;命令字10000000b,表示特征位为1,A组为0方式,A端口出,
outdx,al;PC4-PC7出,B组为0方式,B端口出,PC0-PC3出
bg:
leadx,mess1;显示提示信息mess1
movah,09h
int21h
movah,08h;输入字符,结果保存至al
int21h
pushax;保存输入的值
leadx,mess3;显示提示信息mess3
movah,09h
int21h
popax;拿出保存的值
movah,al;ah=al
cmpal,'1';输入为1,跳转到zxh
jzzxh
moval,ah;al=ah
cmpal,'2';输入2,跳转到yxh
jzyxh
moval,ah;al=ah
cmpal,'3';输入3,跳转到jgs
jzjgs
moval,ah;al=ah
cmpal,'4';输入4,跳转到wx
jnzwx
jmtqit
wx:
leadx,mess2;显示提示信息mess2
movah,09h
int21h
jmpbg;无条件跳转到bg
zxh:
movdx,io8255c
moval,0feh;al=11111110b
bb:
outdx,al;将al写入PC口
movcx,0ffffh;用于延迟一定的时间
l1:
loopl1
rolal,1;al循环左移一位
pushax;保存ax
pushdx;保存dx
movdl,0ffh;直接控制台IO,输入,输入的值在al中
movah,06h
int21h
jnzbg;flag的ZF标志位不为0跳转至bg
popdx;恢复dx,ax的值
popax
jmpbb;跳转至bb
yxhmovdx,io8255c
moval,0feh;al=11111110b
ee:
outdx,al;将al写入PC口
movcx,0fffh;用于延迟一定的时间
l2:
loopl2
roral,1;al循环右移一位
pushax;保存ax
pushdx;保存dx
movdl,0ffh;直接控制台IO,输入,输入的值在al中
movah,06h
int21h
jnzbg;flag的ZF标志位不为0跳转至bg
popdx;恢复dx,ax的值
popax
jmpee;无条件转移至ee
jgs:
movdx,io8255c
moval,55h;al=01010101b
hh:
outdx,al;将al写入PC口
movcx,0fffh;设置时延
l3:
loopl3
notal;对al按位取反
pushax;保存ax
pushdx;保存dx
movdl,0ffh;直接控制台IO,输入,输入的值在al中
movah,06h
int21h
jnzbg1;flag的ZF标志位不为0跳转至bg1
popdx;恢复dx,ax的值
popax
jmphh;无条件转移至hh
bg1:
jmpbg;无条件转移至bg
qit:
movax,4c00h;交还控制权给DOS
int21h
codeends
endstart
6-78255简单控制交通灯实验
实验电路图
程序流程图
实验代码:
stacksegment
db256dup(?
)
stackends
datasegment
ioportequ0ff00h-0280h
io8255aequioport+288h;PA口
io8255bequioport+289h;PB口
io8255cequioport+28ah;PC口
io8255dequioport+28bh;控制口
portc1db24h,44h,04h,44h,04h,44h,04h;6个灯可能的
db81h,82h,80h,82h,80h,82h,80h;状态数据
db0ffh;结束标志
dataends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data;data段装填
movds,ax
movdx,io8255d
moval,90h;命令字10010000B
outdx,al;表示A组方式0,A端口入,B组方式0,B,C端口出
movcx,3;整个过程循环3次
p:
leadi,portc1
re_on:
moval,[di];把portc1中数据逐个赋给al
incdi;di=di+1
cmpal,0ffh;如果读取到结束标志,则跳转到s
jzs
movdx,io8255c
on:
outdx,al;向C端口写入数据
callrelay;调用时延子程序
jmpre_on;无条件跳转至re_on
s:
deccx;cx=cx-1
cmpcx,0
jnzp;cx不等于0,则跳转至p
exit:
movah,4ch;交还控制权
int21h
relayprocnear
pushcx;保存cx的值
movcx,3300h
de1:
movbx,0ffffh
de0:
decbx
jnzde0
loopde1
popcx;恢复cx的值
ret
relayendp
codeends
endstart
附加实验
datasegment
ioportequ0ff00h-0280h
io8255aequioport+288h;PA口
io8255bequioport+289h;PB口
io8255cequioport+28ah;PC口
io8255dequioport+28bh;控制口
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data;data段装填
movds,ax
movax,stack;stack段装填
movss,ax
movdx,io8255d
moval,10010000b;命令字A,B,C组方式0,A组入,B,C出
outdx,al
wait1:
movdx,io8255a
inal,dx;从A口读入数据
movdx,io8255c
outdx,al;将al中的数据写入C口
movah,06h;直接控制台IO
movdl,0ffh;输入
int21h
jmpwait1;跳转到wait1
movah,4ch;交还控制权
int21h
codeends
endstart
6-15A/D转换实验
实验代码:
datasegment
ioportequ0ff00h-0280h
io0809aequioport+298h
ts1db'a/dstart.',0dh,0ah,'$'
ts2db'a/dend.',0dh,0ah,'$'
bufdw300dup(?
)
dataends
stacksegment
stadw20dup(?
)
topequlengthsta
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data;data段装填
movds,ax
movax,stack;stack段装填
movss,ax
movsp,top;设置栈顶指针
leadx,ts1
movah,9
int21h;显示提示信息
movcx,300
conv:
movdx,io0809a
moval,0
outdx,al;为io0809a设置初值为0
calladint;调用adint子程序
movax,si;si中此时为读入数据,ax=si,al就是读入的一个字节
leadi,buf
mov[di],al;将读入的数据送入buf缓冲区
andal,0f0h;将al与0f0h求与,并将结果重新赋给al
pushcx;保存cx的值
movcl,4
shral,cl;逻辑右移4位
popcx;恢复cx的值
addal,30h;al=al+30h
cmpal,39h
jbedispl;小于等于39h时跳转到displ
addal,07h;al=al+07h
displ:
movdl,al;dl=al
movah,2;显示输出,要输出的值为dl中的值
int21h
moval,[di];取出buf中的值,赋给al
incdi
andal,0fh;al的值与0fh按位求与
addal,30h;al=al+30h
cmpal,39h
jbedisph;小于等于39h跳转到disph
addal,07h;大于39h时,al=al+07h
disph:
movdl,al;dl=al
movah,2;显示dl中的值
int21h
movdl,20h
movah,2
int21h
int21h;显示两个空格
loopconv;循环至conv
leadx,ts2
movah,9;显示结束信息
int21h
adintprocnear
pushax
pushbx
pushcx
movcx,0ffffh;设置时延
delay:
movbx,2fh
delay1:
decbx
cmpbx,0
jnzdelay1
loopdelay
movdx,io0809a
inal,dx;从io0809a读入一个字节赋给al
movsi,ax;si=ax,用si把读入的数据返回出去
popcx
popbx
popax
ret
adintendp
codeends
endstart
实验数据:
电压/V
0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
输出(十六进制)
0
1AH
35H
4FH
69H
83H
9DH
B8H
D2H
EDH
FFH
输出(十进制)
0
26
53
79
105
131
157
184
210
237
255
散点图:
误差分析:
利用
作图分析A/D转换的线性度,其中
为转换后的数字量,
为输入的模拟量,
是个无穷小量可以忽略。
,
是待求的量,可以用最小二乘法求得近似值。
公示如下:
计算过程结果如下:
Sxx=27.5
Sxy=1426
a=1.01
b=51.85
直线方程为:
Y=51.85x+1.01