夜班防睡控制.docx
《夜班防睡控制.docx》由会员分享,可在线阅读,更多相关《夜班防睡控制.docx(18页珍藏版)》请在冰豆网上搜索。
夜班防睡控制
合肥学院
计算机科学与技术系
微机原理与接口技术
课程设计报告
2008~2009学年第1学期
课程
微机原理与接口技术
课程设计名称
夜班防睡控制/记录
学生姓名
杜鹏
学号
0604032045
专业班级
网络工程专业(06网工2)
指导教师
龙夏
2009年1月
一、提议分析及解决方案
1.提议需求分析
在STARES598PCI单板机上实现对值班人员的放睡控制和记录睡着时间的次数的功能。
(1)设5min用较柔和的声音提醒一次值班者,值班者按某一键后复位,计时从新开始。
(2)若计到6min时无人按复位键,则以较急促的声音报警,黄灯闪烁。
(3)当到15min时红灯闪烁,并以尖锐的声音持续报警。
以LED显示分和秒。
显示格式:
分秒。
该程序设计是为了解决值班人员在夜班时容易睡觉的问题。
设计通过蜂鸣器发声以提醒值班人员,计时到5分钟后开始用较柔和的声音提醒值班人员;计时到6分钟后用较急促的声音报警,并且黄灯闪烁,以此提醒可能已经睡着的值班人员;计时到15分钟后用尖锐的声音持续报警,并且红灯闪烁,以此叫醒睡着的值班人员。
在此计时期间,若值班人员没有睡觉而按下复位键则计时时间从零开始,LED显示分秒。
需要柔和、黄灯急促和红灯尖锐三个不同的发声子程序,按所需要求调用发声子程序。
时间动态显示在4个LED数码管上,若无复位则正常即时。
秒个位分个位逢十进一,秒十位逢六进一。
8255A控制蜂鸣器发声及黄灯、红灯闪烁。
2.解决问题方法及思路
(1)硬件部分
(1)PC机一台,并行接口8255A一片,LED数码管4只,红灯黄灯各一个,开关一个,蜂鸣器一个。
(2)8255A的A口B口用于LED数码管的段选位选以显示时间。
(3)8255A的C口低四位用于输出,蜂鸣器、红灯和黄灯根据输出的0或者1发声及灯亮。
(4)8255A的C口高四位用于输入,复位用开关控制,高电平即复位。
(5)不同的发声子程序由子程序中延时不同来区别。
(2)软件部分
程序部分首先初始化8255,然后显示时间初始值00分00秒,4个LED数码管逐个显示,显示数据时用软件延时当显示完毕后秒个位加1,进行下一次显示。
当秒个位为10时,秒个位清零秒十位加1;当秒十位为6时,秒十位清零分个位加1;当分个位为10时,分个位清零分十位加1。
为5分00秒,开始发出控制信号使蜂鸣器发出柔和的声音;6分00秒后,发出控制信号使黄灯闪烁并以急促报警;计时器为15分00秒后,发出控制信号使红灯闪烁并以尖锐声音报警。
此间若有人拨动开关复位,则四个显示器全清零从初始值00分00秒开始计时并显示。
二、硬件设计
1.芯片8255-A
(1)8255A在本设计中的作用
8255A工作在方式0。
A口,B口控制段选位选以控制LED数码显示,C口低四位分别接蜂鸣器,红灯,黄灯。
高四位中的Pc4接开关,用于输入信号,使计时复位。
(2)8255A的功能分析
8255方式0是基本输入/输出方式,A、B、C三个口中任何一个口都可提供简单的输入和输出操作,不需要应答联络信号即可用于无条件传送的场合,也可以用作查询方式传送。
当采用查询方式传送时,原则上可用A、B和C三个口的任一位充当查询信号,但通常都是选用C口充当查询信号,这和C口的编程有关。
A口、B口通常作为独立的I/O端口使用,C口也可作为一般的I/O端口使用,但当A口、B口作为应答式的I/O口使用时,C口分别用来作为A口、B口提供应答控制信号。
通常把C口的4位(高4位或低4位)规定为输出口,用以输出一些控制信号,把C口的另4位规定为输人口,用以输入外设的状态。
方式0通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。
两个8位通道:
通道A、B。
两个四位通道:
通道C高4位和低四位,任何一个通道可以作输入/输出,输出是锁存的而输入是不锁存的。
(3)8255A的技术参数
A1A0
操作
数据传送方式
00100
读A口
A口数据→数据总线
00101
读B口
B口数据→数据总线
00110
读C口
C口数据→数据总线
01000
写A口
数据总线数据→A口
01001
写B口
数据总线数据→B口
01010
写C口
数据总线数据→C口
01011
写控制口
数据总线数据→控制口
表2-1.8255A的操作功能表
图2-1.8255A的方式控制字
Symbol
Parameter
Min
Max
Unit
VIL
InputLowVoltage
-0.5
0.8
V
VIH
InputHighVoltage
2.0
VCC
V
VOL(DB)
OutputLowVoltage(DateBus)
0.45*
V
VOL(PER)
OutputLowVoltage(PeripheralPort)
0.45*
V
VOH(DB)
InputLowVoltage(DateBus)
2.4
V
VOH(PER)
InputLowVoltage(PeripheralPort)
2.4
V
IDAR
(1)
DartingtonDriveCurrent
-1.0
-4.0
mA
ICC
PowerSupplyCurrent
120
mA
IIL
InputLoadCurrent
±10
μA
IOFL
OutputFloatLeakage
±10
μA
表2-2.8255A技术参数
输入最低电压:
min-0.5V,max0.8V,输入最高电压:
2.0V。
输出最低电压:
0.45V
输出最高电压:
2.4V。
2.LED显示器
(1)LED显示器在本设计中的作用
在程序设计中采用7段数字发光二级管做为时间的终端显示,以分秒的格式显示时间。
(2)LED显示器的功能分析
LED数码管的主要部分是七段发光二极管,这七段发光二极管分别称为a、b、c、d、e、f、g,通过7个发光段的不同组合,当对应的位为1时,则该段亮,可以显示0~9和A~F共16个字母数字或其它异形字符。
LED数码管有共阳极、共阴极两种结构,本实验中采用的是共阴极结构。
下图为LED数码管子内部结构示意图:
图2-2.数码管内部结构
(3)LED显示器的技术参数
PCW
If
Vr
Ir
If
RP
对应型号
散射颜色
BT-235-2
70
25
5
>=1.5
<=2.5
200
SEL-10
红色
表2-3.LED技术参数
数字
DP
g
f
e
d
c
b
a
二进制编码(字形)
0
0
0
1
1
1
1
1
1
3FH
1
0
0
0
0
0
0
1
1
03H
2
0
1
0
1
1
0
1
1
5BH
3
0
1
0
0
1
1
1
1
4FH
4
0
1
1
0
0
1
1
0
66H
5
0
1
1
0
1
1
0
1
6DH
6
0
1
1
1
1
1
0
1
7DH
7
0
0
0
0
0
1
1
1
07H
8
0
1
1
1
1
1
1
1
7FH
9
0
1
1
0
1
1
1
1
6FH
A
0
1
1
1
0
1
1
1
77H
B
0
1
1
1
1
1
0
0
7CH
C
0
0
1
1
1
0
0
1
69H
D
0
1
0
1
1
1
1
0
5EH
E
0
1
1
1
1
0
0
1
79H
F
0
1
1
1
0
0
0
1
71H
表2-4.LED段选码编码表
3.蜂鸣器
(1)蜂鸣器在本设计中的作用
程序设计中需要扬蜂鸣器发出三种不同频率的响声,由8255的PC0控制(第0位控制)
(2)蜂鸣器的功能分析
8255的PC0端口循环输出使该位为0或1,蜂鸣器工作与不工作的间歇频率不同即使不同的声音。
4.硬件总逻辑图及其说明
图2-3.硬件总逻辑图
逻辑总图的基本思想是:
在STARES598PCI实验箱中插入PCI卡,将PCI的A0、A1分别接8255A的A0、A1,8255A的CS接片选区CS1,地址范围是0F0H-0FFH,8255A作为通讯接口,分别与数码显示管、蜂鸣器、红黄灯以及开关相连。
其中A口和B口与数码显示管相连,分别控制段选和位选,设计中选取最后四位数码显示管。
C口红黄灯、开关及蜂鸣器,C口低四位作输出口,PC0接扬声器,PC1接黄灯,PC2接红灯,高四位作输入口,PC7接开关。
三、控制程序设计
1.控制程序设计思路说明
首先将8255初始化(设置8255A的控制方式,A口、B口用于输出C口高四位输入,低四位输出),LED动态显示时间(分、秒),用软件查询判断分秒的情况:
当显示5:
00、6:
00、15:
00时,分别调用不同的发声子程序。
显示期间若按复位键则时间从00:
00开始计时。
2.程序流程图
图3-4.主程序流程图
图3-5.判断时间控制流程图
图3-6.进位判断
3.控制程序
.MODELTINY
pcibar3equ1ch;8位i/o空间基地址(它就是实验仪的基地址,也为dma&32bitram板卡上的8237提供基地址)
vendor_idequ10ebh;厂商id号
device_idequ8376;设备id号
.stack100
.data
io_bit8_baseaddressdw?
msg0db'bios不支持访问pci$'
msg1db'找不到starpci9052板卡$'
msg2db'读8位i/o空间基地址时出错$'
com_adddw00f3h;控制口偏移量
pa_adddw00f0h;pa口偏移量
pb_adddw00f1h;pb口偏移量
pc_adddw00f2h;pc口偏移量
.code
shujudb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;存储表示数字的各段选码分别表示为0-9
weidb00h,00h,00h,00h;存储要显示的四个时间量
start:
movax,@data
movds,ax
nop
callinitpci
callmodifyaddress;根据pci提供的基地址,将偏移地址转化为实地址
main:
movdx,com_add;写8255a方式控制字moval,88h
moval,10001000b;a、b为工作方式0输出;c口pc4~pc7为输入,pc3到pc0为输出
outdx,al
movdx,pc_add
moval,11111111b
outdx,al
movsi,offsetwei;设置wei的偏移地址于si中
time:
movah,0
mov[si],ah
mov[si+1],ah
mov[si+2],ah
mov[si+3],ah
time1:
movah,30;设置一秒钟循环显示的次数
show:
movdi,offsetwei+3
movcl,11111110b;位选码
disp:
moval,[di]
movbx,offsetshuju
xlat
movdx,pb_add;写入端口b
outdx,al;将从shuju空间内读取的段选码输入到端口b
moval,cl
movdx,pa_add
outdx,al;将位选码送入端口a
calldelay;调用延时子程序
cmpcl,11110111b
jzsadd
decdi
rolcl,1
jmpdisp;重新显示下一位
sadd:
decah
jnzshow;一秒未显示30次则继续显示
movdx,pc_add;判断pc7是否为0
inal,dx
testal,10000000b
jnztime;不为0则转移到初始化时间的程序段
moval,0
movah,1
movbl,5
movbh,6
movch,10
add[si+3],ah;秒个数的时间量加1
cmp[si],ah;分十位是否为1
jbT5;小于1则转移
cmp[si+1],bl
jbT55
callstrong
jmpT4
T5:
cmp[si+1],bl
jnzT6
callsoft
jmpchange
T6:
cmp[si+1],bh
jbchange
callhurry
T55:
callhurry
jmpchange
change:
cmp[si+3],ch
jnztime1
mov[si+3],al
add[si+2],ah
cmp[si+2],bh
jnztime2
mov[si+2],al
add[si+1],ah
cmp[si+1],ch
jnztime2
mov[si+1],al
add[si],ah
jmptime2
time2:
jmptime1
softproc;柔和声音子程序
pushax
pushbx
pushcx
movbx,5;叫声次数
sound1:
movdx,pc_add
moval,11111110b
outdx,al;蜂鸣器
movcx,00ffh;延时
wait1:
loopwait1
moval,11111111b
outdx,al
movcx,00ffh;延时每次叫声持续的时间
waitt1:
loopwaitt1
decbx
jnesound1
popcx
popbx
popax
ret
softendp
hurryproc;黄灯急促报警子程序
pushax
pushbx
pushcx
movbx,15
sound2:
movdx,pc_add
moval,11111100b
outdx,al;蜂鸣器
movcx,0fffh;延时
wait2:
loopwait2
moval,11111111b
outdx,al
movcx,00ffh
waitt2:
loopwaitt2
decbx
jnesound2
popcx
popbx
popax
ret
hurryendp
strongproc;红灯尖锐报警子程序
pushax
pushbx
pushcx
movbx,20
sound3:
movdx,pc_add
moval,11111010b
outdx,al;蜂鸣器
movcx,00ffh;延时
wait3:
loopwait3
moval,11111111b
outdx,al
movcx,00f0h
waitt3:
loopwaitt3
decbx
jnesound3
popcx
popbx
popax
ret
strongendp
delayproc;延时子程序
pushcx
movbl,20
del:
movcx,1000
waitd:
loopwaitd
decbl
jnzdel
popcx
ret
delayendp
initpciprocnear
movah,00h
moval,03h
int10h;清屏
movah,0b1h
moval,01h
int1ah
cmpah,0
jzinitpci2
leadx,msg0
initpci1:
movah,09h
int21h
jmpexit
initpci2:
movah,0b1h
moval,02h
movcx,device_id
movdx,vendor_id
movsi,0
int1ah
jncinitpci3;是否存在starpci9052板卡
leadx,msg1
jmpinitpci1
initpci3:
movdi,pcibar3
movah,0b1h
moval,09h
int1ah;读取该卡pci9052基地址
jncinitpci4
leadx,msg2
jmpinitpci1
initpci4:
andcx,0fffch
movio_bit8_baseaddress,cx
ret
initpciendp
modifyaddressprocnear
addcom_add,cx
addpa_add,cx
addpb_add,cx
addpc_add,cx
ret
modifyaddressendp
exit:
movah,4ch
int21h
四、上机调试过程
1.硬件调试
1.8255的B口段选码,A口位选码,起初连接排线时排线接错或接反而不能显示完整数据。
2.8255的C口高四位输入低四位输出,起初用排线接到灯及开关处,不能实现功能。
应直接用导线接红黄灯,开关及蜂鸣器。
2.软件调试
1.延时可用软件延时或硬件延时,起初设计程序时便是用8255兼顾LED数码管显示以及蜂鸣器发声,而在实验报告预审期间,老是指导说蜂鸣器发声时占用CPU会导致显示的时间间隔不再准确,后在程序设定时让发声程序尽可能的缩短以缩小时间上的误差。
2.LED数码管显示时间且蜂鸣器鸣叫时显示数据跳动不清晰,是由于蜂鸣器发声的时间过长。
而程序定义是显示完4位时间再比较时间值,符合条件则发声,此时后三位LED数码管熄灭,只有现实分十位的数码管亮。
若发声时间过长则明显看到后三位LED数码管显示的数据跳动。
3.程序需要三种不同的发声子程序,且需要逐个增强的效果。
程序中定义的可影响发声声音的是发声的次数,发声的时间以及发声的间隔时间。
而程序需要运行时间15分钟以上,为了节省时间提高效率只能让每秒的软件延时减短,延时时间短前提下可行的发声子程序在延时接近一秒时区别效果却不尽人意。
为了使声音效果更好可以在定义程序计时时间初值时候改变初始值,例如设11分秒代替00分00秒就能很快检验后两种发声子程序的实际效果。
4.程序6到15分是黄灯闪烁且声音急促,而6到10分和10到15分的声音效果不一样,结果发现是程序的循环语句定义有错误,改正后程序功能正确。
5.程序设定是使用LED数码管后四位,在指导教师的要求下需要改为前四位显示,需要将位选码11111110改为11101111,判断是否显示完毕的11110111改为01111111.即送第五位开始显示,显示以后后向左循环左移。
6.调试过程中8255的C口低四位输入出现问题,例如不需要蜂鸣器鸣叫时,蜂鸣器出现很低声音的鸣叫,换了输出端口也是如此。
换了机器后功能恢复正常。
五.设计结果分析及问题讨论
1.课程设计结果及分析
程序开始正常运行时,四个LED数码管从00分00秒开始计时并显示时间,并隔相应的时间加一秒,当时间显示到5分00秒后,蜂鸣器发出较柔和的声音;到6分00秒后,蜂鸣器发出较急促的声音,黄灯闪烁;到15分00秒后,蜂鸣器发出尖锐的报警声,红灯闪烁。
再次期间若拨动开关到高电平,系统则回到初始设置,时间为00分00秒,拨回开关开始从00分00秒从新计时。
LED数码管的显示使用段选和位选的方法进行控制。
位选来选择哪一个显示灯亮,段选来控制显示器显示的时间数值。
需要设置时间数字的缓冲区便于对时间的变化进行查询,以此来决定时都调用发声子程序。
故要确定段码数值,利用段码表提供的数和位选依次对各个位进行赋初始值,此时偏移地址为0。
在计时过程中通过改变缓冲区内的数值值以此作为换码指令的偏移地址,通过换码指令得到应该在数码显示器中显示的时间值。
2.收获、体会和建议
1.通过课程设计对七段LED数码显示器的发光原理有了进一步的了解。
发光二极管是一种当外加电压(阳极电压接高电位)超过额定电压时发生击穿,并因此能产生可见光的器件。
数码显示管通常由多个发光二极管来组成7段或8段笔画显示器,当段组合发亮时,便可显示某一数码或字符。
设计中有4位七段LED接口电路,共有4个七段发光二极管的器件。
为了减少所用器件的数量,这个电路可以和4个8位并行输出口连接。
4个显示器共用同一组段代码输出线,但通过数位选择线,在任何时间内只有一个显示器能够显示其代码。
为了实现这一功能,可让每个显示器接通一小段时间,以显示其对应的数,并且循环显示这4个数,以达到一秒的时间。
这样可,人们看上去好象4个显示器都在同时显示。
通过段码表来确定显示时间的数值。
2.通过课程设计对8255的方式0有了进一步的了解。
8255有三个8位端口PA,PB和PC。
各端口都可由程序设定为各种不同的工作方式,在设计中A口工作于方式0,低4位用作位选码;B口工作于方式0,8位用于段选码;C口也工作于方式0,高4位用于输入口,低4位用于输出口,红黄灯及蜂鸣器接低四位,复位开关接高四位。
3.通过课程设计更深一步地学习和掌握了计算机中常用接口电路8255的应用和设计技术,也更进一步了解到其他芯片例如8253的用途和结构等,认识到理论知识对应用技术的指导性作用,实践更利于理论知识的吸收。
通过此次课程设计自己查资料动脑筋设计方案,并花大量的时间调试硬件和软件,对课本知识的理解上升更高的层次,相信再过很长时间也还印象深刻。
上枯燥抽象的理论课,经过一步加强理论知识与应用相结合的实践和锻炼后也有了更深的理解与心得。
4.为完成这次课程设计,不仅巩固了我的专业知识,更提高了我独立思考和实践的能力。
可以说这次的设计与以往的课程设计存在很大的迥异,因为它不仅要求编程,更需要软件的设计配合完成硬件的设计,这对我们的学习和分析问题的能力是一次很好的训练和提升