PC机实时时钟的设计剖析_第1页
PC机实时时钟的设计剖析_第2页
PC机实时时钟的设计剖析_第3页
PC机实时时钟的设计剖析_第4页
PC机实时时钟的设计剖析_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 PC机实时时钟的设计利用PC机现有的硬件和软件资源设计程序,以实现在显示器上显示XX(时):XX(分): XX (秒)。(1)设计思路PC机系统板上使用一片8253,英地址为40H-43H,英通道0以方式3工作,每55ms 向中断控制器8259A IRQO端发一次中断请求。本设计题要求借用原有电路,重新设置8253 的计数器0每20ms产生一次中断,200次中断后加1秒,然后调整时、分、秒并显示在屏 幕上。(2)实时时钟的功能按下任意键开始显示数据区中存放的时间值,并且每秒更新一次,运行中按下空格键 则停止运行并返回DOSo程序中应保护原系统的08H中断矢量以便退岀时恢复原系统的设 置。(

2、3)题目的要求 PC机实时时钟的基本程序如附录一,请根据中断服务程序设计时钟时、分、秒调整 的中断服务程序,然后调试实现时钟的基本功能 在原有程序基础上,增加键盘输入字符功能,可通过修改时、分、秒的数据,实现 实时时钟可调整功能。 在原有程序基础上,设计美观的时钟显示方式及友好的操作方式。附录一STACK segment para stack stackdb 256 dup (0)stack endsdata segment para public datacount db 100tenh db Thour db * 3, 20htenm db jminute db 0db :,tens db

3、 5second db O, Odh, $data endscode segment para public codestart proc farassume cs:code push ds xor ax, ax push ax mov ah, 01 int 21h cli cldmov ax,OOOOh mov ds, ax mov si,0020h lodsw mov bx, ax lodsw push ax;seg push bx;offset mov ax, data mov ds, ax assume ds:data mov ax,OOOOh mov es, ax mov di,00

4、20h mov ax, offset timer stoswmov ax, cs stoswmov al,00110110b out 43h,al mov ax,11932 out 40h,al mov al, ah out 40h,al in al, 21h push ax mov al,Ofch stiforever: mov dl, Offhmov ah, 06int 21h jz disp cmp al,20h jz exit disp:mov dx, offset tenh mov ah, 9int 21hmov al,second waitcha: cmp al, second j

5、z waitchajmpforeverexit: clicldpopaxout21h, axmoval, 36hout43h, almoval,0out40h,alout40h, almovax, 0moves, axmovdi, 4*8popaxstoswpopaxstoswstiretstart endptimer:push ax push exstimov al, count dec almov count, al jnz int_ret mov count, 100 mov al,second add al, 1aaamov second, al jnc int_ret mov al,

6、tens adc al, 0aaaand al, Ofh mov tens, alcmpal, 6jnzint_retmoval,0movtens, almoval, minuteaddal, 1aaamovminute, aljncint_retmoval,tenmadcal,0aaaandal, Ofhmovtenm, alcmpal, 6jnzint_retmoval,0movtenm, almoval, tenhmovcl, 4shlal, clmovcl, almoval, hourandal, Ofhor al, claddal, 1daacmpal, 24hjz resethmo

7、vch, almovcl, 4shral, clor al,30hmovtenh, almoval, chandal, Ofhor al, 30hmovhour, aljmpint_retreseth: mov tenh, O mov hour, O int_ret:mov al,second and al, Ofh or al, 30hmov second, al mov al, tens and al, Ofh or al, 30h mov tens,al mov al,tenm and al,Ofh or al, 30h mov tenm, al mov al, minute and a

8、l, Ofh or al, 30hmov minute, alclimov al,20h out 20h, al pop ex pop ax iret code endsend start附录一STACK segment para stack stack1 db 256 dup (0)stack endsdata segment para public data count db 100tenh db I1 hour db 3:20h tenm db 1 minute db Odb:1tens db 5second db OOdh/Sdata endscode segment para pub

9、lic code start proc farassume cs:codepush dsxor ax,ax push ax mov ah,01 int 21h cli cldmov ax,0000h mov ds,ax mov si,0020h lodsw mov bxzax lodswpush ax; seg push bx;offset mov ax,data mov ds,axassume ds:data mov ax,0000hmov eszaxmov di,0020h mov ax,offset timer stoswmov ax,csstosw moval,00110110b ou

