报时定时控制系统.docx
- 文档编号:11485034
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:21
- 大小:19.04KB
报时定时控制系统.docx
《报时定时控制系统.docx》由会员分享,可在线阅读,更多相关《报时定时控制系统.docx(21页珍藏版)》请在冰豆网上搜索。
报时定时控制系统
ORG000H
START:
AJMPMAIN;跳转入主程序0030H
ORG000BH
AJMPCTCINT;跳转到定时器T0的中断服务程序入口
ORG0030H
MAIN:
NOP;主程序入口地址:
0030H
NOP
NOP
MOVA,#OFFH;关闭各输出口
MOVP0,A;P0口为字形口,低电平有效
MOVP1,A;P1口作为6个键输入口
MOVP2,A;P2口是字位口,低电平有效
MOVP3,A;P3口报时方式控制和驱动输出口
SETBT0;关闭报时音乐输出(T0=1)
SETBT1;关闭报时扩音机电源(T1=1)
CJNESP,#07H,NOT1;SP/07H,是软件陷阱转来,不进行RAM清零
MOVR0,#7FH
MOVR1,#7DH;否则RAM清零初始化
CLRA
LOOP0:
MOV@R0,A
DECR0
DJNZR1,LOOP0;从内部RAM区03H到7FH均清零
NOT1:
MOVSP,#60H;设置栈指针
MOVIP,#02H;设置定时器T0为最高中断优先级
MOVIE,#82H;定时器T0开中断
MOVTMOD,#01H;设置定时器T0为方式1
MOVTL0,#0B0H;设置定时器T0初值
MOVTH0,#3CH
SETBTR0;启动定时
NOP
NEXTT:
NOP
MOVSP,#60H;重置堆栈底位置
LCALLDISP;调用显示子程序
NOP;检测标志是否出现,F3为定时分钟值变化的标志位
JNB0F3H,NEXT1;F3=0,则转键扫描,判断有无键按下
NOP;F3=1,调用报时处理子程序
SETBINT0
JNBINT0,USERS;如INTO=0,则调用用户自设定报时点
LCALLTIMERA;INTO=1,调用TIMERA,按作息时间表报时
USERS:
NOP
LCALLTIMERB;TIMERB为用户自设定报时点报时
NOP
NEXT1:
LCALLCHECKEY;调用按键扫描子程序,判断有无键按下
JZNEXTT;无键按下,返回重新扫描
NOP
LCALLKEYACC;有键按下,调用按键处理子程序
NOP
SJMPNEXTT
NOP
NOP
4.2定时中断服务程序模块该多好模块完成下述工作:
①对100毫秒(20H)、秒(21H)、分(22H)、小时(23H)及星期计数单元(24H)进行累计计数,如果分值有计数变化并且无键按下,则将当前的星期、小时和分钟送显示缓冲区更新显示目录;②如有报是处理标志,则对报时扩音机电源和报时音乐输出分别进行定时控制。
CTCINT:
NOP;T0的中断服务子程序
MOVTL0,#0B4H;设置定时器T0初值
MOVTH0,#3CH
PUSHACC;保护主程序现场数据
PUSHPSW
NOP
SETBRS0;选择新的工作寄存器区(1区)
CLRRS1;SELECT1AREA
INC20H;0.1S单元加1
MOVA,20H
JBOF4H,LCA;(F4H)为键处理标志位,在键处理过程中不显示秒点
CJNEA,#05H,CTNUC
CTNUC:
JCLC2;小于0.4S则秒点闪亮,大于0.4S则秒点熄灭
CLR6CH
SJMPLCA
LC2:
SETB6CH
LCA:
CJNEA,#0AH,RTNH;未计满1S则退出中断
MOV20H,#00H;毫秒计数单元清零
JNB0F0H,NEXTE;F0H=1为报时扩音机预热延时标志位
MOVA,25H;(25H)中存放报时扩音机预热延时时间值
JNZNEXTF
CLROFOH
CLROFOH
SETBOF1H
MOV26H,#1OH;(26H)中存放报时放音的延时时间值
CLRTO
NEXTE:
JNBOF1H,NEXTF;(F1H=1)为报时放音的延时标志位
MOVA,26H
DECA
MOV26H,A
JNZNEXTF;判断报时放音延时是否结束
CLROF1H;延时时间到,清除报时放音标志位,关闭报时电源
SETBT1
SETBT2
SETBTO
SETBTO
NOP
NEXTF:
NOP
MOVA,21H;对秒计数单元(21H)进行累计计数
ADDA,#01H
DAA
MOV21H,A
CJNEA,#06H,RTNH;判断分计数是否计满
CLRA
MOV21H,A
SETB0F3H;(F3H)为分值有变更标志位
NEXT:
MOVA,22H;对分(22H)进行累计计数
ADDA,#01H;
DAA
MOV22H,A
CJNEA,#60H,RTDN
MOV22H,#00H
MOVA,23H
ADDA,#01H;时单元加1
DAA
MOV23H,A;对时(23H)进行累计计数
CJNEA,#24H,TRND
MOV23H,#00H
MOVA,24H
ADDA,#01H;星期计数单元(24H)加1
DAA
MOV24H,A
CJNEA,#07H,RTDN
MOV24H,#00H
RTDN:
NOP
JNBOF3H,RTDH;确认(F3=0)分值无变更,则返回
JBOF4H,RTNH;确认(F4=0)正在键处理,则返回
LDDA:
NOP;将当前的时间值显示缓冲区
NOP
MOVR0,#24H;(24H、23H、22H、)送(2FH~2BH)
MOVR1,#2FH
MOVR2,#02H
MOVA,@R0
ANLA,#0FH
MOV@R1,A
DECR0
DECR1
LD1:
MOVA,@R0;将1字节压缩的BCD码拆成两个字节,数数值存放在低字节内
ANLA,#OF0H
SWAPA
MOV@R1,A
DECR1
MOVA,@R0
ANLA,#0FH
MOV@R1,A
DECR0
DECR1
DJNZR2,LD1
NOP
RTNH:
NOP;中断返回,并恢复现场数据
NOP
POPPSW
POPACC
RETI
4.3扫描显示模块该模块为5位LED扫描显示模块。
P0口为字形码输出口,低电平有效;P2口为字位码输出口,高电平有。
显示缓冲区为2FH~2BH等5个字节,2FH存放显示的星期数,2EH、2DH存放显示的小时数,2CH、2BH存放显示的分钟数,其数值范围在00H~0FH内时不显示该位的小数点,在10H~1FH时则显示小数点。
DISP:
NOP;DISP为显示子程序
NOP
MOVA,#00H;关闭显示
MOVP2,A;P2口为字位码输出口
MOVA,#0FFH
MOVP0,A;P0口为字形码输出口
NOP
NOP
MOVR0,#2FH;显示子程序
NOP逻辑
MOVR1,#10H;位控制字
LOOP1:
MOVA,R1
NOP
MOVP2,A;输出位控制字
MOVP2,A
MOVDPTR,#TABLE
MOVA,@R0;取显示缓冲区中的显示字符数
MOVCA,@A+DPTR;查表转换成字型代码
CPLA
MOVP0,A;输出字形码
MOVR2,#00H
LOOP2:
DJNZR2,LOOP2;延时2MS
DECR0;显示下一个字符
MOVA,R1
CLRC
RRCA
MOVR1,A
JNZLOOP1;判断5位扫描显示一遍是否完成
RET
NOP
NOP
TABLE:
DB3FH,06H,5BH,4FH,66H,7DH,07H;不带小数点时的字符显示字形表
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H;带小数点时的字符显示字形表
DB0FFH,0EFH、0F7H,0FCH,0B9H,0F9H,0F1H
NOP
4.4键扫描子程序检测P1口,判断是否有键按下,如有键按下,进进行延时去抖动并读取键值,存入A中。
CHECKEYA:
NOP;键扫描子程序
NOP
NOP
MOVP1,#0FFH
MOVA,P1;判断是否有键按下
CPLA
ANLA,#3FH
JZRETX
LCALLDISP;延时去抖动
LCALLDISP
MOVA,P1
CPLA
ANLA,#3FH
JZRETX
MOVR6,A;当前值存放在R6中
K1:
LCALLDISP;等待释放按键
MOVA,P1
CPLA
ANLA,#3FH
JNZK1
MOVA,R6
NOP
NOP
RETX:
RET
NOP
i.用户自设定报时时间点置入键程序模块。
将显示缓冲区2FH~2BH中的内容压缩后存入40H为首地址的片内RAM中,其中2FH为定时时间点的编号,2EH、2DH为小时值,2CH、2BH为分钟数值。
USESET:
NOP
MOVR0,#2FH
MOVR1,#40H;本次用户设定报时点首址为40H
MOVA,@R0
ANLA,#OFH
RLA
ADDA,R1;报时点编号乘2加首址,为本次存放的实际地址
MOVR1,A
DECR0
NOP;定时设定时间置入子程序
NOP
MOVR2,#02H
LDD:
MOVA,@R0;将小时和分钟值压缩后存入相应单元中
ANLA,#0FH
SWAPA
MOVR7,A
DECR0
MOVA,@R0
ANLA,#0FH
ADDA,R7
MOV@R1,A
DECR0
INCR1
DJNZR2,LDD
NOP
CLR0F4H
NOP
RET
NOP
ii.减1键处理。
在小数点点亮的对应位上进行十进制减1处理。
SUBONE:
NOP
NOP
JNB7CH,SCH74
MOVR0,#2FH
SJMPSUB1
SCH74:
NOP
JNB74H,SCH6C
MOVR0,#2EH
SJMPSUB1
SCH6C:
NOP
JNB6CH,SCH64
MOVR0,#2DH
SJMPSUB1
SCH5C:
NOP
JNB64H,SCH5C
MOVRO,#2CH
SJMPSUB1
SCH5C:
NOP
JNB5CH,ERR1
MOVR0,#2BH
SJMPSUB1
NOP
NOP
ERR1:
RET
NOP
SUB1:
NOP
MOVA,@R0
ADDA,#99H
DAA
XCHDA,@R0
RET
iii.用户自设定报时时间点显示键处理模块。
由(2FH)指定的用户自设定报时点编号,计算其在RAM中存放的地址,再根据此地址找出该报时时间点的2个字节码,将其4个半字节分别存入2EH~2BH单元低半字中。
DSPUSE:
NOP
MOVR0,#2FH;自设定报时点编号由(2FH)指定
MOVR1,#40H;用户设定报时点首址为40H
MOVA,@R0
ANLA,#0FH
RLA
ADDA,R1;报时点编号乘2加首址,为其存放的实际地址
MOVR1,A
DECR0
NOP;取定时设定时间并置入显示缓冲区
NOP
MOVR2,#02H
LDR:
MOVA,@R1;将小时和分钟值解压缩后装入相应显示单元中
SWAPA
XCHDA,@R0
DECR0
INCR1
DJNZR2,LDR
NOP
CLR0F4H
NOP
RET
NOP
4.5键值处理子程序
KEYACC:
NOP;键值处理子程序
NOP;按键处理子程序
JBACC.0,SHIFTP;是移位功能键转SHIFTP
JBACC.1,ADDONE;是加1键,转ADDONE
JBACC.2,SUBONE;是减1键,转SUBONE
JBACC.3,TIMSET;是时钟校对键转TIMSET
JBACC.4,USESET;设置用户定时时间点
JBACC.5,DSPUSE;显示用户定时时间点
NOP
NOP
NOP
RET
NOP
iv.加1键处理程序。
在小数点点亮的对应位上进行十进制加1处理。
ADDONE:
NOP
NOP
JNB7CH,SECH74
MOVR0,#2FH
SJMPADD1
SECH74:
NOP
JNB74H,SECH6C
MOVR0,#2EH
SJMPADD1
SECH64C:
NOP
JNP6CH,SECH64
MOVR0,#2BH
SJMPADD1
NOP
NOP
ERR2:
RET
NOP
ADD1:
NOP
MOVA,@R0
ADDA,#01H
DAA
XCHDA,@R0
RET
v.校时时间置入程序模块。
将设定的时间值置入相应的时间计数单元,并以该时间为起点开始计时。
TIMSET:
NOP;校时时间置入程序段
NOP
MOVR0,#2FH
MOVR1,#24H
MOVR2,#02H
MOVA,@R0
ANLA,#0FH
MOV@R1,A
DECR0
DECR1
LD1:
MOVA,·R0
ANLA,#0FH
SWAPA
MOVR7,A
DECR0
MOVA,@R0
ANLA,0FH
ADDA,R7
MOV@R1,A
DECR0
DECR1
DJNZR2,LD1
MOV21H,#00H
CLR0F4H
RET
NOP
NOP
4.6移位键处理程序模块将小数点从左向右依次移动1位。
小数点移动哪一位,那一位便可用加1或减1键进行修改数值。
小数点如移到最右边1位,若再按1次移位键,小数点自动返回到最左边一位上。
SHIFTP:
NOP
JB0F4H,NXT
ERR:
SETB0F4H
SETB5CH
CLR6CH
NXT:
NOP
JNB7CH,CHK74
CLR7CH
SETB74H
RET
CHK74:
NOP
JNB74H,CHK6C
CLR74H
SETB74H
SETB6CH
RET
CHK6C:
NOP
JNB6CH,CHK64
CLR6CH
SETB64H
RET
CHK64:
NOP
JNB64H,CHK64
CLR6CH
SETB5CH
RET
CHK5C:
NOP
JNB5CH,ERR
CLR5CH
SETB7CH
RET
4.7报时处理模块本程序段处理下述工作:
①判断当天是否为双休日及判断当前时间是否在午夜,如在上述时间段内,则不进行报时;②由INT1端口状态来选择夏季作息时间或是冬季作息时间;③从作息时间表中取出各设定报时时间点,与当前时间(小时、分钟值)进行比较,如果完全相同则建立报时标志。
TIMERA:
NOP
MOVA,24H
ANLA,#0FH
JZBH1
CJNEA,#O6H,CNTUX
MOVA,23H
CJNEA,#12H,CC1
CC1:
JNCBH1
CNTUX:
NOP
SETBP1。
7
JBP1。
7,SUMM
WINTER:
MOVDPTR,#TABLE2
SJMPCOMP
SUMM:
MOVDPTR,#TABLE2
COMP:
CLRA
NOP
MOVR2,#24H
LOP1:
MOVCA,@A+DPTR
CJNEA,#22H,QUIT
QUIT:
JNCQUITA
CJNEA,#06H,QUITB
QUITB:
JCQUITA
CONTUB:
CJNEA,23H,QUITA
INCDPTR
CLRA
MOVCA,@A+DPTR
CJNEA,22H,CONTC
NOP
SETB0F0H
MOV25H,#0AH
SETBT0
CLRT1
CLRT1
NOP
BH1:
CLR0F3H
RET
QUITA:
NOP
INCDPTR
CONTC:
NOP
INCDPTR
DJNZR2,LOP1
NOP
CLR0F3H
RET
4.8用户自设定报时时间点处理模块该模块对换用户自行设定的报时时间点进行判断处理,并对该报时时间的正确性进行判别处理。
MTIMERB:
NOP
MOVR2,#OAH
CLRA
MOVR0,#40H
LOP2:
MOVA,@R0
CJNEA,#22H,QUIT2
QUIT2:
JNCQUITA2
CJNEA,#06H,QUTIB2
QUITB2:
JCQUITA2
CONTUB2:
CJNEA,23H,QUITA2
INCDPTR
CLRA
MOVCA,@A+DPTR
CJNEA,22H,CONTC2
NOP
SETB0F0H
MOV25H,#0AH
SETBT0
CLRT1
CLRT1
NOP
BH12:
CLR0F3H
RET
QUITA2:
NOP
INCDPTR
CONTC2:
NOP
INCDPTR
DJNZR2,LOP2
CLR0F3H
RET
冬季和夏季的处息时间表区
TABLE2:
DB06H,00H,06H,20H,60H,40H,07H,10H,07H,15H;冬令
DB07H,20H,07H,50H,07H,58H,08H,00H,08H,45H
DB08H,53H,08H,55H,09H,40H,09H,55H,09H,58H
DB10H,00H,10H,45H,10H,53H,10H,55H,11H,40H
DB13H,00H,13H,13H,13H,15H,14H,00H,14H,13H
DB14H,15H,15H,00H,15H,13H,15H,15H,16H,00H
DB17H,30H,18H,15H,19H,00H,19H,35H,19H,40H
DB20H,30H,21H、00H,21H,30H,0FFH,0FFH,0FFH
TABLE3:
DB06H,00H,06H,20H,06H,40H,07H,10H,07H,15H;夏令
DB07H,20H,07H,50H,07H,58H,08H,00H,08H,45H
DB08H,53H,08H,55H,09H,40H,09H,55H,09H,58H
DB10H,00H,10H,45H,10H,53H,10H,55H,11H,40H
DB13H,45H,13H,58H,14H,00H,14H,45H,14H,50H
DB14H,58H,15H,00H,15H,45H,15H,53H,15H,55H
DB17H,25H,19H,00H,19H,35H,19H,40H,21H,00H
DB21H,30H,22H,00H,0FFH,0FFH,0FFH,0FFH
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 报时 定时 控制系统