收藏 分享(赏)

51单片机定时汇编程序.doc

上传人:buyk185 文档编号:5998360 上传时间:2019-03-23 格式:DOC 页数:15 大小:87.50KB
下载 相关 举报
51单片机定时汇编程序.doc_第1页
第1页 / 共15页
51单片机定时汇编程序.doc_第2页
第2页 / 共15页
51单片机定时汇编程序.doc_第3页
第3页 / 共15页
51单片机定时汇编程序.doc_第4页
第4页 / 共15页
51单片机定时汇编程序.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、 ;*; 定时器程序 ; 采用 89c51 ; 2001.10 ;*;*; 伪定义 ;*SL EQU 30H ;SL 存放秒的个位数SH EQU 31H ;SH 存放秒的十位数ML EQU 32H ;ML 存放分的个位数MH EQU 33H ;MH 存放分的十位数HL EQU 34H ;HL 存放时的个位数HH EQU 35H ;HH 存放时的十位数;L0 EQU 36H ;L0L3:显示数据存储器L1 EQU 37HL2 EQU 38HL3 EQU 39HDSPLYP EQU 3AH ;显示数据指针(DISPLAY-POINT)PLYTS EQU 3BH ;显示次数计数器(DISPLAY-T

2、IMES);LPLMOD BIT 39H ;低两位显示方式(LOW-PLAY-MOD)HPLMOD BIT 3AH ;高两位显示方式 (HIGH-PLAY-MOD)BRIGHT BIT 3BH ;DISPLAY 子程序参数:亮灭指示位;TCOUNT EQU 3CH ;时间计数器(TIME-COUNT);ADDRES EQU 3DH ;加 1 子程序参数MAX EQU 3EH ;加 1 子程序参数IFDEC BIT 20H ;BCD 加法子程序参数;R_MOD EQU 3FH ;响铃方式参数;LED4 BIT 30H ;发光管状态位BELL BIT P1.7 ;蜂鸣器SWITCH BIT P3.

3、7 ;继电器FKEY BIT P3.0 ;功能键 (S1)MKEY BIT P3.1 ;修改键 (S2);WORKIN BIT 38H ;工作状态指示位;*; 中断入口 ;*ORG 0000HSTART: LJMP MAIN ; 0000H 引向主程序LJMP ERR ; 0003HNOPNOPLJMP ERR ; 引向出错处理程序LJMP PGT0 ; 000BH 引向中断处理程序 PGT0NOPNOPLJMP ERR ; 引向出错处理程序LJMP ERR ; 0013H INT1NOPNOPLJMP ERRLJMP ERR ; 001BH T1NOPNOPLJMP ERRLJMP ERR

4、; 0023HNOPNOPLJMP ERRLJMP ERR ; 002BHNOPNOP;*; 主程序 ;*MAIN: MOV IE, #00H ;关中断MOV SP, #57H ;设置堆栈指针MOV PSW, #00H ;选用寄存器组 0MOV TMOD, #11H ;设定中断工作方式为 T0 和 T1;MOV A, 56HCJNE A, #0AAH, CSTART ;判上电复位标志,无标志转冷启动MOV A, 57HCJNE A, #55H, CSTART ; 无标志转冷启动AJMP HSTART ;有上电复位标志转热启动NOPNOPLJMP ERR ;软件陷阱,引向出错处理程序CSTART

5、: MOV P1, #0FFH ;冷启动,全面初始化MOV P3, #0FFHMOV TCON, #00H ;计时停止MOV TL0, #0B0H ;赋中断 T0 初值MOV TH0, #3CHMOV TCOUNT, #0AH ;赋定时器初值MOV R5, #00H ;R5 为一空单元(备用)MOV R4, #00H ; R4 为工作模式选择寄存器MOV SL, #00H ;定时单元清零MOV SH, #00H ;秒MOV ML, #00H ;MOV MH, #00H ;分MOV HL, #00H ;MOV HH, #00H ;时MOV PLYTS, #64H ;赋显示次数初值为 100 次M

6、OV DSPLYP, #L0 ;显示指针指向显存单元MOV L0, #0AH ;送显示数据“-“MOV L1, #0AHMOV L2, #0AHMOV L3, #04HSETB LED4 ;LED4 为数码管之间的发光二极管SETB LPLMOD ;设定显示方式为闪烁SETB HPLMOD ;SETB BRIGHT ;允许显示CLR WORKIN ;清工作标志 , 待命AJMP SETUP ;转开始工作NOPNOPLJMP ERR ;软件陷阱HSTART: MOV SCON, #00H ; 有上电标志,热启动,清串行口控制寄存器MOV IP, #00H ; 清中断优先控制寄存器SETB FKE

