8086数字电子钟的设计论文.docx
- 文档编号:4728477
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:25
- 大小:191.22KB
8086数字电子钟的设计论文.docx
《8086数字电子钟的设计论文.docx》由会员分享,可在线阅读,更多相关《8086数字电子钟的设计论文.docx(25页珍藏版)》请在冰豆网上搜索。
8086数字电子钟的设计论文
论文题目
数字电子钟的设计
指导教师
学生班级
学生姓名
设计内容分析论证
(1)实验线路
(2)理论分析
(3)功能流程
设计条件要求
①具有24/12小时计时;②正点报时;③设置时间;④设置闹钟;⑤显示用数码管;⑥设置按键尽量少;⑦可扩展秒表功能;
设计进程安排
第一周设计任务:
(1):
明确课题对程序功能,运算精度等方面的要求及硬件条件
(2):
把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。
(3):
存储器资源分配
第二周设计任务:
(4):
编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序
(5):
对程序进行汇编,调试和修改,直到程序运行结果正确为止。
文献资料准备
《微型计算机原理及接口技术》中国科技大学出版社吴秀清周荷琴编著
《16-32位微型计算机技术及应用》清华大学出版社戴梅萼史嘉权编著
<<汇编语言程序设计》南京大学出版社姚君遗编著
《汇编语言程序设计教程》清华大学出版社杨记文编著
《微型计算机原理及接口技术》实验指导书
摘要:
以8086或是8066为cpu, 利用8253可编程定时/计数器、8259中断控制器、8255可编程并行接口芯片和七段数码管设计一个电子钟的电路,并编制一段程序使的该电子钟能正常运行。
并且能用手动控制输入的方法修改电子时钟的时间。
主要目的是通过此次课程设计是我们对一般的电子产品的设计有所了解,并在此的基础上更加深入、熟练地学习8086、8253、8259等芯片的基本知识。
关键词:
数字电子钟、8086、8253、8255、中断。
目录
录
一、设计任务书…………………………..2
二、摘要…………………………...……...3
三、目录…………………………………..4
四、设计目的……………………………..5
五、实验连线……………………………..5
六、设计思想……………………………6
七、功能流程图…………………………..7
八、汇编程序………………………..…....8
九、心得体会…………...……………….22
一、设计目的:
(1)熟悉掌握8086/88指令系统。
(2)理解掌握定时/计数器和中断的使用方法。
(3)掌握微机原理实验系统的使用,掌握控制数码管显示的程序。
(4)掌握一定的汇编语言知识,培养自己的动手操作能力。
(5)学习程序设计的基本思路和方法。
二、实验连线
三、设计思想
1、概述:
程序主体设计:
本程序共有分端口设置模块,计数模块,显示模块等几个模块。
C--DISPLAY12,34,56----将闹钟设置为12:
34:
56;
G--GOAHEAD----开中断,闹钟恢复走时
D--STOPTODISPLAY-----关中断,闹钟停止走时
E--EXITTODOS----返回DOS
M--SETTHECLOCK-----设置闹铃时间
F--OPENTHECLOCK-----设置闹钟功能为开
B--CLOSETHECLOCK-----设置闹钟功能为关
P--POSITIONTHEBENINNINGDATE------设置闹钟的时间
2、计时器软件的设计:
主程序中,要对各个用到的芯片进行初始化,目的是使其每20毫秒产生一次方波。
8253A的定时器输出与8259A的IR2连接,计数器0工作在模式3(方波发生器),计数值采用二进制格式,输出作为计数器1的输入,计数器1工作在模式2(分频器),计数值采用二进制格式,输出到总线IRQ2,向CPU发送时钟中断信号,根据两个计数器的设置,系统每隔20毫秒便由8253A产生一次中断请求,即每隔20毫秒执行一次中断处理程序。
这个方法将与时间相关的两个模块即显示模块和计时模块放在中断处理程序中,这样,就保证了数字显示的稳定,中断处理程序完成计时功能要依靠两个方面,因为中断处理程序是每20毫秒执行一次,但计时并不是以20毫秒为单位进行的,而是以秒为单位进行的,所以,计时功能的实现一方面要利用20毫秒这个基准时间单位,另一方面借助一个计数单位。
计数单位的初始值为50,每进行一次中断,便使计数单元的内容减1。
每当计数单元从50减为0时,说明已经过了1秒时间。
并判断是否有进位,如有则进行修改,实现进位。
并在LED上显示。
显示部分:
本程序显示部分用了6个共阴极LED作为显示管,显示程序要做到每送一次段码就送一次位码,每送一次位码后,将位码中的0右移1位作为下次的位码,从而可以实现从左到右使6个LED依次显示出相应的数字。
虽然CPU每隔一定时间便执行显示程序,但只要这个时间段不太长,由于人眼的视觉作用,就可以在6个LED上同时见到数字显示。
四、功能流程图
四、源程序以及注释
;*键盘显示8255LED*;
;*********************;
IO_PLX_DEVICE_IDEQU05406H;TPC卡设备ID
IO_PLX_VENDOR_IDEQU010B5H;TPC卡厂商ID
IO_PLX_SUB_IDEQU0905410B5H;TPC卡子设备及厂商ID
PA55EQU218H-200H;8255端口地址
PB55EQU219H-200H
P55CTLEQU21BH-200H
PORTSEGEQU211H-200H;LED端口地址
PORTBITEQU210H-200H
TIM_CTLEQU203H-200H;8253端口地址
TIMER0EQU200H-200H
TIMER1EQU201H-200H
MODE03EQU36H;0011-0111
MODE12EQU74H;0111-0101
DATASEGMENT
CSREGDW?
IPREGDW?
;旧中断向量保存空间
IO_9054BASE_ADDRESSDB4DUP(0);TPC卡PCI接口芯片I/O基地址暂存空间
IO_BASE_ADDRESSDB4DUP(0);TPC卡I/O基地址暂存空间
INTERRUPT_LINEDB2DUP(0);TPC卡中断号暂存空间
PCICARDNOTFINDDB0DH,0AH,'TPCPCICARDNOTFINDORADDRESS/INTERRUPTERROR!
!
!
',0DH,0AH,'$'
IO9054BASEADDRESSDB0DH,0AH,'TPCPCICARD9054CHIPI/OBASEADDRESS:
','$'
IOBASEADDRESSDB0DH,0AH,'TPCPCICARDI/OBASEADDRESS:
','$'
INTNUMBERDB0DH,0AH,'TPCPCICARDINTERRUPTLINE:
','$'
ENTER_RETURNDB0DH,0AH,'$'
MESSDB'8253ATIMER0INMODE3!
COUNT=0200H',0AH,0DH
DB'8253ATIMER1INMODE2!
COUNT=0AH',0AH,0DH,'$'
MESS1DB'IAMRINGING',0AH,0DH,'$'
IRQ_VECTDB08H,09H,0AH,0BH,0CH,0DH,0EH,0FH,70H,71H,72H,73H,74H,75H,76H,77H
;新的中断向量,中断0-7的向量为:
08H-0FH,中断8-15的向量为:
70H-77H
IRQ_MASK_0_7_TABLEDB011111110B,011111101B,011111011B,011110111B
DB011101111B,011011111B,010111111B,001111111B
DB011111011B,011111011B,011111011B,011111011B
DB011111011B,011111011B,011111011B,011111011B
;新的中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零
IRQ_MASK_8_15_TABLEDB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB011111110B,011111101B,011111011B,011110111B
DB011101111B,011011111B,010111111B,001111111B
;新的中断掩码,中断0-7时全一,中断8-15时从低至高相应位为零
COUNTDB15
CTIMEDB00H,00H,00H,00H,00H,00H
CLOCKDB0AH,0AH,0AH,0AH,0AH,0AH
BUFDB00H,00H,00H,00H,00H,00H;*****************
MYBELLDB00H;***********OFF***INITIALIZE
MONTH3DB0
DAY3DB0
CHAR1DB?
INTMASKDB?
CONST1DW?
LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,79H,00H
TABLE1DW0101H,0201H,0401H,0801H,1001H,2001H,4001H,8001H
DW0102H,0202H,0402H,0802H,1002H,2002H,4002H,8002H
DW0104H,0204H,0404H,0804H,,2004H,4004H,8004H
CHARDB'CDEFBA9845673210RPMG'
;MAXDAYDB00H,1FH,1CH,1FH,1EH,1FH,1EH,1FH,1FH,1EH,1FH,1EH,1FH
MESDB'INSMALLKEYRORD',0AH,0DH
DB'C--DISPLAY12,45,37;G--GOAHEAD',0AH,0DH
DB'D--STOPTODISPLAY;E--EXITTODOS',0AH,0DH
DB'M--SETTHECLOCK;F--OPENTHECLOCK',0AH,0DH
DB'B--CLOSETHECLOCK',0AH,0DH
DB'P--POSITIONTHEBENINNINGDATE',0AH,0DH,'$'
DATAENDS
STACKSSEGMENT
DB100DUP(?
)
STADW512DUP(?
)
TOPEQULENGTHSTA
STACKSENDS
CODESEGMENT
;ASSUMECS:
CODE,DS:
DATA,SS:
STACKS,ES:
DATA
START:
;ENABLELOCALINTERRUPTINPUT
.386
CLI
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,STACKS
MOVSS,AX
CALLFINDTPC;查找TPC卡资源并显示
MOVAH,0
INT1AH;时间中断,保存到DX中
MOVBX,DX
T1:
MOVAH,0
INT1AH
CMPBX,DX
JZT1
MOVBX,DX
MOVSI,0
T2:
MOVAH,0
INT1AH
MOVAX,800H
T3:
DECAX;循环800H次
JNZT3
INCSI
CMPBX,DX
JZT2
MOVAX,30H
MOVBX,SI
MULBX
MOVBX,56H
DIVBX
MOVWORDPTRCONST1,AX
MOVDX,WORDPTRIO_BASE_ADDRESS;初始化8253
ADDDX,TIM_CTL;控制口
MOVAL,MODE03;36H==00110110;计数器0工作在模式3(方波发生器),计数值采用二进制格式
OUTDX,AL
MOVDX,WORDPTRIO_BASE_ADDRESS
ADDDX,TIMER0;计时器0
MOVAL,00H
OUTDX,AL
MOVAL,02H
OUTDX,AL
MOVDX,WORDPTRIO_BASE_ADDRESS
ADDDX,TIM_CTL;74H==01110100;设置计数器1工作在模式2(分频器),计数值采用二进制格式
MOVAL,MODE12
OUTDX,AL
MOVDX,WORDPTRIO_BASE_ADDRESS
ADDDX,TIMER1
MOVAL,0AH
OUTDX,AL
MOVAL,00
OUTDX,AL
MOVDX,OFFSETMES
MOVAH,09
INT21H
MOVDX,WORDPTRIO_9054BASE_ADDRESS
ADDDX,68H;设置TPC卡中9054芯片IO口,使能中断
INAX,DX
ORAX,0900H
OUTDX,AX
MOVBX,WORDPTRINTERRUPT_LINE;保存原中断向量
MOVAL,BYTEPTR[IRQ_VECT+BX]
MOVAH,35H
INT21H
MOVAX,ES
MOVCSREG,AX
MOVIPREG,BX
MOVBX,WORDPTRINTERRUPT_LINE;设置新中断向量
MOVAL,BYTEPTR[IRQ_VECT+BX]
MOVCX,CS
MOVDS,CX
MOVDX,OFFSETINT_PROC
MOVAH,25H
INT21H
MOVAX,DATA
MOVDS,AX
MOVES,AX
INAL,21H;设置中断掩码
MOVBX,WORDPTRINTERRUPT_LINE
MOVAH,BYTEPTR[IRQ_MASK_0_7_TABLE+BX]
ANDAL,AH
OUT21H,AL
INAL,0A1H
MOVBX,WORDPTRINTERRUPT_LINE
MOVAH,BYTEPTR[IRQ_MASK_8_15_TABLE+BX]
ANDAL,AH
OUT0A1H,AL
STI;开中断
;**********************非规定的按键时继续等待*************
;*********************************************************
EXIT:
CLI
MOVBX,WORDPTRINTERRUPT_LINE;恢复中断掩码
MOVAH,BYTEPTR[IRQ_MASK_0_7_TABLE+BX]
NOTAH
INAL,21H
ORAL,AH
OUT21H,AL
MOVBX,WORDPTRINTERRUPT_LINE
MOVAH,BYTEPTR[IRQ_MASK_8_15_TABLE+BX]
NOTAH
INAL,0A1H
ORAL,AH
OUT0A1H,AL
MOVBX,WORDPTRINTERRUPT_LINE;恢复原中断向量
MOVAL,BYTEPTR[IRQ_VECT+BX]
MOVDX,IPREG
MOVCX,CSREG
MOVDS,CX
MOVAH,25H
INT21H
MOVAX,DATA;设置TPC卡中9054芯片IO口,关闭中断
MOVDS,AX
MOVDX,WORDPTRIO_9054BASE_ADDRESS
ADDDX,68H
INAX,DX
ANDAX,0F7FFH
OUTDX,AX
MOVAX,4C00H
INT21H;退出
CLI
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDI
PUSHDS
MOVAX,DATA;INTERRUPTTODO
MOVDS,AX
DEC[COUNT]
JNZDDD
MOV[COUNT],20
MOVDI,OFFSETCTIME
MOVAL,[DI+4]
MOVAH,0AH
MULAH
ADDAL,[DI+5]
CMPAX,59;先判断秒钟是否等于59秒,是则判断分钟,否则加1
JZFENZHONG
INCBYTEPTR[DI+5]
CMPBYTEPTR[DI+5],0AH
JNZDDD
MOVBYTEPTR[DI+5],00H
INCBYTEPTR[DI+4]
JMPDDD
FENZHONG:
MOVWORDPTR[DI+4],0000H;先将秒钟置为0,再转换分钟为十进制形式
MOVAL,[DI+2]
MOVAH,0AH
MULAH
ADDAL,[DI+3]
CMPAX,59;判断是否应该向时钟进位
JZSHIZHONG
INCBYTEPTR[DI+3]
CMPBYTEPTR[DI+3],0AH
JNZDDD
MOVBYTEPTR[DI+3],00H
INCBYTEPTR[DI+2]
JMPDDD
SHIZHONG:
MOVWORDPTR[DI+2],0000
MOVAL,[DI]
MOVAH,0AH
MULAH
ADDAL,[DI+1]
CMPAH,23;判断时钟该不该循环了
JNZQQQ
MOVWORDPTR[DI],0000H
JMPDDD
QQQ:
INCBYTEPTR[DI+1]
CMPBYTEPTR[DI+1],0AH
JNZDDD
MOVBYTEPTR[DI+1],00H
INCBYTEPTR[DI]
DDD:
;将闹铃功能键与闹铃条件的判断放在20次中断计数条件满足后的执行代码中
;有效缩短延迟时间以及误差时间
CMPBYTEPTRMYBELL,00H;检测闹铃有没有开,
JZZZZ
LEADI,CTIME
LEASI,CLOCK
MOVCX,5
CHECK:
;检测门铃时间是否到了
MOVAL,[DI]
MOVBL,[SI]
CMPAL,BL
JNZZZZ
INCDI
INCSI
LOOPCHECK
;**************闹铃时的检测输出
MOVDL,07H
MOVAH,02H
INT21H
LEADX,MESS1
MOVAH,09H
INT21H
MOVBYTEPTRMYBELL,00H
ZZZ:
MOVAL,20H;SENDEOI
OUT0A0H,AL
OUT20H,AL
MOVCX,0FFFFH
LOOPX:
NOP
LOOPLOOPX;延时
POPDS
POPDI
POPSI
POPDX
POPCX
POPBX
POPAX
STI
IRET
INT_PROCENDP
;------------------------------------------------------------------
KEYPROCNEAR;AB口端口读取的控制,是对小键盘的控制
PUSHCX
KST:
MOVAL,82H
MOVDX,WORDPTRIO_BASE_ADDRESS
ADDDX,P55CTL
OUTDX,AL
MOVAL,00H
MOVDX,WORDPTRIO_BASE_ADDRESS
ADDDX,PA55
OUTDX,AL
MOVDX,WORDPTRIO_BASE_ADDRESS
ADDDX,PB55
INAL,DX
ORAL,0F8H
CMPAL,0FFH
JZDELAY
PUSHAX
MOVCX,0A00H;两重循环
DLY:
MOVAX,WORDPTRCONST1
DLY1:
DECAX
JNZDLY1
DECCX
JNZDLY
POPAX
MOVCL,08H
MOVAH,0FEH
SCAN1:
MOVDX,WORDPTRIO_BASE_ADDRESS;行列扫描,得到小键盘输入
ADDDX,PA55
MOVAL,AH
OUTDX,AL
MOVDX,WORDPTRIO_BASE_ADDRESS
ADDDX,PB55
INAL,DX
ORAL,0F8H
CMPAL,0FFH
JNZKEYN
ROLAH,1
DECCL
JNZSCAN1
JMPKST
KEYN:
PUSHAX
MOVDX,WORDPTRIO_BASE_ADDRESS
ADDDX,PB55
RELEA:
INAL,DX
ORAL,0F8H
CMPAL,0FFH
JNZRELEA
POPAX
NOTAX
MOVSI,OFFSETTABLE1
MOVDI,OFFSETCHAR
MOVCX,24
TT:
CMPAX,[SI]
JZNN
DECCX
JZKST
ADDSI,02
INCDI
JMPTT
NN:
MOVDL,[DI]
MOV[CHAR1],DL
MOVAH,02H
INT21H
POPCX
JMPYANG
DELAY:
CALLDISPLY
JMPKST
YANG:
RET
KEYENDP
;---------------------------------------------------------------
DISPLYPROCNEAR;LED的显示部分
PUSHCX
MOVBX,OFFSETLED
MOVCX,0006
MOVSI,OFFSETCTIME
MOVAH,01H
DISPLY1:
CLD
LODSB
XLAT
MOVDX,WORDPTRIO_BAS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8086 数字 电子钟 设计 论文