微机原理与接口技术课程设计电子时钟东华理工大学详细解析流程图.docx
- 文档编号:24448169
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:27
- 大小:253.63KB
微机原理与接口技术课程设计电子时钟东华理工大学详细解析流程图.docx
《微机原理与接口技术课程设计电子时钟东华理工大学详细解析流程图.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术课程设计电子时钟东华理工大学详细解析流程图.docx(27页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术课程设计电子时钟东华理工大学详细解析流程图
《微机原理与接口技术》
课程设计
课题:
电子时钟的设计与实现
学院:
机械与电子工程学院
专业:
自动化
:
黄乃贝
学号:
09043215
设计部分
1.1设计目的
1、熟练掌握80x86/88教学系统的基本操作和调试程序的各种指令。
2、熟悉编程及调试程序的方法,所学知识的应用能力以及分析问题解决问题的能力得到全面提高。
3、掌握8259中断控制器的工作原理和应用编程方法,练习编写中断程序的方法。
4、掌握8255的各种工作方式及其应用编程。
5、掌握8253定时/计数器的工作原理、工作方式及其应用编程。
6、练习LED-KEYBOARDUNIT的使用方法和数码管的显示编程方法。
7、加强团队合作意识,发挥团队作用与优势。
1.2设计要求
1、用微机原理实验箱提供的数码管和按键做。
2、电子时钟具有二十四小时循环记时功能,走时要准。
显示时、分、秒,要有时钟校正对时功能并方便操作
1.3设计思路
(1)设计好总体思路,规划好电路电路的总体结构,设置好个芯片的地址编码与各种标志位。
(2)用8255的A口驱动六个七段数码管(LED)的字段,B口驱动六位七段数码管(LED)的位控端,右侧开始各两位分别显示:
时、分、秒。
(3)七段数码管采用动态扫描工作方式,每位轮流显示的时间<2ms,扫描频率>50HZ,采用8253定时中断方式,在中断服务程序中完成显示位和容的轮换。
(4)以8253定时中断的时间6ms为基本单位,72ms一次键盘扫描,设计时间缓存区,各种标志位。
电子时钟主要由显示模块、对时模块和时钟运算模块三大部分组成。
其中对时模块和时钟运算模块要对时、分、秒的数值进行操作,并且秒计算到60时,要自己清零并向分进1;分计算到60时,要自己清零并向时进1;时计算到24时,要清零。
这样,才能循环记时。
1.3原理说明
电子时钟主要由8259A中断控制器、8253定时/计数器、8255A接口芯片、六个LED数码显示管和按键组成。
主要用8259A的IRQ3的中断服务程序完成中断查键与动态显示功能。
8253用来产生6ms的脉冲信号作为IRQ3的中断请求信号。
按键用来调时、分、秒。
8255A负责扫描按键得到特征码。
PC作总处理。
第二章实现部分
2.1分析论证
1、显示模块
利用数码管的显示功能来设计。
数码管是由八个条形发光二极管组成的,这些发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。
通过在这八个发光二极管的阳极加+5V或0V的电压使不同的二极管发光,形成不同的字符和数字。
用两个74ls373锁存器来控制显示。
电子时钟用到的是0到9十个数字,他们所对应的字符表依次是3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。
该模块主要是将时钟运算模块放在时间缓存区与暂存区来处理显示的,通过6个数码管动态显示出来。
2、键盘扫描与处理模块
该模块先是调用dos系统时间,再经按键实现对时、分、秒的处理与运算,并把运算出的最终结果存到事先已经开辟的存单元里,以便显示模块即时地显示出来。
8253定时模块负责提供中断信号,中断信号是8253的通道2工作方式为方式3时,产生一个6ms的脉冲信号。
运算模块负责时、分、秒的计算,该模块主要通过8259的IRQ3号中断来实现,首先将秒定时模块提供的中断信号为8259的IRQ3中断请求信号。
但由于每6ms一次中断请求。
所以在中断服务程序必须利用已申请存单元count来统计中断请求的次数,只有当count的值为12时,才扫描按键一次。
另外,在中断服务程序里,必须对秒、分和时的单元的数值进行判断与调时处理,当秒加到60时,分必须加1、秒清零;当分加到60时,时加1、分清零。
当时加到24啊,直接清零。
KeyA用来调时、keyB用来调分、keyC用来调秒,0--9按键来调具体时间(分高低位调时),keyF键来确认调时。
系统框图:
第三部分、芯片简介及初始化
3.18259芯片介绍及初始化
中断控制器8259A是专门为控制优先级中断而设计开发的芯片。
它将中断源优先排队、辨别中断源以及提供中断矢量的电路集于一片中。
因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。
同时,在不需要增加
其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。
8259A的主要功能如下:
①一片8259A可以接受并管理8级可屏蔽中断请求,通过9片8259A级联可扩展至64级可屏蔽中断优先控制。
②对每一级中断都可以通过程序来屏蔽或允许
③在中断响应周期,8259A可为CPU提供相应的中断类型码。
④具有多种工作方式,并可通过编程来加以选择。
通过初始化编程向8259A写入相应的初始化命令ICW,可以使芯片处于一个规定的基本工作方式,并在此方式下
进行工作。
8259A的初始化命令字共有4个ICW1-ICW4,进行初始化时要求ICW1-ICW4按一定的顺序写入。
中断控制器8259的初始化为:
ICW1,用来指示ICW1的标志的D4=1,LTIM为0(即中断请求为边沿触发方式),系统只用一片8259,所以SNGL为1,因为初始化程序将用到ICW4,所以,ICW4为1;
ICW2设置中断类型码的初始化命令字,必须写到8259的奇地址端口中,ICW2是任选的,而ICW2一旦确定下来,8259的8个中断请求信号输入引脚IR0~IR7所对应的8个中断类型码也确定了;
ICW4方式控制初始化命令字,它也要求写入奇地址端口,不过ICW4并不总是需要写入的,只有在ICW1的第0位为1时,才有必要设置ICW4,其中,D7~D5三位总是为0,作为ICW4的标识码,SFNM位为0,BUF位为0,M/S位为0,AEOL位为0,D0为为1表示8259当前所在的系统为16位或32位系统
设置新中断向量程序:
MOVAX,SEGKEYLED;写入新的中断向量
MOVDS,AX
LEADX,KEYLED;取偏移地址
MOVAL,11;IRQ3中断向量类型号
MOVAH,25H
INT21H;写入IRQ3中断向量
STI
3.28253芯片介绍及初始化
8253是NMOS工艺制成的可编程计数器/定时器,有几种芯片型号,外形引脚及功能都是兼容的,只是工作的最高计数速率有所差异,例如8253(2.6MHz),8253-5(5MHz)8253部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
8253初始化:
做为计数器的计数器/定时器8253,在设置好计数初值(即定时常数)后,便开始减1计数,为0时,输出一个信号;控制字设置:
BCD为设置为计数值为二进制格式,模式选择为模式2(即为分频器,当控制字写入后,输出段OUT变为高电平作为初始状态,当计数初值写入初值寄存器后,下一个时钟脉冲时,计数初值被写到计数执行部件,然后计数执行部件做减1计数,减到1时,输出端OUT变为低电平;完成一次计数过程后,输出端OUT又变为高电平,开始一个新的计数过程,由此可以周而复始的进行下去),读写指示位为先写低8位字节,在读写高8位字节,计数器选择计数器0。
其中8253的计数初值为2000,当接1MHZ的脉冲时,分频后的输出值为0.01S。
8253的初始化程序:
MOVDX,TC0+3;8253定时寄存器初始化
MOVAL,01010110B;xuanTD1,xieyigediZJ,gongzuofangshi3
OUTDX,AL
MOVDX,TC0+1;TD1,weidingshiqifuchuzhi
MOVAL,5;LS393OUT8M/8K,T1OUT200HZ
OUTDX,AL;tc1low8=10
3.38255芯片介绍及初始化
8255特性:
(1)一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口.
(2)具有24个可编程设置的I/O口,即使3组8位的I/O口为PA口,PB口和PC口.它们又可分为两组12位的I/O口,A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3).A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O3种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.
图3
8255芯片
8255引脚功能:
RESET:
复位输入线
CS:
芯片选择信号线
RD:
读信号线
WR:
写入信号
D0~D7:
三态双向数据总线
PA0~PA7:
端口A输入输出线
PB0~PB7:
端口B输入输出线
PC0~PC7:
端口C输入输出线
A0,A1:
地址选择线
8255初始化:
可并行通信接口8255的控制字是方式选择控制字,A口工作在方式1(即基本输入方式)下,用来读键值,B口工作在方式0下,为输出做扫描,其初始化为:
8255控制口地址为220h
8255初始化程序:
MOVDX,PA+3;8255控制字
MOVAL,10010000B;PA口输入,PB口输出
OUTDX,AL
MOVPOINT,OFFSETTEMP;输入HCQ
INAL,21H;读8259中断寄存器
第四部分程序部分
程序清单:
;*********用两个74LS373进行数码管的动态显示;一个做段(要显示的笔画)选,一个做位选
PORTSEQU211H;数码管显示地址(选管)
PORTBEQU210H;数码管显示容控制
;*********在8253的定时中断中,通过8255的8个PA口,3个PB口进行扫描
PAEQU220H;8255CS选择信号端
TC0EQU230H;8253CS选择信号端
;*********数据段
DATASEGMENT
COUNT1DB12;扫描键盘中断口标志CM读数码管
COUNT2DB13;延世13次中断标志
KREPDB0;防止连击标志,krep=0:
无键按下
KSHAKEDB0;键盘防抖
KFLAGDB0;功能键标志位kflag=1,2,3--key(A\B\C)pressed,4--key(F)pressed
SYMBLDB0;显示标志位0--displaybufer,1--displaytemp
FIRSTDB0;修改标志位check2digit0--hight,1--low
ENTERDB0;在缓冲区里有新的数字?
有则为1
TABLDW57FH,5BFH,5DFH,5EFH,5FEH,5FDH,5FBH,5F7H
DW67FH,6BFH,6DFH,6EFH,6FEH,6FDH,6FBH,6F7H
DW37FH,3BFH,3DFH,3EFH,3FEH,3FDH,3FBH,3F7H
;键盘扫描码
ASCIDB"0123456789ABCDEFGMPRWXYS"
;键盘顺序码
MASEGDB"THEKEY_PREESEDISERROR!
",13,10,'$'
;按键出错提示字符串
NUMERRDB13,10,"THEENTEREDDIGITISERROR,INPUTAGAIN!
",13,10,'$'
;无效时间提示字符串
LED8DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H
DB77H,7CH,39H,5EH,79H,71H,80H,76H,38H,05CH
;显示编码表
POINTDW?
ORDERDW0
BUFERDB11H,0EH,12H,12H,0H,13H
;hh:
mm:
ss;'HELLOo'-atstarts;LED初始显示状态
TEMPDB6DUP(0);时间缓存区
SELECTDB1,2,4,8,10H,20H
OLDSEGDW0;保持初始中断向量段地址
OLDOFFDW0;保存偏移地址
DATAENDS
;**************代码段********************
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
MAIN:
MOVAX,DATA
MOVDS,AX
MOVDX,PORTB
MOVAL,00
OUTDX,AL;熄灭所有数码管
MOVAH,35H;保存原来的中断向量
MOVAL,11
INT21H
MOVOLDSEG,ES
MOVOLDOFF,BX
MOVAX,SEGKEYLED;写入新的中断向量
MOVDS,AX
LEADX,KEYLED;取偏移地址
MOVAL,11;IRQ3中断向量类型号
MOVAH,25H
INT21H;写入IRQ3中断向量
STI
MOVAX,DATA;CSH数据段
MOVDS,AX
MOVES,AX;CSH堆栈段(inHDYmovsb要重新设定堆栈段)
MOVDX,PA+3;8255控制字
MOVAL,10010000B;PA口输入,PB口输出
OUTDX,AL
MOVPOINT,OFFSETTEMP;输入HCQ
INAL,21H;读8259中断寄存器
ANDAL,0F7H;11111011b
OUT21H,AL;开IRQ3
MOVDX,TC0+3;8253定时寄存器初始化
MOVAL,01010110B;xuanTD1,xieyigediZJ,gongzuofangshi3
OUTDX,AL
MOVDX,TC0+1;TD1,weidingshiqifuchuzhi
MOVAL,5;LS393OUT8M/8K,T1OUT200HZ
OUTDX,AL;tc1low8=10
STEP:
MOVAH,1;按任意键退出
INT16H
JZSTEP
MOVDX,OLDOFF;恢复IRQ3中断向量
MOVAX,OLDSEG
MOVDS,AX
MOVAL,11
MOVAH,25H
INT21H;重新写入原来的IRQ3的中断向量地址
MOVAH,4CH
INT21H
;***********************中断子程序,进行键盘扫描及显示*********************
KEYLEDPROCFAR;每72ms进入一次键盘扫描程序
PUSHAX;寄存器A压栈
STI;开中断
DECCOUNT1;-1,到72ms的话要扫描键盘
JZSCANK;到72ms的话进行键盘扫描
JMPDISP;否则进行显示
SCANK:
MOVCOUNT1,12;72ms初始化数字,为下次扫描键盘准备
DECCOUNT2;72*13ms=1s?
N扫描
JNZKSCAN;去扫描键盘
MOVCOUNT2,13;恢复count2,为下次读实时时间准备
;*******通过BIOS功能调用读系统时间,并处理后的ASCII数值放入BUFER缓冲区
★★★★CX16位从高到低没四位分别存放时的高低位分的高低位☆☆☆☆☆
READT:
MOVAH,2;读BIOS中系统的时间
INT1AH;(CH:
CL)=时:
分,(DH:
DL)=秒:
1/100秒
MOVAX,CX;放到AX中,
MOVDI,OFFSETBUFER;DI指向时间缓冲区
MOVCL,4★★★★每次都低四位的值
ROLAX,CL;循环左移,使得小时高位现在为最低位
MOVBL,AL;保存到BL中
ANDBL,0FH;处理,得到小时的高位
MOV[DI],BL;将小时的高位放入缓冲区中
INCDI
ROLAX,CL;小时的低位处理,放入缓冲
MOVBL,AL
ANDBL,0FH
MOV[DI],BL
INCDI
ROLAX,CL;分钟的高位处理,放入缓冲区
MOVBL,AL
ANDBL,0FH
MOV[DI],BL
INCDI
ROLAX,CL;分钟的低位处理,放入缓冲区
MOVBL,AL
ANDBL,0FH
MOV[DI],BL
INCDI
MOVAX,DX;秒的高位处理,放入缓冲区
ROLAX,CL;★★★★DX存放秒的数值
MOVBL,AL
ANDBL,0FH
MOV[DI],BL
INCDI
ROLAX,CL;秒的低位处理,放入缓冲区
MOVBL,AL
ANDBL,0FH
MOV[DI],BL
;**********键盘扫描
KSCAN:
MOVCOUNT1,12;SMJPCXduan
MOVDX,PA+1;利用线路翻转法扫描键盘
MOVAL,0;PB口输出低电平
OUTDX,AL
MOVDX,PA;读PA口
INAL,DX
CMPAL,0FFH;AL=0FFH?
是的话没有按键,否则有键按下
JNEPRE;不相等,说明有键按下
MOVKREP,0;按键被释放,置KREP=0★★★★
JMPDISP;无键按下,停止扫描,继续显示
;***********判断是否进行过防抖处理,如果KREP为0且有键按下,则下次中断扫描键盘要防抖动
PRE:
CMPKSHAKE,1
JESCAN;已经进行过防抖处理?
MOVKSHAKE,1
JMPDISP;没有进行过防抖处理,则设立防抖处理标志,并跳出进行显示
;***************判断是否是重复按键,防止误操作
SCAN:
CMPKREP,1;是否有键按下?
JNESCAN1;有键按下转移到SCAN1
JMPDISP;没有,上次按键已被释放
SCAN1:
MOVKREP,1;另一键按下,置标志位KREPanotherkeyispressed★★★★置KREP=0为0才进行按键处理
MOVKSHAKE,0;清重复按键及防抖标志
MOVCX,3;有键按下,扫描列三次SOMEKEYPREESED,SCANCO
MOVBL,0FEH;PB口一位置0。
逐次从低位到高位'0'FROMLOWBITT
NEXT:
MOVAL,BL
MOVDX,PA+1
OUTDX,AL
MOVDX,PA;写PB(一位为0)OUT
INAL,DX;读PA
CMPAL,0FFH;如果PA=FF,这一列无键按下
JNEKEYON
ROLBL,1;扫描下一列
LOOPNEXT
JMPDISP;一次循环扫描结束ONECIRCLESCANEND
KEYON:
ANDBL,7
MOVAH,BL;组合键码AX=PRESSEDKEYCODE
EFECT:
LEADI,TABL;查表得到键码地址SEARCHPRESSEDKEY'LOC
CLD;清除方向标志
MOVCX,24
REPNESCASW;★★★★与TABL里的特征码进行比较相等则JEl1得到特征码
JEl1
JMPERR;提示出错NOTHINGFOUND
l1:
SUBDI,2;★★★★减去处理后DI自加的部分(读ASCII有用到)
SUBDI,OFFSETTABL;★★★★得到TABL中的相对位置
SHRDI,1;逻辑右移DI/2★★★★因为TABL的地址是双字节LEDS段时单字节所以要除以2使得相互匹配。
MOVAL,ASCI[DI];得到键码GETPRESSEDKEY'ASCII
;*************宏,将BUFER中的容移动到TEMP中去
BUFMOVMACRO
MOVSI,OFFSETBUFER
MOVDI,OFFSETTEMP
MOVCX,6
CLD
REPMOVSB
MOVSYMBL,1;symbl=1,displaythetemp
ENDM
MOVDL,AL
MOVAH,2
INT21H;得到按键,并在屏幕上显示相应的ASCII
;键盘处理子程序,处理各个按键
;KFLAG------有键按下标志,如果有键按下为1
;FIRST------上次有键按下?
;SYMBL------显示容选择,1时显示TEMP,0时显示BUFER容
KA:
CMPAL,'A';按下A键?
调整小时
JNEKB
MOVKFLAG,1
MOVFIRST,0;判断修改
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 课程设计 电子 时钟 东华 理工大学 详细 解析 流程图