7、Y ;重设按键SETB MKEYSETB EA ;开中断AJMP BEGIN ;转向继续工作NOPNOPLJMP ERR ;软件陷阱SETUP: SETB EA ;开中断;MAIN1: ACALL DISPLY ;调用显示JB FKEY, JUDGE ;按键扫描ACALL KEYDLY ;延时消抖动JB FKEY, JUDGE ;无键按下转向判断是否到点CLR ET0 ;功能键被按下 ,则CLR TR0 ;暂停计时ACALL MENU ; 调用菜单设置程序BEGIN: SETB WORKIN ;置工作标志位,开始工作SETB ET0 ;开中断SETB TR0 ;开始计时MOV A, R4 ;移

8、入工作模式选择RL A ;指针放大MOV DPTR, #M_TABJMP A+DPTR ;根据工作模式跳转到相应程序段M_TAB: AJMP WORK1AJMP WORK2AJMP WORK3AJMP WORK4NOPNOPLJMP ERR ;软件陷阱WORK1: ;WORK2: CLR SWITCH ;工作方式 1 和 2:开继电器AJMP MAIN2NOPNOPLJMP ERR ;软件陷阱WORK3: ;WORK4: SETB SWITCH ;工作方式 3 和 4:不开继电器MAIN2: CLR BELL ;蜂鸣器短鸣一声,以示开始工作ACALL DL05SSETB BELLJUDGE:

9、JNB WORKIN, MAIN1 ;判断是否在定时之中MOV A, SL ;判断秒是否为零JNZ MAIN1MOV A, SH ;判断秒是否为零JNZ MAIN1MOV A, ML ;判断分是否为零JNZ MAIN1MOV A, MH ;判断分是否为零JNZ MAIN1MOV A, HL ;判断时是否为零JNZ MAIN1MOV A, HH ;判断时是否为零JNZ MAIN1 ;若时分秒全为零则CLR ET0 ; 停止计时CLR TR0 ;ACALL ACTION ; 调用到点工作子程序AJMP MAIN ; 返回NOPNOPLJMP ERR ;软件陷阱;*; 倒计时程序 ;*PGT0: C

10、LR EA ;关中断PUSH ACC ;保护现场PUSH PSWPUSH DPLPUSH DPHMOV PSW, #08H ;选用寄存器组 1CLR TR0 ;暂停计时MOV A,#0B7H ;中断同步修正ADD A,TL0MOV TL0,AMOV A,#3CHADD A,TH0MOV TH0,ASETB TR0 ;恢复计时DEC TCOUNT ;定时器 T0 每 50 000 毫秒溢出一次,则MOV A, TCOUNT ; 溢出 10 次为 0.5 秒JNZ OUTT0 ;判断是否到半秒MOV TCOUNT, #0AH ;CPL LED4 ; 若到半秒 LED 取反JNB LED4, OUT

11、T0 ;LED 每闪烁一次是一秒MOV R0, #SH ;移入秒位的地址SETB IFDEC ;BCD 子程序参数,使其做减法ACALL ADDBCD ;调用 BCD 子程序, 秒减 1CJNE R3, #99H, OUTT0 ;判断秒要否借位MOV SH, #05H ;要借位则MOV SL, #09H ; 送数据 59(否则显示 99)MOV R0, #MH ;移入分位的地址ACALL ADDBCD ;分减 1CJNE R3, #99H, OUTT0 ;判断分要否借位MOV MH, #05HMOV ML, #09HMOV R0, #HHACALL ADDBCDOUTT0: POP DPH ;

12、恢复现场POP DPLPOP PSWPOP ACCSETB EARETI ;中断返回NOPNOPLJMP ERR ;软件陷阱;*; BCD 子程序( 加 1 或减 1 ) ;*ADDBCD: MOV A, R0 ;移入被操作数的高位DEC R0 ;指针减一SWAP AORL A, R0 ;移入被操作数的低位MOV B, #01H ;B 寄存器送立即数#01HMOV C, IFDEC ;若 减法标志位为 1,则MOV B.3, C ;MOV B.4, C ; B 寄存器的值被改为 #99HMOV B.7, C ;ADD A, B ; 对一个压缩的 BCD 码加#99H 等于对其减一DA A ;B