10、t 43h,al mov axz11932 out 40h,al mov al,ah out 40h,al in ab21h push ax mov al,Ofch stiforever: mov dlzOffh mov ah,06 int 21h jz disp cmp alz20h jz exit disp: mov dx,offset tenh mov ah,9 int21hmov al,second waitcha: cmp al,second jz waitcha jmp forever exit:clieldpop ax out 21hzax mov al,36h out 43h,

11、al mov al,0 out 40h,al out 40h,al mov axQmov es,ax mov di,4*8pop ax stoswpop axstoswstiretstart endptimer:push axpush exstimov al,cotint dec al mov coun t,al jnz int_ret mov count, 100 mov al,second add al,laaamov sec ond,al jnc int_ret mov alztens adc al,0aaaand al,Ofh mov tenszal cmp al,6jnz intre

12、t mov a 1,0 mov ten s,al mov al,minute add al,laaamov minutezal jnc int_ret mov alztenm adc a,0aaaand al,Ofh mov tenm.al cmp al,6 jnz int_ret mov alz0 mov tenm,al mov alztenh mov cl,4 shl al,cl mov cl,al mov alzhour and al,Ofh or al,cl add al,l daa cmp al,24h jz reseth mov ch,al mov cl,4 shr alzcl o

13、r al,30h mov tenh.al mov al,ch and alQfh or al,30h mov hour,al jmp intret reseth:mov ten h/01mov hour/O1 int_ret:mov al,second and atOfhor al,30h mov second,al mov aliens and al,Ofh or al,30h mov ten s,al mov al,tenm and alQfh or al,30h mov ten m,al mov aminute and al,Ofh or al,30h mov minute,alclim

14、ov al,2Oh out 2Ohzal pop ex pop ax iret code ends end star在本次设计中 使用了四个中断工作方式 即TO、Tl、/INTO、/INTlo 其中1 TO中断 采用TO定时中断工作方式 完成LED动态扫描。2 T1中断 采用T2泄时中断工作方式 产生100ms或50ms单位时 间。3 /INTO中断采用外部中断工作方式完成时间按调整功能。4 /INT1中断采用外部中断工作方式完成闹钟时间输入功能。同时还要对一些存储单元的进行初始化这些内容都需要在初始化程序ORG 0000H UMPMAINORG 0003HUMPINTAORG OOOBH L

15、JMPTO_SEVORG 0013H UMPINTB;程序执行开始地址;跳转主程序执行;外部中断0中断服务程序入口地址 ;转外部中断0中断服务程序;立时器T0中断服务程序入口地址;转T0泄时中断服务程序执行;外部中断1中断服务程序入口地址;转外部中断1中断服务程序ORG OO1BHUMPTlSEVORG 0030HMAINMOVMOVMOV;立时器Ti中断服务程序入口地址 ;转口定时中断服务程序;设置主程序尼始地址=0030H SP,#60H;设垃堆栈指针A #00H30Hz AMOV 31H, AMOV 32HZ AMOV33H, AMOV34H, #OCHMOV35H, AMOV36H,

16、AMOV37H, AMOV50H, #DFHMOV51H,#EFHMOV52H, #F7HMOV53HZ#FBHMOV54H, #FDHMOV55H,#FEHCLRRSOCLRRSIMOVR2, #0MOVR3, #0MOVR4, #0MOVR5, #12MOVTMOD, #11HMOVTH1, #3CHMOVTL1, #OBOHMOVTHO, #OECHMOVTLO, #78HMOVIP, #08HMOVTCON, #50HMOVIE, #8FHLOP:MOV A, 34HANL A, #FOHMOV40H, AMOVA, 34HANLA, #OFHMOV41H, AMOVA, 33HANL

17、 A,#FOHMOV42 H, AMOVA, 33HANLA, #OFHMOV43 H, AMOVA, 32HANL A, #FOHMOV44H, AMOVA, 32HANLA, #OFHAA:MOV 45H, ASETB RSICLR RSOAl:MOV R2,37H;判断是否有迫时时间CJNER2, #0, NTMOVR2, 36HCJNER2, #0z NTMOVR2Z 35HCJNER2, #0, NTSJMPBBNT:MOV A, 37HCJNEA, 34H, BB;判断泄时时间到否MOVA, 36HCJNEA, 33H,BBMOVA, 35HCJNEA, 32H, BBCLRP3.

