数字电子钟实施方案Word下载.docx

上传人:b****3 文档编号:6641105 上传时间:2023-05-07 格式:DOCX 页数:29 大小:190.23KB
下载 相关 举报
数字电子钟实施方案Word下载.docx_第1页
第1页 / 共29页
数字电子钟实施方案Word下载.docx_第2页
第2页 / 共29页
数字电子钟实施方案Word下载.docx_第3页
第3页 / 共29页
数字电子钟实施方案Word下载.docx_第4页
第4页 / 共29页
数字电子钟实施方案Word下载.docx_第5页
第5页 / 共29页
数字电子钟实施方案Word下载.docx_第6页
第6页 / 共29页
数字电子钟实施方案Word下载.docx_第7页
第7页 / 共29页
数字电子钟实施方案Word下载.docx_第8页
第8页 / 共29页
数字电子钟实施方案Word下载.docx_第9页
第9页 / 共29页
数字电子钟实施方案Word下载.docx_第10页
第10页 / 共29页
数字电子钟实施方案Word下载.docx_第11页
第11页 / 共29页
数字电子钟实施方案Word下载.docx_第12页
第12页 / 共29页
数字电子钟实施方案Word下载.docx_第13页
第13页 / 共29页
数字电子钟实施方案Word下载.docx_第14页
第14页 / 共29页
数字电子钟实施方案Word下载.docx_第15页
第15页 / 共29页
数字电子钟实施方案Word下载.docx_第16页
第16页 / 共29页
数字电子钟实施方案Word下载.docx_第17页
第17页 / 共29页
数字电子钟实施方案Word下载.docx_第18页
第18页 / 共29页
数字电子钟实施方案Word下载.docx_第19页
第19页 / 共29页
数字电子钟实施方案Word下载.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数字电子钟实施方案Word下载.docx

《数字电子钟实施方案Word下载.docx》由会员分享,可在线阅读,更多相关《数字电子钟实施方案Word下载.docx(29页珍藏版)》请在冰点文库上搜索。

数字电子钟实施方案Word下载.docx

这个方法将与时间相关的两个模块即显示模块和计时模块放在中断处理程序中,这样,就保证了数字显示的稳定,中断处理程序完成计时功能要依靠两个方面,因为中断处理程序是每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'

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

新的中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零

IRQ_MASK_8_15_TABLEDB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB011111110B,011111101B,011111011B,011110111B

新的中断掩码,中断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,1004H,2004H,4004H,8004H

CHARDB'

CDEFBA9845673210RPMG'

MAXDAYDB00H,1FH,1CH,1FH,1EH,1FH,1EH,1FH,1FH,1EH,1FH,1EH,1FH

MESDB'

INSMALLKEYRORD'

C--DISPLAY12,45,37;

G--GOAHEAD'

D--STOPTODISPLAY;

E--EXITTODOS'

M--SETTHECLOCK;

F--OPENTHECLOCK'

B--CLOSETHECLOCK'

P--POSITIONTHEBENINNINGDATE'

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:

INT1AH

CMPBX,DX

JZT1

MOVSI,0

T2:

MOVAX,800H

T3:

DECAX;

循环800H次

JNZT3

INCSI

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

MOVAL,02H

74H==01110100;

设置计数器1工作在模式2(分频器),计数值采用二进制格式

MOVAL,MODE12

ADDDX,TIMER1

MOVAL,0AH

MOVAL,00

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

MOVAX,ES

MOVCSREG,AX

MOVIPREG,BX

设置新中断向量

MOVCX,CS

MOVDS,CX

MOVDX,OFFSETINT_PROC

MOVAH,25H

INAL,21H;

设置中断掩码

MOVBX,WORDPTRINTERRUPT_LINE

MOVAH,BYTEPTR[IRQ_MASK_0_7_TABLE+BX]

ANDAL,AH

OUT21H,AL

INAL,0A1H

MOVAH,BYTEPTR[IRQ_MASK_8_15_TABLE+BX]

OUT0A1H,AL

STI;

开中断

**********************非规定的按键时继续等待*************

