计时数字时钟课程设计报告资料Word格式.docx
《计时数字时钟课程设计报告资料Word格式.docx》由会员分享,可在线阅读,更多相关《计时数字时钟课程设计报告资料Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
RESET:
复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:
片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。
RD:
读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:
写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写8255。
D0~D7:
三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。
PA0~PA7:
端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。
PB0~PB7:
端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。
PC0~PC7:
端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。
端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。
8253:
8253具有3个独立的16位计数器,6种不同的工作方式。
计数寄存器用来寄存计数初值,计数工作单元为16位减1计数器,它的初值便是计数寄存器内容,计数单元对CLK脉冲计数,每出现一个CLK脉冲,计数器减1,当减为零时,通过OUT输出指示信号表明计数单元已为零。
当作为定时器工作时,每当计数单元为零时,计数寄存器内容会自动重新装入计数单元,而且CLK输入是均匀的脉冲序列,于是OUT输出频率是降低了的(相对于CLK信号频率)脉冲序列。
当作为计数器工作时,表明只关心在CLK端出现(代表事件)的脉冲个数,当CLK端出现了规定个数的脉冲时,OUT输出一个脉冲信号
3)8255A的引脚信号
(1).与外设相连的
图2-18255A内部结构框图
PA7~PA0:
A口数据信号线。
PB7~PB0:
B口数据信号线。
PC7~PC0:
C口数据信号线。
4)8255A的端口录址及操作功能表:
A1
A0
端口号及其功能
1
端口A—>
数据总线
输入操作(读)
端口B—>
端口C—>
数据总线—>
端口A
输出操作(写)
端口B
端口C
控制字寄存器
x
未选中8255A,数据总线—>
三态
断开功能
1
0
非法状态
表2-18255A端口录址及操作功能
(1)8255A的方式控制字:
D7D6D5D4D3D2D1D0
A组工作方式
A口I/O
C7-c4I/O
B组工作方式
B口I/O
C3-c0I/O
|||||||
特征位00方式01输入1输入0方式01输入1输入
01方式10输出0输出1方式10输出0输出
10方式2
图2-28255A的方式控制字
8255A方式选择字
(2)8255A的置位/复位控制字
×
写入位编码
写入内容
写入位|编码|
D0~D7000~1110写入0
1写入1
图2-38255A的端口置位/复位控制字格式
(3)8255A的主要技术参数分析
8255A技术参数表
参数名称
符号
测试条件
规范值
最大
最小
输入低电平电压
VIL
0.8v
-0.5v
输入高电平电压
VIH
Vcc
2.0v
<
数据总线>
VOL
IOL=2.5mA
0.45v
外部端口>
IOL=1.7mA
VOH
IOH=-400μA
2.4v
IOH=-200μA
达林顿驱动电流
IDAR
REXT=750
VEXT=1.5v
4.0mA
1.0mA
电源电流
ICC
120mA
输入负载电流
IIL
I=VCC~0v
+10mA
-10mA
输出浮动电流
IOFL
VOUT=VCco~0v
表2-28255A的技术参数表
由上可知:
8255A的达林顿驱动电流最大值为4.0mA。
5)8255在本实验中的作用:
1)8255作为可编程接口芯片实现了外设(LED数码管显示器,逻辑开关)与8086之间的数据传输,解决了两者之间的速度不匹配的矛盾,具有数据缓冲功能。
2)8255的A口工作与方式0,作为输入口,其PC0~PC7分别与逻辑开关的K1~k8相连,其中开关量k8用于判断是否暂停(若为0不暂停,若为1则暂停),k7用于判断是否修改,K5~K6判读修改那一位,K1~k4为要修改的值;
B口工作与方式0,作为输出口,其PB0~PB7分别与LED数码管显示器的八段a.b.c.d.e.f.g.dp相连,C口作为输出口,其PA0~PA3L分别与LED数码管显示器的ED3~LED0相连,作为位选。
6)CPU接口(数据总线缓冲器和读/写控制逻辑)
(1)数据总线缓冲器
这是一个8位双向三态缓冲器,三态是由读/写控制逻辑控制的。
这个缓冲器是8255A与CPU数据总线的接口。
所有数据的输入/输出,以及CPU用输出指令向8255A发出的控制字和用输入指令从8255A读入的外设状态信息,都是通过这个缓冲器传递的。
(2)读/写控制逻辑
它与CPU的6根控制线相连,控制8255A内部的各种操作。
控制线RESET用来使8255A复位。
和地址线A1及A0用于芯片选择和通道寻址。
控制线和用来决定8位内部和外部数据总线上信息传送的方向,即控制把CPU的控制命令或输出的数据送到相应的通道,或把状态信息或输入数据送到CPU。
8255A的读/写控制逻辑的作用,是从CPU的地址和控制总线上接受输入的信号,转变成各种命令送到A组或B组控制电路进行相应的操作。
7)与CPU相连的
RESET:
复位信号。
当信号来时,所有寄存器都被清除。
同时三个数据端口被自动置为输入端口。
D7~D0:
它们是8255A的数据线和系统总线相连。
片选信号。
在系统中,一般根据全部接口芯片来分配若于低位地址(比如A5、A4、A3)组成各种芯片选择码,当这几位地址组成某一个低电平,于8255A被选中。
只有当有效时,读信号写才对8255进行读写。
RD:
读信号。
当此信号有效时,CPU可从8255A中读取数据。
WR:
写信号。
当此信号有效时,CPU可向8255A中写入数据。
A1、A0:
端口选择信号。
8255A内部有3个数据端口和1个控制端口,共4个端口。
规定当A1、A0为00时,选中A端口;
为01时,中B端口;
为10时,选中C端口;
为11时,选中控制口。
2选择器件LED:
1)芯片在本设计中的作用:
LED发光二极管在本设计中采用7段数字发光二极管,作为终端显示。
显示时间的分秒。
2)LED的功能分析:
物理构造:
LED发光二级管,采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。
3)工作原理:
当在发光二极管PN结上加正向电压时,PN结势垒降低,载流子的扩散运动大于漂移运动,致使P区的空穴注入到N区,N区的电子注入到P区,这样相互注入的空穴与电子相遇后会产生复合,复合时产生的能量大部分以光的形式出现。
4)数字成像:
将七个发光管进行组合,排列成数字图形8,再根据需要控制七个管的亮与灭,即可显示出定义数字。
有段选码和位选码确定数字1~8的输出并在延时程序中保持复位。
它是一种当外加电压超过额定电压时发生击穿,并因此而产生可见光的器件。
这种数码管是有7段或8段笔画显示器组成一个字符而形成的。
如下图:
(a)(b)(c)
(d)
图2-4LED结构图
LED显示管段选码编码表
数字
dp
g
f
e
d
c
b
a
二进制编码
3Fh
06h
2
5Bh
3
4Fh
4
66h
5
6Dh
6
7Dh
7
07h
8
7Fh
E
79h
表2-3LED显示管段选码编码表
5)LED的技术参数分析
LED发光二极管的压降一般为1.5-2.0V,其工作电流一般取10-20Ma,发光二极管可应用于直流驱动电路、交流驱动电路和脉冲驱动电路。
由于8255A的最大驱动电流为4.0mA,而LED的工作电流一般为10-20mA,所以需要加一个驱动器74LS244。
4、开关
1)开关的作用:
本次设计需要用七位开关置数来修改时间。
2)开关功能的分析:
注:
由于本程序后来改进加入了时的倒计,所以下面的开关是针对有时、分、秒的设计
开关K4~K1位设置输入的时间数字(0~15),K6~K5用来控制对不时间的分秒位数的修改,k8控制程序的运行与否,仅当K8为1时即程序停止运行,K7为1时才可以修改时间。
3)逻辑开关及其编码
K4K3K2K1
数字
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
9
K5K6
对应的操作
00
修改秒位的低位
修改秒位的高位
01
修改分位的低位
修改分位的高位
图2-6逻辑开关表2-6逻辑开关逻辑编码表
开关高电平:
+5V、低电平:
0V
三.硬件总逻辑图及其说明
图3-1硬件总逻辑图
AD0~AD19经锁存器分别送往总线收发器和地址译码器。
经总线收发器将低八位数据与8255的八位数据线相连地址线A1、A2与8255的A0、A1相连,即偶地址有效。
控制总线RD、WR、RESET分别与8255相应的控制信号线连接。
片选信号CS0与8255的CS信号连接,则8255的端口地址为04A0~04A6。
8255的PA口用于存放位选码,使用的是高四位,分别连接到四个七段LED显示器上。
使用的是共阴极接法。
PB口用于存放段选码,八位全部连接到八个二极管的阳极上。
所以,PA口中的信号是“0”才能表示选中了该位七段LED显示器,而PB口中信号为“1”表示使该二极管发光,否则,不发光。
四.控制程序设计
1、控制程序设计思路说明:
程序框架是一个主程序用于设置8255的工作方式;
一个显示程序用于显示当前的时值、分值和秒值,在其中还设置了一个小的程序用于延时,以稳定显示的数值。
采用动态刷新的方式将六位数字显示一遍。
每遍约20秒的时间,显示约50次可使得时间约为一秒。
然后将时间减少一秒,再次将时间显示出来。
如此循环,直到时间减少到00时00分00秒为止。
2、程序流程图
Y
N
图4-1总流程图
修改缓冲区子程序
图4-2计时子程序流程图
显示子程序
图4-3显示子程序流程图
3、控制程序
.MODELTINY
COM_ADDEQU0F003H;
控制口偏移量
PA_ADDEQU0F000H;
PA口偏移量
PB_ADDEQU0F001H;
PB口偏移量
PC_ADDEQU0F002H;
PC口偏移量
.STACK100
.DATA
lendb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;
段码表
timedb00h,00h,00h,00h
.CODE
START:
loop3:
MOVAX,@DATA
MOVDS,AX
NOP
MOVdx,COM_ADD;
工作方式寄存器端口地址
MOVal,89h;
10001001b初始化工作方式控制字
OUTdx,al
movdx,PC_ADD
inal,dx
andal,80h
cmpal,80h;
/暂停
jzL
CALLdisplay1;
调用显示子程序,显示一秒
CALLalter;
调用数据缓冲区修改子程序
JMPloop3
L:
CALLdisplay1
MOVdx,PC_ADD
INal,dx
ANDal,40h
CMPal,40h;
是否修改
JNZstart
A:
MOVsi,offsettime;
数据缓冲区送BX
MOVdx,PC_ADD;
PC口端口地址
INal,dx;
读八位开关量
MOVah,al;
AH=AL保存数据,下面的操作会改变al的值
ANDax,0f30h;
选取56进行输入选择保留ah低四位
A0:
CMPal,00h
JNZA1
CMPah,10
JBA5
Callerror
A1:
cmpal,10h
jnzA2
addsi,1
cmpah,6
Callerror
jbA5
A2:
cmpal,20h
jnzA3
addsi,2
cmpah,10
A3:
cmpal,30h
jnzA5
addsi,3
jbA5
A5:
MOVbyteptr[si],ah
调用显示子程x
JMPSTART
;
***************************************************************
errorPROC;
输入错误提示子程序
PUSHdx;
保护DX
PUSHax;
保护AX
PUSHsi
PUSHdi
MOVdi,0c8h
LOOp4:
MOVah,00Fh;
设置位选选中
moval,71h
MOVdx,PB_ADD;
PB口地址
OUTdx,al;
送段选码
MOVal,ah;
位选码AL
MOVdx,PA_ADD;
PA口地址
OUTdx,al
CALLdelay
DECdi
JNEloop4
CALLDISPLAY1
popdi
POPsi
POPax
POPdx
JMPLOOP3
errorENDP
*********************************************************************
display1PROC;
PUSHsi
PUSHdx
PUSHcx
PUSHbx
PUSHax
PUSHdi
MOVdi,60;
控制1s的计时
loop1:
数据缓冲区首地址送SI
MOVcx,4
MOVah,0feh;
设置位选选中秒的个位
loop2:
MOVal,byteptr[si];
位移量
MOVbx,offsetlen
XLAT;
查数据段表,[al+bx]->
al
MOVdx,PB_ADD
MOVdx,PA_ADD
ADDsi,1
ROLah,1
LOOPloop2
JNEloop1
POPdi
POPbx
POPcx
POPsi
RET
display1ENDP
alterPROC;
修改数据缓冲区子程序
PUSHsi
PUSHax
PUSHdx
数据缓冲区
MOVax,[si];
缓冲区中的秒值取入ax
ADDAL,1
CMPal,10
JBloop6
MOVal,00h
ADDah,1
CMPah,6
JBloop6
MOVah,00h
MOV[si],ax
INCsi
INCsi
MOV[si],ax
loop6:
MOV[si],ax;
修改后的值再保存回缓冲区
POPdx
alterENDP
********************************************************************
delayPROC;
延时子程序4190us
PUSHcx
MOVcx,500
loop5:
LOOPloop5
POPcx
RET
delayENDP
Exit:
ENDSTART
五.上机调试过程
1、硬件调试:
本实验所用的硬件主要是实验箱和集成的七段LED显示板。
共有四个七段LED显示器,采用的是共阴极接法,七段LED的共阴极接地,CE端接低电平,七段LED的阳极接到八个模拟开关上。
改变开关量,则七段LED显示出相应的数字。
将四个七段LED测试完后,全部正常。
硬件调试成功。
2、软件调试:
1)此次实验的设备原因,在正式编程之前要加入一段设备的初始化程序,检查设备,读取设备的一些信息,然后是自己设计代码完成实验要求,
2)来添加的新的任务中要求初始值可以通过逻辑开关随意设置,这就要对C口的PC0~PC7另外编写一段程序进行相应的判断和控制。
这些都不是很困难,关键是编写的程序既要完成些功能又要简短才行。
若程序太长,虽然可以编译并且链接成功,但显得很烦琐,看起来也很费力。
所以,修改的程序时尽量使用循环控制语句来完成的。
3)有太多的判断,再根据判断转去执行不同的操作,这就需要使用标号,但同样的标号如果使用太多就又会给程序产生逻辑上的混乱,所以我使用查表法将要判断的值存入缓冲区中,要判断时就于与缓冲区中的值比较,这样就使得程序简单