18、6;时间到发出报警SJMPLOPBB:SETB P3.6SJMPLOP程序淸单如下TO_SEV: PUSH APUSH PSWSETB RSISETB RSOCLR TROMOVR2, #06HMOVRO, #40HMOVRl, #50HGO_ON:MOV A, R2;LED左时扫描程序;保护现场;RSlx RSO=11H;选择3组工作寄存器;停止TO泄时器;设置显示器位数;设置段码首地址;设置位码首地址;送显示位数到ACJNE A, 31HZ NO_FLASH ;判断是闪烁位否NO_FLASH:MOVA, R1;送位码地址到A累加器MOVP3Z A;输出位码数据到P3 口MOVA, R0;送

19、段码地址到A累加器MOVP0z A;输出段码数据到P0 口LCALLDELAY1;调延时子程序延时1msFLASH:INCR0;段码地址+1INCR1DJNZ;位码地址+1R2, GO_ON;判断6为都显示完否 没完继续显示下一位MOVTH0,#0D8HMOVTLO,#F1H;重置T0计数初值POPA;恢复现场SETBETO;允许T0中断SETBTRO;启动T0开始立时SETBEA;开中断RETI;中断返回DELAY1:MOVR3, #OFAH;延时1ms子程序AGAIN:MOVR4, #03HDELAY DJNZ R4, DELAYDJNZ R3, AGAINRET说明 在TO中断服务程序中

20、 又调用了延时1ms子程序 因此 TO中 断服务程序又是延时1ms子程序的主程序5.3.1 24h时间的产生选择世时器T1 工作方式1 上时50ms T1泄时50ms中断一次 利用 R2寄存器加2 R2寄存器的值等于20时 时间正好为Is再利用R3寄存 器汁数60s次类推 累Vi 24h的时间值 并需要设置以下几个寄存器R2 累汁Is时间寄存器。T1每中断一次R2=R2+1 计数二十次向R3进 位并将R2淸零。R3 累if 60s时间寄存器 当R3=60s向R4进位 然后将R3淸零。R4 累汁60min时间寄存器。当R4=60min 正好是lh的时间 向R5 进位然后R4淸零。R5 累计24h

21、时间寄存器。当R5=24h 正好是昼夜的时间 并使R5淸 零。5.3.2 il算左时器T1的技术初值当时钟频率=12MHZ时计数值二机器周期时间左时时间slms50=50000计数初值=65537-50000=15537=3CB0H初值寄存器的初值为 TH1=3CH; TL1=BOH工作方式计数器TMOD=0001XXXXB=1*H(T1 TO的工作方式控制字应该一次性 写入即TMOD=11H)53.3程序设计框图及程序淸单 程序设计框图如图22所示。程序淸单T1左时器 每50ms中断一次 中断20次为Is。T1_SEV:MOV TH1, #3CH;重置 T1 计数初值MOVTL1, #OBO

22、HCLREA;关中断PUSHA;保护现场PUSHBPUSHPSWCLRRSICLRRSO;选择0区工作寄存器INCR2;中断次数加1CJNER2, #14H ZEN;判断中断20次否否转EN标号地址MOV R2, #0;T1中断20次的累计时间Is 计数寄存INC R3;秒计时单元R3+1MOVMOV 32H R3;秒值送32H单元CJNE R3Z #3CH,EN ;判R3=60秒否转EN标号地址R3 #0;60s时间到 R3淸零MOV32H R3;秒值送32H单元INCR4;分计时单元R4+1MOV33H R4;分值送33H单元CJNER4, #3CH,EN;判R4=60min 否转EN标号

23、地址MOVR4, #0;60min时间到 R4淸零MOV33HZ R4;分值送33单元CJNER4, #3CHZEN;判R4=60min 否转EN标号地址MOVR4, #0;60min时间到 R4淸零MOV33H, R4;分值送33单元INCR5;小时单元R5+1MOV34H, R5;小时值送34H单元CJNER5, #18H,EN;判R5=24h 否 转EN标号地址MOVR5, #0;24h时间到 R5淸零MOV34H, R5;小时值送34H单元器R2淸零POP PSWPOP BPOP ASETB EARETI;开中断;中断返回542设宜当前时间程序淸单INTA:SETB P3.4;输入键值前 先将P3.4 P3.5置1SETB P3.5CLRCLRCLRCLRSETBSETBSETBPUSHPUSHPUSHMOVMOVLPO LCALL JBLP1:INCMOV SJMP NEXTO: LCALL JBLD1:MOVMOVDJNZ SJMPLO1:CJNE MOV CJNEMOVLAI:SJMPLO2:CJNEMOVCJNE MOV CJNEMOV SJMPA2:TRI;T1停止定时ET1;T1禁止中断EXO;/INTO禁止中断EXI;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论