*********************************************************

EXIT:

MOVBX,WORDPTRINTERRUPT_LINE;

恢复中断掩码

NOTAH

INAL,21H

ORAL,AH

恢复原中断向量

MOVDX,IPREG

MOVCX,CSREG

MOVAX,DATA;

设置TPC卡中9054芯片IO口,关闭中断

ADDDX,68H

ANDAX,0F7FFH

MOVAX,4C00H

INT21H;

退出

PUSHAX

PUSHBX

PUSHCX

PUSHDX

PUSHSI

PUSHDI

PUSHDS

INTERRUPTTODO

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

MOVBYTEPTR[DI+5],00H

INCBYTEPTR[DI+4]

JMPDDD

FENZHONG:

MOVWORDPTR[DI+4],0000H;

先将秒钟置为0,再转换分钟为十进制形式

MOVAL,[DI+2]

ADDAL,[DI+3]

判断是否应该向时钟进位

JZSHIZHONG

INCBYTEPTR[DI+3]

CMPBYTEPTR[DI+3],0AH

MOVBYTEPTR[DI+3],00H

INCBYTEPTR[DI+2]

SHIZHONG:

MOVWORDPTR[DI+2],0000

MOVAL,[DI]

ADDAL,[DI+1]

CMPAH,23;

判断时钟该不该循环了

JNZQQQ

MOVWORDPTR[DI],0000H

QQQ:

INCBYTEPTR[DI+1]

CMPBYTEPTR[DI+1],0AH

MOVBYTEPTR[DI+1],00H

INCBYTEPTR[DI]

DDD:

将闹铃功能键与闹铃条件的判断放在20次中断计数条件满足后的执行代码中

有效缩短延迟时间以及误差时间

CMPBYTEPTRMYBELL,00H;

检测闹铃有没有开,

JZZZZ

LEADI,CTIME

LEASI,CLOCK

MOVCX,5

CHECK:

检测门铃时间是否到了

MOVBL,[SI]

CMPAL,BL

JNZZZZ

INCDI

LOOPCHECK

**************闹铃时的检测输出

MOVDL,07H

MOVAH,02H

LEADX,MESS1

MOVAH,09H

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口端口读取的控制,是对小键盘的控制

KST:

MOVAL,82H

ADDDX,P55CTL

ADDDX,PA55

ADDDX,PB55

INAL,DX

ORAL,0F8H

CMPAL,0FFH

JZDELAY

MOVCX,0A00H;

两重循环

DLY:

MOVAX,WORDPTRCONST1

DLY1:

DECAX

JNZDLY1

DECCX

JNZDLY

MOVCL,08H

MOVAH,0FEH

SCAN1:

MOVDX,WORDPTRIO_BASE_ADDRESS;

行列扫描,得到小键盘输入

MOVAL,AH

JNZKEYN

ROLAH,1

DECCL

JNZSCAN1

JMPKST

KEYN:

RELEA:

JNZRELEA

NOTAX

MOVSI,OFFSETTABLE1

MOVDI,OFFSETCHAR

MOVCX,24

TT:

CMPAX,[SI]

JZNN

JZKST

ADDSI,02

JMPTT

NN:

MOVDL,[DI]

MOV[CHAR1],DL

JMPYANG

DELAY:

CALLDISPLY

YANG:

RET

KEYENDP

---------------------------------------------------------------

DISPLYPROCNEAR;

LED的显示部分

MOVBX,OFFSETLED

MOVCX,0006

MOVSI,OFFSETCTIME

MOVAH,01H

DISPLY1:

CLD

LODSB

XLAT

ADDDX,PORTSEG

ADDDX,PORTBIT

SHLAH,1

LOOPDISPLY1

DISPLYENDP

CPROPROCNEAR;

C键按下时执行的过程,显示预设时间

MOVWORDPTR[CTIME],0201H

MOVWORDPTR[CTIME+2],0504H

MOVWORDPTR[CTIME+4],0703H

CPROENDP

GPROPROCNEAR;

G键按下时执行的过程,开

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2