数字电子钟及钟控显示系统设计.docx
《数字电子钟及钟控显示系统设计.docx》由会员分享,可在线阅读,更多相关《数字电子钟及钟控显示系统设计.docx(18页珍藏版)》请在冰豆网上搜索。
![数字电子钟及钟控显示系统设计.docx](https://file1.bdocx.com/fileroot1/2023-1/14/6733de6f-cf2f-4207-831b-0643c1bf8db4/6733de6f-cf2f-4207-831b-0643c1bf8db41.gif)
数字电子钟及钟控显示系统设计
论文题目:
__数字电子钟及钟控显示系统设计__
一、课程设计目的1
二、使用设备1
三、设计内容1
四、设计要求1
五、设计原理2
1、总体设计框图和各部分电路工作原理分析2
2、系统中各芯片的内部结构3
(1)8255芯片的内部结构及引脚3
(2)8253芯片的内部结构及引脚5
(3)8259芯片的内部结构及引脚7
(4)Intel8088微处理器9
六、软件设计11
1、程序流程图11
2、程序清单13
3、程序分析16
七、设计体会17
八、参考文献17
一、课程设计目的
通过课程设计进一步理解所学的相关可编程芯片的原理、内部结构、使用方法等,学会相关可编程芯片实际应用及编程。
二、使用设备
TDS-MD微机实验系统
三、设计内容
利用TDS-MD微机实验系统设计数字电子钟及钟控显示装置(包括软硬件设计、调试)。
四、设计要求
1、设计8088/8086CPU在最小工作方式构成的微机系统原理图。
要求含CPU及存储器。
存储器选择6264。
2、设计8088/8086CPU与可编程并行接口芯片8255的接口电路,用A口输出驱动8个发光二极管。
3、设计8088/8086CPU与可编程定时/计数器8253的接口电路。
4、设计8088/8086CPU与可编程中断控制器芯片8059的接口电路。
5、设计完整的数字钟及中控显示程序。
采用系统配置的液晶显示器。
程序功能为时钟应能显示时、分、秒,每间隔5秒循环点亮发光二极管。
五、设计原理
1、总体设计框图和各部分电路工作原理分析
系统结构框图
1、以8088微处理器作为CPU,6264作为存储器,用8253做定时计数器产生时钟频率,8255做可编程并行接口显示时钟,8259做中断控制器产生中断。
在此系统中,8253的功能是定时,接入8253的CLK信号为周期性时钟信号。
8253采用计数器0#,工作于方式2,使8253的OUT0端输出周期性的负脉冲信号。
因为接入8253的CLK的频率为1.19MHZ,为使输出的负脉冲的周期为20ms,则计数器的初值应设为:
1.19MHZ*20ms=23800(D),转换为16进制即可。
即每隔20ms,8253的OUT0端就会输出一个负脉冲的信号,此信号接8259的IR0端,当中断到50次数后,CPU即处理,使液晶显示器上的时间发生变化。
每隔5m,CPU则使8255的PA口输出,驱动LED灯亮。
其中8259只需初始化ICW1,其功能是向8259表明IRx输入是电瓶触发方式还是上升沿触发方式,是单片8259还是多片8259。
8259接收到信号后,产生中断信号送CPU处理。
2、硬件设计原理图:
设计电路总框图
2、系统中各芯片的内部结构
(1)8255芯片的内部结构及引脚
1、8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种工作方式下工作:
方式0—基本输入/输出方式
方式1—选通输入/输出方式
方式2—双向选通输入/输出方式
8255引脚图如下:
8255引脚图
8255一共有40条引脚,其中
D7~D0——与CPU侧连接的八条双向数据线;
WR(低电平有效)——写输入信号;
RD(低电平有效)——读输入信号;
CS(低电平有效)——片选输入信号;
A0、A1——片内寄存器选择输入信号;
PA7~PA0——A口外设双向数据线;
PB7~PB0——B口外设双向数据线;
PC7~PC0——C口外设双向数据线;
RESET——复位输入信号
2、8255端口地址
信号线
寄存器
编址
IOY3
A口
60H
B口
61H
C口
62H
控制寄存器
63H
3、8255内部结构图如下:
(2)8253芯片的内部结构及引脚
1、8253可编程定时/计数器是Intel公司生产的通用外围芯片之一,有3个独立的十六位计数器,技术频率范围为0~2MHZ,它所有的技术方式和操作方式都通过编程控制。
8253的功能用途是:
(1)延时中断
(2)可编程频率发生器
(3)事件计数器
(4)二进倍频器
(5)实时时钟
(6)数字单稳
(7)复杂的电机控制器
8253有六种工作方式:
(1)方式0:
计数结束中断
(2)方式1:
可编程频率发生器
(3)方式2:
频率发生器
(4)方式3:
方波频率发生器
(5)方式4:
软件触发的选通信号
(6)方式5:
硬件触发的选通信号
8253引脚图如下:
8253一共有24条引脚,其中
D7~D0——八条双向数据线;
WR(低电平有效)——写输入信号;
RD(低电平有效)——读输入信号;
CS(低电平有效)——片选输入信号;
A0、A1——片内寄存器地址输入信号;
CLK——计数输入,用于输入定时基准脉冲或计数脉冲;
OUT——输出信号,以相应的电平指示计数的完成,或输出脉冲波形;
GATE——选通输入(门控输入),用于启动或禁止计数器的操作,以使计数器和计测对象同步。
2、8253端口地址
信号线
寄存器
编址
IOY2
0#计数器
40H
1#计数器
41H
2#计数器
42H
控制寄存器
43H
3、8253内部结构图如下:
(3)8259芯片的内部结构及引脚
1、中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。
它将中断源优先排队、辨别中断源以及提供中断矢量的电路集中于一片中。
因此无需附加任何电路,只需对8259A编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。
在MD微机系统中,8259芯片工作于单片方式。
8259引脚图如下:
8259一共有28条引脚,其中
D7~D0——八条双向数据线;
WR(低电平有效)——写输入信号;
RD(低电平有效)——读输入信号;
CS(低电平有效)——片选输入信号;
A0——地址信号;
INT——中断请求信号;
INTA(低电平有效)——中断响应信号;
CAS0~CAS2——级联信号,形成一条专用8259A总线,以便多片8259A的级联;
SP/EN——从编程/允许级联。
在缓冲方式中,可用做输出信号以控制总线缓冲器的接收和发送。
在非缓冲方式中,作为输入信号用于表示主片还是从片;
IR0~IR7——外部中断请求输入线。
要求输入的中断请求信号是由低电平到高电平的上升沿(并保持高电平到CPU响应时为止)或者是高电平。
2、8259中断矢量地址与中断信号之间的关系如下表所示:
中断序号
0
1
2
3
4
5
6
7
功能调用
08H
09H
0AH
0BH
0CH
0DH
0EH
0FH
矢量地址
20H
~
23H
24H
~
27H
28H
~
2BH
2CH
~
2FH
30H
~
33H
34H
~
37H
38H
~
3BH
3CH
~
3FH
说明
实时钟
键盘
可用
可用
串行口
可用
可用
可用
3、8259内部结构图如下:
(4)Intel8088微处理器
1、8088微处理器是Intel公司推出的一个准16位处理器,其内部结构基本上和8086相同,其引脚信号也和8086基本相同,只是各别的引脚的功能有所不同。
8088微处理器的工作方式:
(1)最小工作方式。
当8088CPU的MN/MX引脚接+5V电源时,8088CPU工作于最小方式,用于构成小型的单处理机系统。
(2)最大工作方式。
当8088CPU的MN/MX引脚接地时,8088CPU工作于最大方式,用于构成多处理机和协处理机系统。
2、8088引脚图如下:
AD7~AD0——八条地址/数据复用线;
A15~A8——单一的地址线;
SS0——状态信号线。
该引脚在最大工作方式下保持高电平,在最小方式下等效于最大方式下S0的作用,它与IO/M、DT/R组合以确定当前的总线周期;
A19/S6~A16/S3——地址/状态总线;
MN/MX——最小/最大方式控制;
RD——读控制;
TEST——等待测试控制;
READY——等待状态控制;
NMI——不可屏蔽中断请求;
INTR——可屏蔽中断请求;
CLK——系统时钟;
Vcc——+5V电源;
GND——接地;
最小方式信号:
HOLD——保持请求;
HLDA——保持响应;
WR——写控制;
IO/M——IO/存储器控制;
DT/R——数据发送/接收;
DEN——数据允许;
ALE——地址锁存允许;
INTA——中断响应;
最大方式信号:
RQ/GT1,0——请求/允许总线访问控制;
LOCK——总线优先权锁定控制
S2S1S0——总线周期状态;
QS1、QS0——指令队列状态;
六、软件设计
1、程序流程图:
2、程序清单
主程序:
地址助记符
2000MOVAH,00;中断程序入口地址
2003MOVW[0020],AX
2006MOVAX,0000
2009MOVW[0020],AX
200CINAL,21
200EANDAL,FE
2010OUT21,AL
2012MOVAL,82;8255的初始化
2014OUT63,AL;A口做为输出口,并采用0工作方式
2016MOVAL,34;8253的初始化
2018OUT43,AL;用0#计数,方式2,并以16进制计数
201AMOVAL,F8;置计数器的初值为5CF8H,及负脉冲周期为20ms
201COUT40,AL
201EMOVAL,5C
2020OUT40,AL
2022MOVB[3600],00;存放中断的次数
2027MOVB[3601],32;秒单元
202CMOVB[3602],00;分单元
2031MOVB[3603],00;小时单元
2036MOVB[3604],3A;’:
’的ASCⅡ值
203BMOVB[3605],7F;8255的PA口的初值
2040MOVB[3606],00
2045MOVB[3607],41;”A”
204AMOVB[3608],50;”P”
204FMOVB[3609],4D;”M”
2055MOVAL,B[3603];显示时间代码段
2058CMPAL,01
205AJZ2065
205CMOVAL,B[3607]
205FMOVAH,01
2061INT10
2063JMP206C
2065MOVAL,B[3608]
2068MOVAH,01
206AINT10
206CMOVAH,B[3609]
206FMOVAH,01
2071INT10
2073MOVAL,B[3603];显示小时
2076CALL2555
2079MOVAL,B[3604];”:
”
207CMOVAH,01
207EINT10
2080MOVAL,B[3602];显示分钟
2083CALL2555
2086MOVAL,B[3604];”:
”
2089MOVAH,01
208BINT10
208DMOVAL,B[3601];显示秒
2090CALL2555
2093MOVAL,OD;换行操作
2095MOVAH,01
2097INT10
2099MOVBL,B[3606];判断秒是否发生变化
209DMOVBH,B[3601]
20A1CMPBL,BH
20A3JZ20C6
20A5CALL3000
20A8MOVAH,00;达到5秒后,使PA口输出,驱动LED灯
20AAMOVAL,B[3601]
20ADMOVBL,05
20AFDIVBL
20B1CMPAH,00
20B4JNZ2054
20B6MOVAL,B[3605]
20B9ROLAL,1
20BBOUT60,AL
20BDMOVB[3605],AL
20COMOVAL,B[3601]
20C3MOVB[3606],AL
20C6CALL3000
20C9JMP2054
中断计时:
2500CLI
2051PUSHAX
2052MOVAL,B[3600]
2505INCAL
2506CMPAL,32;判断8253的OUT0断是否发出了50次脉冲,
即判断是否达到1秒
2509JNZ2550
2511MOVB[3600],00
2514MOVAL,B[3601];时间的变化;采用12小时制
2517INCAL
2519CMPAL,3C
251BJNZ2541
251EMOVB[3601],00
2520MOVAL,B[3602]
2523INCAL
2525CMPAL,3C
2527JNZ2546
2529MOVB[3602],00
252CMOVAL,B[3603]
252FINCAL
2531CMPAL,0D
2533JNZ254B
2535MOVB[3603],01
253ASTI
253BPOPAX
253CMOVAL,20
253EOUT20,AL
2540ITER
2541MOVB[3601],AL
2544JMP253A
2546MOVB[3602],AL
2549JMP253A
254BMOVB[3603],AL
254EJMP253A
2550MOVB[3600],AL
2553JMP253A
显示程序:
地址助记符
2555MOVAH,00;将16进制转换成ASCⅡ
2557MOVBL,OA
2559DIVBL
255BMOVBL,AH
255DADDAL,30
255FMOVAH,01
2561INT10
2563MOVAL,BL
2565ADDAL,30
2567INT10
2568RET
延时程序:
3000PUSHAX
3001MOVCX,0064
3004MOVAX,0064
3007DECAX
3008JNZ3007
300ALOOP3004
300CPOPAX
300DRET
3、程序分析
(1)调试过程
在调试中遇到了很多问题。
刚开始将程序输入后,无法执行。
此时用反汇编U命令依次的查看输入的源程序,发现2009处,将MOVW[0022],AX中的0022写成了0020。
而使程序无法执行。
改正后,重新执行程序。
可以正确的显示时间。
但当我达到12:
59:
59秒,再过一秒后,此时AM并没有发生改变。
而正常应该变为PM。
按Ctrl+C退出后,检查程序。
经仔细分析,发现2535处,MOVB[3603],01;及到达0D时,将[3606]单元重新设置成了1;而在2058处,语句是CMPAL,0D。
因为[3603]单元中的值无法达到0D,所以AM不会变成PM。
发现这个错误后,将2058处的代码改为:
CMPAL,01。
重新运行,虽然可以顺利的显示12小时制,但发现每隔5秒,LED灯是循环点亮了10次。
仔细分析程序,依然不得其解。
只好请教老师,经过老师的指教,终于发现了问题的所在:
在判断是否达到5秒时,仅仅是判断了是否为5的倍数,而没有判断是否达到了新的1秒。
如:
若此时就是5秒,程序执行即点亮LED灯。
由于程序顺序执行,8253每隔20ms发出一次脉冲,即隔20ms后,又判断是否是5的倍数,而此时根本就没有形成新的秒,但满足是5的倍数的条件,故使LED灯依次的循环点亮。
在判断是否是5秒的倍数之前增加一判断语句,看是否形成了新的1m,是的话,然后才判断是否是5的倍数。
这样就解决了上述所出现的问题;
(2)结果分析
在程序的开始,就分别对8259、8255以及8253-A进行了初始化,然后设置了时钟的秒、分以及小时,这个数据是灵活可改的。
输入程序、运行后,液晶屏幕上从左至右按照“时:
分:
秒”的格式显示“AM/PMXX:
XX:
XX”,并且秒位以每秒递增1的速度变化,即完成数字电子钟的正常显示。
同时,八个发光二极管每隔5秒从1到8依次点亮。
七、设计体会
通过本次课程设计,我进一步理解了所学的相关可编程芯片的原理、内部结构、使用方法等,学会了相关可编程芯片实际应用以及编程的方法。
在老师的指导帮助下,顺利完成了该硬件、软件的设计、调试等工作。
通过课程设计,我有了很大的收获。
在课程设计中,我对实验原理有了更加深刻的认识,弄懂了TDS-MD微机的汇编方式以及硬件电路设计与微机的兼容性,对8055、8053、8059芯片在实际中的应用有了更加深刻的理解。
在调试程序过程中,也使自己的编程与调试程序的能力得到了锻炼,同时理解了汇编、计算机所组成原理以及接口技术这三门课程之间的联系与融合渗透,也使我体会到学习计算机接口技术的乐趣。
八、参考文献
[1]孙德文主编,微型计算机技术[M],北京:
高等教育出版社,2000。
[2]赵明富主编,微机原理及接口技术实验指导书,重庆工学院(院内教材)。