电子时钟设计最终版讲解Word格式文档下载.docx
《电子时钟设计最终版讲解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《电子时钟设计最终版讲解Word格式文档下载.docx(20页珍藏版)》请在冰点文库上搜索。
分计算到60时,要自己清零并向时进1;
时计算到24时,要清零。
这样,才能循环记时。
本系统设计的电子时钟以8088微处理器作为CPU,用8253做定时计数器产生时钟频率,8255做可编程并行接口显示时钟和键盘电路,8259做中断控制器产生中断。
在此系统中,8253的功能是定时,接入8253的CLK信号为周期性时钟信号。
8253采用计数器0,工作于方式2,使8253的OUT0端输出周期性的负脉冲信号。
即每隔20ms,8253的OUT0端就会输出一个负脉冲的信号,此信号接8259的IR2,当中断到50次数后,CPU即处理,使液晶显示器上的时间发生变化。
其中8259只需初始化ICW1,其功能是向8259表明IRx输入是电瓶触发方式还是上升沿触发方式,是单片8259还是多片8259。
8259接收到信号后,产生中断信号送CPU处理。
1、中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。
它将中断源优先排队、辨别中断源以及提供中断矢量的电路集中于一片中。
因此无需附加任何电路,只需对8259A编程,就可以管理
8级中断,并选择优先模式和中断请求方式,即中断
图3.18259A引脚图
结构可以由用户编程来设定。
在MD微机系统中,8259
芯片工作于单片方式。
2、8259引脚图如图3.3,各引脚功能如下D7~D0——八条双向数据线;
WR(低电平有效)——写输入信号;
RD(低电平有效)——读输入信号;
CS(低电平有效)——片选输入信号;
A0——地址信号;
INT——中断请求信号;
INTA(低电平有效)——中断响应信号;
CAS0~CAS—2—级联信号,形成一条专用
8259A总线,以便多片8259A的级联;
SP/EN——从编程/允许级联。
在缓冲方式中,可用做输出信号以控制总线缓冲器的接收和发送。
在非缓冲方式中,作为输入信号用于表示主片还是从片;
IR0~IR7——外部中断请求输入线。
要求输入的中断请求信号是由低电平到高电平的上升沿(并保持高电平到CPU响应时为止)或者是高电平。
3、8259中断矢量地址与中断信号之间的关系如表3.1所示:
表3.18259A中断矢量表
中断序
号
1
2
3
4
5
6
7
功能调
用
08H
09H
0AH
0BH
0CH
0DH
0EH
0FH
矢量地
20H
24H
28H
2CH
30H
34H
38H
3CH
址
23H
27H
2BH
2FH
33H
37H
3BH
3FH
说明
时钟
键盘
可用
串行
口
1、8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种工作方式下工作:
方式0—基本输入/输出方式
方式1—选通输入/输出方式方式2—双向选通输入/输出方式8255引脚图如图3.2示,各引脚功能如下。
D7~D0——与CPU侧连接的八条双向数据线;
A0、A1——片内寄存器选择输入信号;
PA7~PA0——A口外设双向数据线;
PB7~PB0——B口外设双向数据线;
PC7~PC0——C口外设双向数据线;
RESET——复位输入信号
2、8255端口地址
表3.28255端口地址表
信号线
寄存器
编址
IOY3
A口
60H
B口
61H
62H
C口
控制寄存器63H
3.38253芯片的内部结构及引脚
1、8253可编程定时/计数器是Intel公司生产的通用外围芯片之一,有3个独立的十六位计数器,技术频率范围为0~2MHZ,它所有的技术方式和操作方式都通过编程控制。
8253的功能用途是:
(1)
延时中断
(2)
可编程频率发生器
(3)
事件计数器
(4)
二进倍频器
(5)
实时时钟
(6)
数字单稳
(7)
复杂的电机控制器
2、8253有六种工作方式:
图3.38253引脚图
1)方式0:
计数结束中断
2)方式1:
3)方式2:
频率发生器
4)方式3:
方波频率发生器
5)方式4:
软件触发的选通信号
6)方式5:
硬件触发的选通信号
3、8253引脚图如图3.3示,各引脚功能如下。
D7~D0——八条双向数据线;
WR(低电平有效)——写输入信号;
RD(低电平有效)——读输入信号;
CS(低电平有效)——片选输入信号;
A0、A1——片内寄存器地址输入信号;
CLK——计数输入,用于输入定时基准脉冲或计数脉冲;
OUT——输出信号,以相应的电平指示计数的完成,或输出脉冲波形;
GATE——选通输入(门控输入),用于启动或禁止计数器的操作,以使计数器和计测对象同步。
4、8253端口地址
表3.38253端口地址表
IOY2
0#计数器
40H
1#计数器
41H
2#计数器
42H
控制寄存器
43H
第四章电路实现
1、显示模块利用数码管的显示功能来设计。
数码管是由八个条形发光二极管组成的,这些发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。
通过在这八个发光二极管的阳极加+5V或0V的电压使不同的二极管发光,形成不同的字符和数字。
电子时钟用到的是0到9十个数字,他们所对应的字符表依次是3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。
该模块主要是将时钟运算模块和对时模块运算出来并存放在内存单元里的十六进制表示的时位和分位数据转化十进制,并通过四个数码管显示出来。
该模块实现的硬件是TND86/88的LED-KEYBOARDUNIT。
2、时钟运算模块
该模块的主要功能是对时、分、秒的运算,并把运算出的最终结果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。
该模块可以细分为秒定时模块和运算模块。
秒定时模块负责提供中断信号,由于CPU运算模块中的指令消耗一定的时间,所以中断信号最好通过硬件来实现,可以选择TND86/88实验箱中的8253定时/计数器来提供,但又因为8253所能提供的信号的周期时毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在内存里开辟存储单元。
中断信号是8253的通道2工作方式为方式3时,产生一个40ms的脉冲信号。
运算模块负责时、分、秒的计算,该模块主要通过8259的IRQ7号中断来实现,首先将秒定时模块提供的中断信号为8259的IRQ7中断请求信号。
但由于每40ms一次中断请求。
所以在中断服务程序必须利用已申请内存单元count来统计中断请求的次数,只有当count的值为25时,才能让秒单元内的数值加1。
另外,在中断服务程序里,必须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1、秒清零;
当分加到60时,时加1、分清零。
当时加到24啊,直接清零。
3、对时模块该模块主要功能是修改时、分内存单元的数值。
在对时的时候,秒应停止不变,并且在对分进行调整的时,时单元内的数值不变。
由以上分析可见,对时、分的调整用两个优先级高于IRQ7
的中断来完成。
因此,可以用8259的IRQ2中断来实现,两个中断源的中断请求信号只需直接接在两个按键即可起到对时作用。
电子时钟的完整电路图如下:
电子时钟主要由8259A中断控制器、8253定时/计数器、8255A
接口芯片、LED数码显示管和两个按键组成。
主要用8259A的IRQ7的中断服务程序完成秒、分、时的运算即计时功能,IRQ6的中断服务程序完成调时、调分功能。
8253用来产生50ms的脉冲信号作为IRQ7的中断请求信号。
按键KK1+和KK2+分别作为IRQ2和IRQ6的中断请求信号。
按键KK1+启动/关闭对时功能。
它决定是否屏蔽IRQ7和IRQ6中断源。
8255A负责将内存里的时位和分位值输出到数码管
1、8259A的主要功能:
(1)每片8259A可管理8级优先级中断源,通过开关,最多可管理64级优先权的中断源。
(2)对任何一个级别的中断源都可单独进行屏蔽,使该级中断请求暂时被挂起,直到取消屏蔽时为止。
(3)能向CPU提供可编程的标识码。
(4)具有多种中断优先权管理方式。
有完全嵌套方式、自动循环方式、特殊循环方式、特殊屏蔽方式和查询方式五种。
这些管理方式均可通过程序动态地进行变化。
在本设计中用到了这四种功能,电子时钟的灵活调时功能就是通过对级别的屏蔽或开启来实现的。
2、8255A的主要功能:
可编程外设接口芯片可由程序改变其功能,通用性强、使用灵活。
通过8255A,CPU可直接同外设相连接,其负责CPU和外设之间的数据传送。
3、8253的主要功能:
可编程定时器/计数器,其定时与计数功能可由程序灵活地设
定,设定后与CPU并行工作,不占用CPU的时间。
通道2工作在3方式下,提供计算一秒的中断请求信号
4.5程序框图
1、显示模块流程图
2、中断服务程序IRQ7流程图
IRQ6流程图
IRQ2流程图
OFF=OFF+1
Yes
OFF=3?
No
IRQ6
中断服务
IRQ2中断
程序IRQ2
OFF=1?
3、中断服务程序
4、中断服务程序
OFF=2?
M=M+1
IRET
M=60
H=H+1
H=24?
M=0
服务
IRQ6中断
开IRQ2和IRQ6中
OFF=0屏蔽IRQ7
中断
程序
H=0
OFF=0屏蔽IRQ6中断,开IRQ2和IRQ7中断
第五章原程序编写
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
DATASEGMENT
HDW000CH
MDW0000H
SDW0000H
COUNTDW0000H
OFFDW0000H
TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
7FH,6FH
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
PUSHDS;
把DS压入堆栈
MOVAL,81H;
8255初始化A口方式0,输
出,B口方式0,输出,
OUT63H,AL
MOVAX,0000H
MOVDS,AX;
设置中断向量表,将内存段设置在最
低端
MOVAX,OFFSETIRQ2;
取中断处理子程序IRQ2首
地址之段内偏移地址
ADDAX,2000H
MOVSI,0028H;
4*n地址
MOV[SI],AX;
将段内偏移地址写入中断向量表
MOVAX,0000H;
使中断处理子程序IRQ2首地址
之段地址为0
MOVSI,002AH;
4*n+2地址
将段地址写入中断向量表48*n+2处
MOVAX,OFFSETIRQ6;
取中断处理子程序IRQ2
首地址之段内偏移地址
MOVSI,0038H
MOV[SI],AX
使中断处理子程序IRQ2首地址之段地址为0
MOVSI,003AH
MOVAX,OFFSETIRQ7;
取中断处理子程序IRQ6首地址之段内偏移地址
MOVSI,003CH
使中断处理子程序IRQ7首地址之段地址为0
MOVSI,003EH
MOVAL,0B6H;
8253初始化,计数器2,先低后高两字节,方式3,二进制计数
OUT43H,AL;
写入控制字
MOVAL,68H
OUT42H,AL;
写入低字节
MOVAL,0BAH
写入高字节
POPDS;
把DS弹出堆栈
MOVAL,1B;
8259初始化,写ICW1
OUT20H,AL
MOVAL,70H;
写ICW2,写中断向量码
OUT21H,AL
MOVAL,7BH;
写OCW1,屏蔽IRQ6中断,开IRQ2和IRQ7
BEGIN:
CALLDIS;
调用显示程序
STI;
使IF置1,开中断
JMPBEGIN
IRQ7:
INCCOUNT
CMPCOUNT,25;
判断是否到1秒
JNZRETURN
MOVAX,0
MOVCOUNT,AX;
够1秒时将COUNT清零
MOVAX,S;
取秒
INCAX;
秒加1
MOVS,AX
CMPAX,003CH;
判断是否到60秒
MOVS,AX;
秒清零
MOVBX,M;
取分
INCBX;
分加1
MOVM,BX
CMPBX,003CH;
判断是否到60分
MOVBX,0
MOVM,BX;
分清零
MOVDX,H;
取时
INCDX;
时加1
MOVH,DX
CMPDX,0018H;
判断是否到24小时
MOVDX,0
MOVH,DX;
时清零
RETURN:
MOVAL,7BH
OUT21H,AL;
MOVAL,20H
OUT20H,AL;
写OCW2,一般EOI
IRET;
中断返回
IRQ6:
MOVAX,OFF;
取,OFF值
CMPAX,0001H;
判断OFF是否为1
JNZHR否,转到HR
HR:
R0:
和IRQ6
IRQ2:
R1:
和IRQ7
JNZR0
到60分则清零
JMPR0
CMPAX,0002H;
判断OFF是否为2
MOVBX,H;
MOVH,BX
CMPBX,0018H;
MOVH,BX;
MOVAL,0BBH;
初始化8259
写OCW1,屏蔽IRQ7中断,开IRQ2
INCOFF;
加1
MOVBX,OFF;
取OFF值
CMPBX,0003H;
判断OFF是否为3
JZR1;
是则转到R1
CMPBX,0001H;
JZR2;
是则转到R2
CMPBX,0002H;
MOVBX,0000H
MOVOFF,BX;
OFF清零
8259初始化
写OCW1,屏蔽IRQ6中断,开IRQ2
R2:
MOVAL,0BBH;
写OCW1,屏蔽IRQ7中断,开IRQ2和IRQ6
DIS:
PUSHAX
MOVSI,3000H
MOVAX,M;
MOVBL,10
DIVBL;
将分的十六进制转为十进制
MOV[SI],AH;
存分个位
MOV[SI+1],AL;
存分十位
MOVAX,H;
将时的十六进制转为十进制
MOV[SI+2],AH;
MOV[SI+3],AL;
MOVDL,0F7H;
使分个位的数改变
MOVAL,DLAGAIN:
OUT60H,AL
MOVAL,[SI]
MOVBX,OFFSETTABLE;
取TABLE中的偏移地址放到BX中
ANDAX,00FFH;
取低八位
ADDBX,AX
MOVAL,[BX];
找到对应的数码管字符
OUT61H,AL;
输出相应数字
CALLDALLY
INCSI;
取下一个数MOVAL,DL
TESTAL,01H判断DL最低位是否为1JZOUT;
是则跳出
RORAL,1;
使AL向右循环移位,将最低位移到最
高位
MOVDL,AL
JMPAGAIN
OUT:
POPAX
RET
DALLY:
PUSHCX
MOVCX,000FH
T1:
MOVAX,0020H
T2:
DECAX
JNZT2
LOOPT1
POPCX
CODEENDS
ENDSTART
本电子时钟可以24小时循环计时,并且具有调时功能,操作方法如下:
开机运行后,即显示初始时间12:
00整。
按动一下KK1+按键即可启动调分,此时每按动一下KK2+按键分位数字加1,完成对分的调整;
再按动一下KK1+按键启动调分,此时每按动一下KK2+按键时位加1,完成对时的调整。
再按一下KK1+按键即关闭功能正常计时。