📄 13.lst
字号:
页 1
01-29-03
02:14:23
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;******************;
; 定时器程序 ;
; 采用89c2051 ;
; 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 ;L0~L3:显示数据存储器
L1 EQU 37H
L2 EQU 38H
L3 EQU 39H
DSPLYP EQU 3AH ;显示数据指针(DISPLAY-POINT)
PLYTS EQU 3BH ;显示次数计数器(DISPLAY-TIMES)
;
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.7 ;继电器
FKEY BIT P3.0 ;功能键 (S1)
MKEY BIT P3.1 ;修改键 (S2)
;
WORKIN BIT 38H ;工作状态指示位
;
;******************
; 中断入口 ;
;******************
ORG 0000H
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例13\13.ASM
页 2
01-29-03
02:14:23
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0000 020030 START: LJMP MAIN ; 0000H 引向主程序
0003 02040D LJMP ERR ; 0003H
0006 00 NOP
0007 00 NOP
0008 02040D LJMP ERR ; 引向出错处理程序
000B 02010F LJMP PGT0 ; 000BH 引向中断处理程序PGT0
000E 00 NOP
000F 00 NOP
0010 02040D LJMP ERR ; 引向出错处理程序
0013 02040D LJMP ERR ; 0013H INT1
0016 00 NOP
0017 00 NOP
0018 02040D LJMP ERR
001B 02040D LJMP ERR ; 001BH T1
001E 00 NOP
001F 00 NOP
0020 02040D LJMP ERR
0023 02040D LJMP ERR ; 0023H
0026 00 NOP
0027 00 NOP
0028 02040D LJMP ERR
002B 02040D LJMP ERR ; 002BH
002E 00 NOP
002F 00 NOP
;
;************
; 主程序 ;
;************
0030 75A800 MAIN: MOV IE, #00H ;关中断
0033 758157 MOV SP, #57H ;设置堆栈指针
0036 75D000 MOV PSW, #00H ;选用寄存器组0
0039 758911 MOV TMOD, #11H ;设定中断工作方式为T0和T1
;
003C E556 MOV A, 56H
003E B4AA0C CJNE A, #0AAH, CSTART ;判上电复位标志,无标志转冷启动
0041 E557 MOV A, 57H
0043 B45507 CJNE A, #55H, CSTART ; 无标志转冷启动
0046 0198 AJMP HSTART ;有上电复位标志转热启动
0048 00 NOP
0049 00 NOP
004A 02040D LJMP ERR ;软件陷阱,引向出错处理程序
004D 7590FF CSTART: MOV P1, #0FFH ;冷启动,全面初始化
0050 75B0FF MOV P3, #0FFH
0053 758800 MOV TCON, #00H ;计时停止
0056 758AB0 MOV TL0, #0B0H ;赋中断T0初值
0059 758C3C MOV TH0, #3CH
005C 753C0A MOV TCOUNT, #0AH ;赋定时器初值
005F 7D00 MOV R5, #00H ;R5为一空单元(备用)
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例13\13.ASM
页 3
01-29-03
02:14:23
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0061 7C00 MOV R4, #00H ; R4 为工作模式选择寄存器
0063 753000 MOV SL, #00H ;定时单元清零
0066 753100 MOV SH, #00H ;秒
0069 753200 MOV ML, #00H ;
006C 753300 MOV MH, #00H ;分
006F 753400 MOV HL, #00H ;
0072 753500 MOV HH, #00H ;时
0075 753B64 MOV PLYTS, #64H ;赋显示次数初值为100次
0078 753A36 MOV DSPLYP, #L0 ;显示指针指向显存单元
007B 75360A MOV L0, #0AH ;送显示数据"-----"
007E 75370A MOV L1, #0AH
0081 75380A MOV L2, #0AH
0084 753904 MOV L3, #04H
0087 D230 SETB LED4 ;LED4为数码管之间的发光二极管
0089 D239 SETB LPLMOD ;设定显示方式为闪烁
008B D23A SETB HPLMOD ;
008D D23B SETB BRIGHT ;允许显示
008F C238 CLR WORKIN ;清工作标志 , 待命
0091 01AB AJMP SETUP ;转开始工作
0093 00 NOP
0094 00 NOP
0095 02040D LJMP ERR ;软件陷阱
0098 759800 HSTART: MOV SCON, #00H ; 有上电标志,热启动,清串行口控制寄存器
009B 75B800 MOV IP, #00H ; 清中断优先控制寄存器
009E D2B0 SETB FKEY ;重设按键
00A0 D2B1 SETB MKEY
00A2 D2AF SETB EA ;开中断
00A4 01BD AJMP BEGIN ;转向继续工作
00A6 00 NOP
00A7 00 NOP
00A8 02040D LJMP ERR ;软件陷阱
00AB D2AF SETUP: SETB EA ;开中断
;
00AD 711F MAIN1: ACALL DISPLY ;调用显示
00AF 20B035 JB FKEY, JUDGE ;按键扫描
00B2 71D1 ACALL KEYDLY ;延时消抖动
00B4 20B030 JB FKEY, JUDGE ;无键按下转向判断是否到点
00B7 C2A9 CLR ET0 ;功能键被按下,则
00B9 C28C CLR TR0 ;暂停计时
00BB 31C3 ACALL MENU ; 调用菜单设置程序
00BD D238 BEGIN: SETB WORKIN ;置工作标志位,开始工作
00BF D2A9 SETB ET0 ;开中断
00C1 D28C SETB TR0 ;开始计时
00C3 EC MOV A, R4 ;移入工作模式选择
00C4 23 RL A ;指针放大
00C5 9000C9 MOV DPTR, #M_TAB
00C8 73 JMP @A+DPTR ;根据工作模式跳转到相应程序段
00C9 01D6 M_TAB: AJMP WORK1
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例13\13.ASM
页 4
01-29-03
02:14:23
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
00CB 01D6 AJMP WORK2
00CD 01DF AJMP WORK3
00CF 01DF AJMP WORK4
00D1 00 NOP
00D2 00 NOP
00D3 02040D LJMP ERR ;软件陷阱
WORK1: ;
00D6 C2B7 WORK2: CLR SWITCH ;工作方式1和2:开继电器
00D8 01E1 AJMP MAIN2
00DA 00 NOP
00DB 00 NOP
00DC 02040D LJMP ERR ;软件陷阱
WORK3: ;
00DF D2B7 WORK4: SETB SWITCH ;工作方式3和4:不开继电器
00E1 C297 MAIN2: CLR BELL ;蜂鸣器短鸣一声,以示开始工作
00E3 71F3 ACALL DL05S
00E5 D297 SETB BELL
00E7 3038C3 JUDGE: JNB WORKIN, MAIN1 ;判断是否在定时之中
00EA E530 MOV A, SL ;判断秒是否为零
00EC 70BF JNZ MAIN1
00EE E531 MOV A, SH ;判断秒是否为零
00F0 70BB JNZ MAIN1
00F2 E532 MOV A, ML ;判断分是否为零
00F4 70B7 JNZ MAIN1
00F6 E533 MOV A, MH ;判断分是否为零
00F8 70B3 JNZ MAIN1
00FA E534 MOV A, HL ;判断时是否为零
00FC 70AF JNZ MAIN1
00FE E535 MOV A, HH ;判断时是否为零
0100 70AB JNZ MAIN1 ;若时分秒全为零则
0102 C2A9 CLR ET0 ; 停止计时
0104 C28C CLR TR0 ;
0106 5186 ACALL ACTION ; 调用到点工作子程序
0108 0130 AJMP MAIN ; 返回
010A 00 NOP
010B 00 NOP
010C 02040D LJMP ERR ;软件陷阱
;
;******************
; 倒计时程序 ;
;******************
010F C2AF PGT0: CLR EA ;关中断
0111 C0E0 PUSH ACC ;保护现场
0113 C0D0 PUSH PSW
0115 C082 PUSH DPL
0117 C083 PUSH DPH
0119 75D008 MOV PSW, #08H ;选用寄存器组1
011C C28C CLR TR0 ;暂停计时
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例13\13.ASM
页 5
01-29-03
02:14:23
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
011E 74B7 MOV A,#0B7H ;中断同步修正
0120 258A ADD A,TL0
0122 F58A MOV TL0,A
0124 743C MOV A,#3CH
0126 258C ADD A,TH0
0128 F58C MOV TH0,A
012A D28C SETB TR0 ;恢复计时
012C 153C DEC TCOUNT ;定时器T0每50 000毫秒溢出一次,则
012E E53C MOV A, TCOUNT ; 溢出10次为0.5秒
0130 7028 JNZ OUTT0 ;判断是否到半秒
0132 753C0A MOV TCOUNT, #0AH ;
0135 B230 CPL LED4 ; 若到半秒LED取反
0137 303020 JNB LED4, OUTT0 ;LED每闪烁一次是一秒
013A 7831 MOV R0, #SH ;移入秒位的地址
013C D220 SETB IFDEC ;BCD子程序参数,使其做减法
013E 316A ACALL ADDBCD ;调用BCD子程序, 秒减1
0140 BB9917 CJNE R3, #99H, OUTT0 ;判断秒要否借位
0143 753105 MOV SH, #05H ;要借位则
0146 753009 MOV SL, #09H ; 送数据59(否则显示99)
0149 7833 MOV R0, #MH ;移入分位的地址
014B 316A ACALL ADDBCD ;分减1
014D BB990A CJNE R3, #99H, OUTT0 ;判断分要否借位
0150 753305 MOV MH, #05H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -