最新东南大学微机原理微机系统与接口实验五六实验报告自动化学院文档格式.docx
《最新东南大学微机原理微机系统与接口实验五六实验报告自动化学院文档格式.docx》由会员分享,可在线阅读,更多相关《最新东南大学微机原理微机系统与接口实验五六实验报告自动化学院文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
编程在两个数码管上显示“56”。
图三双管动态显示
二.实验原理与接线
5-1参考图3.6-1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)
●8253的CS接280H
●8253的GATE0接+5V
●8253的CLK0接单脉冲1或2
●8253的OUT0接逻辑笔(高电平LED12亮,低电平LED13亮)
5-2按图3.6-2连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1Hz)
●8253的GATE0和GATE1接+5V
●8253的CLK0接1MHz
●8253的OUT0接CLK1
●8253的OUT1接逻辑笔
编辑提示:
1、8253定时器0地址280h
8253定时器1地址281h
8253定时器2地址282h
8253控制口地址283h
2、实验参考程序中的口地址和代号是随意的,看程序的时候要注意。
八段式LED数码管的符号和引脚
共阴极七段数码管字型数码
实验接线图
实验接线图(静态显示)
♦PA0~PA6分别接数码管的a~g
♦PC0~PC7分别逻辑电平开关的K0~K7
♦位选端S1接+5V
♦位选端S0接地
♦数码管dp端接地
实验接线图(动态显示)
♦位选端S0、S1接8255C口的PC0、PC1端
编程提示:
1、实验台的七段数码管为共阴性,段码同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码的输入端高电平选中。
2、8255的A口、B口、C口和控制口的端口地址分别为288H~28BH。
编程首先要设置控制字输出到控制口。
3、逻辑电平开关向上拨到“1”时输出高电平;
向下拨到“0”时输出低电平。
4、动态显示时应先从A口输出段码,然后再从C口输出位码,然后应该延时一段时间才能看到数码管的显示。
其中段码需要查表
Leddb3fh,06h,…………71h
位码分别为:
左边的数码管xxxxxx10
右边的数码管xxxxxx01
5、动态显示时为了使两个数码管的字符可以同时看到,应注意延时的时间。
6、注意字符变换之间应使段位全灭,避免影子。
四.实验源程序(主要部分)和流程图
源程序:
ioportequ0b800H-0280H;
tpc卡中设备的io地址
io8253aequioport+283H;
8253控制寄存器地址
io8253bequioport+280H;
计数器0地址
stackssegmentstack
db100dup(?
)
stacksends
codesegment
assumecs:
code,ss:
stacks
mainprocfar
start:
movax,stacks
movss,ax
moval,10h;
设置8253通道0为工作方式0,二进制计数
movdx,io8253a
outdx,al
movdx,io8253b;
送计数初值为0FH
moval,0fh
ZZZ:
inal,dx;
读计数初值
calldisp;
调显示子程序
pushdx
movah,06h
movdl,0ffh
int21h
popdx
jzZZZ
movah,4ch;
退出
mainendp
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;
显示
movdl,0dh;
加回车符
movdl,0ah;
加换行符
ret;
子程序返回
dispendp
codeends
endstart
实验现象:
计数器:
当手动输入单脉冲时,屏幕显示F,E,D,C,B,A……1,然后输出逻辑笔显示一个高电平。
原因:
程序中设定的计数初值为0FH,故从0FH递减至1计数,每计完一次,输出一个高电平。
上图为计数过程中逻辑笔红灯亮。
ioportequ0b800h-0280h;
io8253aequioport+280h;
io8253bequioport+281h;
计数器1地址
io8253cequioport+283h;
movss,ax
movdx,io8253c;
向8253写控制字
moval,36h;
使0通道为工作方式3
movax,1000;
写入循环计数初值1000
outdx,al;
先写入低字节
moval,ah
后写入高字节
movdx,io8253c
moval,76h;
设8253通道1工作方式2
movdx,io8253b
先写低字节
后写高字节
程序退出
endstart
定时器:
逻辑笔输出频率为1Hz的信号。
初始信号为1MHz,经过2级1000~0的记数,频率变为原来的1000000倍,即1Hz,实现1s的周期信号。
流程图:
1.8255简单输入输出程序
io8255aequioport+288h;
8255A口地址
io8255bequioport+28bh;
8255控制寄存器端口地址
io8255cequioport+28ah;
8255C口地址
movdx,io8255b;
设8255为C口输入,A口输出
moval,8bh
outdx,al
inout:
movdx,io8255c;
从C口输入一数据
inal,dx
movdx,io8255a;
从A口输出刚才自C口
outdx,al;
所输入的数据
movdl,0ffh;
判断是否有按键
movah,06h
int21h
jzinout;
若无,则继续自C口输入,A口输出
movah,4ch;
否则返回DOS
codeends
endstart
实验现象:
开关K0~K7的高低电平分别表示1和0,设置K0~K7的值,在流水灯L0~L7中用灯的亮与灭来显示。
下图将k0,k1设置为高电平,对应的灯亮起。
2.流水灯
movss,ax
movdx,io8255b;
moval,8bh
movcl,01h
inal,dx
testal,01
jneright;
k0为高电平时向右
jmpleft;
k0为低电平时向左
right:
andal,11110000b;
判断高四位
cmpal,00h;
判断延时,ah=00时停止,ah=10时延时移动显示
jeright
moval,cl
calldelay1
rolcl,1
jmpleft
left:
jeleft
rorcl,1
delay1procnear
movdx,io8255a;
outdx,al;
calldelay
moval,0
calldelay
ret
delay1endp
DELAYPROCNEAR;
延迟子程序
pushcx
pushbx
movbx,0fffh
cc:
movcx,0ffffh
ccc:
loopccc
decbx
jnzcc
popbx
popcx
ret
DELAYENDP
流水灯的流水方向可由K0键控制,K0为高电平时向左,K0为低电平时向右。
但是流水间隔时间可由K4~K7来控制,但按ESC键也不能退出流水灯。
虽然我们尝试修改了代码,不过最后还是没能实现按下esc退出。
3.8段数码管静态显示程序段:
movax,data
movds,ax
将8255设为A口输出
moval,80h
outdx,al
movdi,offsetbuffer1;
设di为显示缓冲区
loop2:
movbh,02
lll:
movbyteptrbz,bh
pushdi
decdi
adddi,bz
movbl,[di];
bl为要显示的数
popdi
movdx,io8255a
movbh,0
movsi,offsetled;
置led数码表偏移地址为SI
addsi,bx;
求出对应的led数码
moval,byteptr[si]
movdx,io8255c;
自8255A的口输出
moval,byteptrbz;
使相应的数码管亮
movdx,io8255a
movcx,3000
delay:
loopdelay;
延时
movbh,byteptrbz
shrbh,1
jnzlll
movdx,0ffh
movah,06
jeloop2;
有键按下则退出
moval,0;
关掉数码管显示
movah,4ch;
返回
从键盘输入一个0~9的数字后数码管中显示出该数字。
键入的数字6:
数码管显示6:
4.8段数码管动态显示程序段
datasegment
ioportequ0c800h-0280h
io8255aequioport+288h
io8255bequioport+28bh
leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
mesg1db0dh,0ah,'
Inputanum(0--9h):
'
0dh,0ah,'
$'
dataends
stackssegmentstack
db100dup(?
stacksends
codesegment
assumecs:
code,ds:
data,ss:
start:
movss,ax
movax,data
movds,ax
movdx,io8255b;
使8255的A口为输出方式
movax,80h
sss:
movdx,offsetmesg1;
显示提示信息
movah,09h
int21h
movah,01;
从键盘接收字符
cmpal,'
;
是否小于0
jlexit;
若是则退出
是否大于9
jgexit;
subal,30h;
将所得字符的ASCII码减30H
movbx,offsetled;
bx为数码表的起始地址
xlat;
求出相应的段码
movdx,io8255a;
从8255的A口输出
jmpsss;
转SSS
exit:
返回DOS
两个数码管动态显示出“56”。
流程图
图四8255简单输入输出程序流程图图五8255动态显示56程序流程图
五.提高与创新研究
1.图3.6-2系统中最大定时时间为多长,如果需要获得20秒的精确定时该如何处理?
CLK0:
0.0000001s
CLK1、OUT0:
0.0001s
CLK2、OUT1:
1s
所以最大定时时间为一秒。
如果要获得20秒的精确定时应将OUT1接CLK2,OUT2接输出,当OUT2输出20个方波时,为20s。
2.计数器选用方式三的原因:
应要将OUT0接CLK1,所以输出最好为占空比为1:
1的方波,而只有方式3输出为占空比为1:
1的方波,故选用方式三。
递增00~99计数器
在电路图3的基础上,编程实现递增00~99计数器(选作与探索实验一),编程如下:
datasegment
ioportequ0e000h-0280h
io8255aequioport+28ah
io8255bequioport+28bh
io8255cequioport+288h
leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;
段码
buffer1db0,0;
存放要显示的十位和个位
bzdw?
位码
dataends
movax,data
movds,ax
movdx,io8255b;
moval,80h
movdi,offsetbuffer1;
loop1:
movcx,0300h;
循环次数
diy:
pushdi
decdi
adddi,bz
movbl,[di];
popdi
movbh,0
movsi,offsetled;
addsi,bx;
moval,byteptr[si]
moval,byteptrbz;
pushcx
movcx,0ffffh;
如果显示过快,可更改cx值为最大0ffffh
popcx
movbh,byteptrbz
shrbh,1
jnzdiy
looploop2;
循环延时
movax,wordptr[di]gg
cmpah,09
jnzset
cmpal,09
(一)创业机会分析movax,0000
(一)对“漂亮女生”饰品店的分析mov[di],al
图1-1大学生月生活费分布mov[di+1],ah
jmploop1
set:
movah,01
int16h
jneexit;
有键按下则转exit
movax,wordptr[di]
现在是个飞速发展的时代,与时俱进的大学生当然也不会闲着,在装扮上也不俱一格,那么对作为必备道具的饰品多样性的要求也就可想而知了。
incal
aaa
mov[di],al;
al为十位
(3)个性体现mov[di+1],ah;
ah中为个位
exit:
moval,0;
我们长期呆在校园里,对社会缺乏了解,在与生意合作伙伴应酬方面往往会遇上困难,更不用说商业上所需经历的一系列繁琐手续。
他们我们可能会在工商局、税务局等部门的手续中迷失方向。
对具体的市场开拓缺乏经验与相关的知识,缺乏从职业角度整合资源、实行管理的能力;
六.实验结果以及遇到的问题和解决办法
但这些困难并非能够否定我们创业项目的可行性。
盖茨是由一个普通退学学生变成了世界首富,李嘉诚是由一个穷人变成了华人富豪第一人,他们的成功表述一个简单的道理:
如果你有能力,你可以从身无分文变成超级富豪;
如果你无能,你也可以从超级富豪变成穷光蛋。
实验五的目的主要是通过实验对芯片8253的工作机理有了更加清楚地认识。
通过本次实验,我熟悉了8253定时器/计数器的内部工作原理,透彻理解了8253的方式控制字,状态字等功能的实现原理,这是本次实验最大的收获!
并且,掌握了对8253的初始化以及运行的过程,让我对于课本上讲的8253的工作方式有了更深刻的体会。
大学生的消费是多种多样,丰富多彩的。
除食品外,很大一部分开支都用于。
服饰,娱乐,小饰品等。
女生都比较偏爱小饰品之类的消费。
女生天性爱美,对小饰品爱不释手,因为饰品所展现的魅力,女人因饰品而妩媚动人,亮丽。
据美国商务部调查资料显示女人占据消费市场最大分额,随社会越发展,物质越丰富,女性的时尚美丽消费也越来越激烈。
因此