13、CD 码调整MOV R3, A ;暂存结果ANL A, #0FH ;取低位码MOV R0, A ;存数MOV A, R3 ;取回结果INC R0 ;指针加一SWAP A ;交换ANL A, #0FH ;取结果数的高位MOV R0, A ;存数RETNOPNOPLJMP ERR ;软件陷阱;*; 加 1 程序 ;*ADDONE: MOV R0, ADDRES ;移入被加数单元的地址CLR IFDEC ;设定 BCD 子程序做加法ACALL ADDBCD ;调用 BCD 子程序CLR C ;判断被加数是否大于MOV A, R3 ;最大值“MAX“CJNE A, MAX, JGOVERJGOVER:

14、 JC ENDADOCLR A ;若大于“MAX“, 则清零MOV R0, ADEC R0MOV R0, AENDADO: RETNOPNOPLJMP ERR ;软件陷阱;*; 调时快进程序 ;*QUICK: CLR LPLMOD ;设定显示方式不闪烁CLR HPLMODACALL ADDONE ;调用加 1 子程序MOV L0, R4 ;将工作模式选择数移入显存INC L0 ;加 1 转化成显示值ACALL KEYDLY ;延时ACALL DL100JNB MKEY, QUICK ;判断键是否松开SETB LPLMOD ;若松开则恢复闪烁显示方式CJNE R6, #02H, ENDQUKSE

15、TB HPLMODCLR LPLMODENDQUK: RETNOPNOPLJMP ERR ;软件陷阱;*; 功能菜单程序 ;*MENU: MOV R6, #00H ; 初始化; R6 计功能键按键次数MOV ADDRES, #05H ; 将 R5 的地址送入,以便于改变 R4 的值MOV MAX, #04H ; 定义工作模式选择寄存器 R4 的最大值MOV DSPLYP, #L0 ;定义显示指针指向显存SETB LPLMOD ;设定低两位数闪烁CLR HPLMODMOV L0, R4 ;送显示数据“F-0X“INC L0MOV L1, #00HMOV L2, #0BHMOV L3, #00HS

16、ETB LED4;WAITFK: ACALL DISPLY ;等待 F 键释放JNB FKEY, WAITFKMENU1: ACALL DISPLYJB MKEY, JGFKEY ;M 键扫描ACALL KEYDLY ;延时消抖动JB MKEY, JGFKEY ; 未按下则转 F 键扫描CJNE R6, #00H, NEXT1 ;MOV SL, #00H ;若中途改变定时方式,则清除原计时数据MOV SH, #00HMOV ML, #00HMOV MH, #00HMOV HL, #00HMOV HH, #00HNEXT1: MOV R2, #00H ;R2 用于判断按键时间是否超过 0.5 秒

17、NEXT2: ACALL ADDONE ;调用加 1 程序MOV L0, R4 ;移入工作方式选择数INC L0;WAITMK: ACALL DISPLY ;等待 M 键释放INC R2 ;R2 自增一CLR CCJNE R2, #0C8H, JGQUIC ;若 R2 大于等于 200 则调用快进子程序JGQUIC: JC WATMK1ACALL QUICKWATMK1: JNB MKEY, WAITMK ; R2 小于 200 则等待 M 键释放;JGFKEY: JB FKEY, MENU1 ;功能(F)键扫描ACALL KEYDLY ;延时消抖动JB FKEY, MENU1 ;键未按下则转

18、修改 (M)键扫描INC R6 ;F 键按键次数加 1MOV A, R6 ;移入按键次数RL A ;指针放大MOV DPTR, #FUNTABJMP A+DPTR ;根据按键次数跳转到相应的程序段FUNTAB: AJMP WAITFKAJMP SETLOWAJMP SETHIAJMP ENDMENNOPNOPAJMP ENDMEN;STWKMD: ;工作模式设定,不需另外改变菜单;SETLOW: MOV MAX, #60H ;设置低位(秒位或分位)MOV A, R4 ;移入工作模式选择数RL A ;指针放大MOV DPTR, #FTAB1JMP A+DPTR ;根据工作模式选择数跳转到相应的程

19、序段FTAB1: AJMP SETSSAJMP SETM60AJMP SETSSAJMP SETM60NOPNOPAJMP WAITFKSETSS: MOV DSPLYP, #SL ;设定显示区域为 MM:SSMOV ADDRES, #SHAJMP WAITFKSETM60: MOV DSPLYP, #ML ; 设定显示区域为 HH:MMMOV ADDRES, #MHAJMP WAITFK;SETHI: CLR LPLMOD ;设置高位 (分位或时位)SETB HPLMOD ;高两位数码管闪烁MOV MAX, #31H ;最大数为 30MOV A, R4 ;移入工作模式选择数RL A ;指针放

20、大MOV DPTR, #FTAB2 ;移入表首地址JMP A+DPTR ;根据工作模式选择数跳转到相应的程序段FTAB2: AJMP SETM30AJMP SETHHAJMP SETM30AJMP SETHHNOPNOPAJMP WAITFK ;返回等待键释放SETM30: MOV ADDRES, #MH ;移入分位的地址AJMP WAITFK ;转向等待键释放SETHH: MOV ADDRES, #HH ;移入时位的地址AJMP WAITFK ;转向等待键释放;ENDMEN: CLR HPLMOD ;恢复不闪烁显示方式RETNOPNOPLJMP ERR ;软件陷阱;*; 到点工作程序 ;*A

21、CTION: MOV L0, R4 ;移入工作模式选择数INC L0 ;送显示数“F-0X“MOV L1, #00HMOV L2, #0BHMOV L3, #00HSETB LED4MOV DSPLYP, #L0 ;指针指向显存SETB LPLMOD ;设定显示方式不闪烁SETB HPLMODMOV A, R4 ;移入工作模式选择数RL A ;MOV DPTR, #A_TABJMP A+DPTR ;根据工作模式选择数跳转A_TAB: AJMP ACTF1 ;工作模式一AJMP ACTF1 ;工作模式二AJMP ACTF3 ;工作模式三AJMP ACTF3 ;工作模式四NOPNOPLJMP ER

22、R ;软件陷阱ACTF1: SETB SWITCH ;工作模式一 (或二): 关继电器MOV R_MOD, #82H ;响铃模式参数 #82HMOV R2, #96H ;响铃次数参数#96HACTF11: ACALL RING ;调用响铃子程序JNB MKEY, ENDACT ;等待键按下JNB FKEY, ENDACT ; 有键按下则结束响铃DJNZ R2, ACTF11 ;次数未满继续响铃MOV R_MOD, #0FFH ;参数#0FF 使响铃无效AJMP ACTF11 ;无键按下返回NOPNOPLJMP ERR ;软件陷阱ACTF3: CLR SWITCH ;工作模式三 (或四): 开继

23、电器CLR BELL ;蜂鸣器短鸣一声ACALL DL1SSETB BELLMOV R_MOD, #0FFH ;响铃模式参数#0FFHMOV R2, #96H ;响铃时间参数#96HACTF31: ACALL RING ;调用响铃子程序JNB MKEY, ENDACT ;等待键按下JNB FKEY, ENDACT ; 有键按下则结束DJNZ R2, ACTF31 ;次数未满继续MOV R2, #96H ;重新赋值CLR BELL ;短鸣一声 (说明: 响铃模式参数#0FFH使ACALL DL100 ; 响铃程序无效,仅起延时作用,SETB BELL ; 每延时一段时间短鸣一声,以AJMP AC

24、TF31 ; 提醒使用者继电器仍在工作)NOPNOPLJMP ERR ;软件陷阱ENDACT: SETB SWITCH ;关继电器AWAITF: ACALL DISPLY ;调用显示JNB FKEY, AWAITF ;等待键释放AWAITM: ACALL DISPLY ;调用显示JNB MKEY, AWAITM ;等待键释放RETNOPNOPLJMP ERR ;软件陷阱;*; 响铃程序 ;*RING: MOV R5, #18H ;R5 为循环控制变量RING1: JNB MKEY , R_EXIT ;键扫描JNB FKEY , R_EXIT ;有键按下则退出MOV A, R_MOD ;移入响铃

25、模式参数MOV C, ACC.7 ;根据响铃模式参数改变响铃MOV BELL, CRL AMOV R_MOD, AACALL DL100 ;延时DJNZ R5, RING1 ;循环次数控制R_EXIT: SETB BELL ;关闭响铃RETNOPNOPLJMP ERR ;软件陷阱;*; 显示程序 ;*DISPLY: PUSH ACC ;数据压栈保护PUSH PSWMOV PSW, #10H ;选用寄存器组 2MOV R0, DSPLYP ;移入显示指针MOV R2, #0FDH ;R2 寄存的是数码管选通数MOV A, PLYTS ;移入显示循环控制量JNZ PLAY ;不为 0 则转 PLA

26、YMOV PLYTS, #64H ;否则从新赋值CPL BRIGHT ;亮灭指示位取反PLAY: DEC PLYTS ;显示循环控制量减 1JNB LPLMOD, PLAYL ;低两位数码管不闪则“PLAYL“JB BRIGHT, PLAYL ;亮灭指示为 1 也“PLAYL“ACALL NOPLAY ;否则灭灯延时AJMP PLAY1 ;转显示高位数码管NOPNOPLJMP ERR ;软件陷阱;用来显示低位PLAYL: ORL P1, #7FH ;清原显示数据ORL P3, #3CH ;清原选通数据MOV A, R2 ;移入数码管位选数RL A ;换一位ANL P3, A ;选通低位的个位数

27、码管MOV R2, A ;暂存位选数MOV A, R0 ;移入显示数值MOV DPTR, #TABLE1 ;移入表首地址MOVC A, A+DPTR ;查表ANL P1, A ;送显示数据ACALL DL1MS ;延时INC R0 ;指向低位的十位数JB P3.3, PLAYL ;显示低位的十位数;PLAY1: JNB HPLMOD, PLAYH ;高两位数码管不闪则“PLAYH“JB BRIGHT, PLAYH ;亮灭指示为 1 也“PLAYH“ACALL NOPLAY ; 否则灭灯延时AJMP OUTPLY ;转结束NOPNOPLJMP ERR ;软件陷阱;用来显示高位PLAYH: ORL

28、 P1, #7FH ;清原显示数据ORL P3, #3CH ;清原选通数据ANL P3, #0EFH ;选通高位的个位数数码管MOV A, R0 ;移入显示数值MOV DPTR, #TABLE1 ;移入表首地址MOVC A, A+DPTR ;查表ANL P1, A ;送显示数据ACALL DL1MS ;延时INC R0 ;指向高位的十位数; ;显示高位的十位数ORL P1, #7FH ;清原显示数据ORL P3, #3CH ;清原选通数据ANL P3, #0DFH ;选通高位的十位数MOV A, R0 ;移入显示数值MOV C, LED4 ;指针放大小灯状态RLC A ;MOV DPTR, #

29、TABLE2 ;移入表首地址MOVC A, A+DPTR ;查表ANL P1, A ;送显示数据ACALL DL1MS ;延时;OUTPLY: POP PSW ;恢复数据POP ACCRETNOPNOPLJMP ERR ;软件陷阱;TABLE1: DB 0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H, 80H, 90H,0BFH, 8EH,0FFH; “0“, “1“, . . “9“, “-“, “F“, “ “;TABLE2: DB 0FFH, 0DFH, 0F9H, 0D9H, 0A4H, 84H, 0B0H, 90H, 0BFH, 09FH; “ “,

30、“ :“, “1 “, “1:“, “2 “, “2:“, “3 “, “3:“, “- “, “-:“;*; 无显示(灭灯)程序 ;*NOPLAY: ORL P1, #7FH ;清显示数据ORL P3, #3CH ;清选通数据INC R0 ;指针自增 2INC R0ACALL DL1MS ;延时RETNOPNOPLJMP ERR ;软件陷阱;*; 延时程序 ;*DL1MS: MOV R3, #0F9H ;延时 1250US 只为 DISPLY 所调用DL1MS1: NOPNOPNOPDJNZ R3, DL1MS1RETNOPNOPLJMP ERR ;软件陷阱;KEYDLY: CLR BELL

31、 ; 按键消抖动专用延时程序,ACALL DISPLY ; 在消除抖动的同时发出按键提示音SETB BELLRETNOPNOPLJMP ERR ;软件陷阱;DL50MS: MOV R7, #0AH ;50 毫秒延时程序DL50M1: ACALL DISPLY ; 每调用一次显示程序 5MSDJNZ R7, DL50M1 ; 调用 10 次RETNOPNOPLJMP ERR ;软件陷阱;DL100: ACALL DL50MS ;延时 100 毫秒ACALL DL50MSRETNOPNOPLJMP ERR ;软件陷阱;DL05S: ACALL DL100 ; 延时 0.5 秒ACALL DL100

32、ACALL DL100ACALL DL100ACALL DL100RETNOPNOPLJMP ERR ;软件陷阱;DL1S: ACALL DL05S ;延时 1 秒ACALL DL05SRETNOPNOPLJMP ERR ;软件陷阱;*; ERR(出错处理) 程序 ;*ERR: CLR EA ;关中断MOV DPTR, #ERR1 ; 准备返回地址PUSH DPL ; 压栈PUSH DPH ;RETI ;中断返回ERR1: MOV 56H, #0AAH ;建立上电标志( 出错标志)MOV 57H, #55HMOV A, #00H ; 准备返回地址PUSH A ; 压栈PUSH ARETI ; 中断返回NOPNOPLJMP ERR ;软件陷阱;ORG 07FAHNOPNOPNOPLJMP ERR ;软件陷阱;END ;程序结束

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

当前位置:首页 > 网络科技 > 开发文档

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报