📄 定时器6.lst
字号:
A51 MACRO ASSEMBLER 定时器6 04/14/2005 16:26:25 PAGE 1
MACRO ASSEMBLER A51 V1.10
OBJECT MODULE PLACED IN 定时器6.OBJ
ASSEMBLER INVOKED BY: H:\239\A51.EXE 定时器6.ASM DB
LOC OBJ LINE SOURCE
1 ;实验六:定时器设计
2 ;******************;
3 ; 定时器程序 ;
4 ; 采用89c2051 ;
5 ; 2001.10 ;
6 ;******************;
7 ;
8 ;******************
9 ; 伪定义 ;
10 ;******************
0030 11 SL EQU 30H ;SL存放秒的个位数
0031 12 SH EQU 31H ;SH存放秒的十位数
0032 13 ML EQU 32H ;ML存放分的个位数
0033 14 MH EQU 33H ;MH存放分的十位数
0034 15 HL EQU 34H ;HL存放时的个位数
0035 16 HH EQU 35H ;HH存放时的十位数
17 ;
0036 18 L0 EQU 36H ;L0~L3:显示数据存储器
0037 19 L1 EQU 37H
0038 20 L2 EQU 38H
0039 21 L3 EQU 39H
003A 22 DSPLYP EQU 3AH ;显示数据指针(DISPLAY-POINT)
003B 23 PLYTS EQU 3BH ;显示次数计数器(DISPLAY-TIMES)
24 ;
0039 25 LPLMOD BIT 39H ;低两位显示方式(LOW-PLAY-MOD)
003A 26 HPLMOD BIT 3AH ;高两位显示方式(HIGH-PLAY-MOD)
003B 27 BRIGHT BIT 3BH ;DISPLAY子程序参数:亮灭指示位
28 ;
003C 29 TCOUNT EQU 3CH ;时间计数器(TIME-COUNT)
30 ;
003D 31 ADDRES EQU 3DH ;加1子程序参数
003E 32 MAX EQU 3EH ;加1子程序参数
0020 33 IFDEC BIT 20H ;BCD加法子程序参数
34 ;
003F 35 R_MOD EQU 3FH ;响铃方式参数
36 ;
0097 37 LED4 BIT P1.7 ;发光管状态位
00A7 38 BELL BIT P2.7 ;蜂鸣器
00B7 39 SWITCH BIT P3.7 ;继电器
00B0 40 FKEY BIT P3.0 ;功能键 (S1)
00B1 41 MKEY BIT P3.1 ;修改键 (S2)
42 ;
0038 43 WORKIN BIT 38H ;工作状态指示位
44 ;
45
46 ;******************
47 ; 中断入口 ;
48 ;******************
0000 49 ORG 0000H
0000 020030 50 START: LJMP MAIN ; 0000H 引向主程序
0003 02040D 51 LJMP ERR ; 0003H
0006 00 52 NOP
0007 00 53 NOP
0008 02040D 54 LJMP ERR ; 引向出错处理程序
000B 02010F 55 LJMP PGT0 ; 000BH 引向中断处理程序PGT0
000E 00 56 NOP
000F 00 57 NOP
0010 02040D 58 LJMP ERR ; 引向出错处理程序
A51 MACRO ASSEMBLER 定时器6 04/14/2005 16:26:25 PAGE 2
0013 02040D 59 LJMP ERR ; 0013H INT1
0016 00 60 NOP
0017 00 61 NOP
0018 02040D 62 LJMP ERR
001B 02040D 63 LJMP ERR ; 001BH T1
001E 00 64 NOP
001F 00 65 NOP
0020 02040D 66 LJMP ERR
0023 02040D 67 LJMP ERR ; 0023H
0026 00 68 NOP
0027 00 69 NOP
0028 02040D 70 LJMP ERR
002B 02040D 71 LJMP ERR ; 002BH
002E 00 72 NOP
002F 00 73 NOP
74 ;
75 ;************
76 ; 主程序 ;
77 ;************
0030 75A800 78 MAIN: MOV IE, #00H ;关中断
0033 758157 79 MOV SP, #57H ;设置堆栈指针
0036 75D000 80 MOV PSW, #00H ;选用寄存器组0
0039 758911 81 MOV TMOD, #11H ;设定中断工作方式为T0和T1
82 ;
003C E556 83 MOV A, 56H
003E B4AA0C 84 CJNE A, #0AAH, CSTART ;判上电复位标志,无标志转冷启动
0041 E557 85 MOV A, 57H
0043 B45507 86 CJNE A, #55H, CSTART ; 无标志转冷启动
0046 0198 87 AJMP HSTART ;有上电复位标志转热启动
0048 00 88 NOP
0049 00 89 NOP
004A 02040D 90 LJMP ERR ;软件陷阱,引向出错处理程序
004D 7590FF 91 CSTART: MOV P1, #0FFH ;冷启动,全面初始化
0050 75B0FF 92 MOV P3, #0FFH
0053 758800 93 MOV TCON, #00H ;计时停止
0056 758AB0 94 MOV TL0, #0B0H ;赋中断T0初值
0059 758C3C 95 MOV TH0, #3CH
005C 753C0A 96 MOV TCOUNT, #0AH ;赋定时器初值
005F 7D00 97 MOV R5, #00H ;R5为一空单元(备用)
0061 7C00 98 MOV R4, #00H ; R4 为工作模式选择寄存器
0063 753000 99 MOV SL, #00H ;定时单元清零
0066 753100 100 MOV SH, #00H ;秒
0069 753200 101 MOV ML, #00H ;
006C 753300 102 MOV MH, #00H ;分
006F 753400 103 MOV HL, #00H ;
0072 753500 104 MOV HH, #00H ;时
0075 753B64 105 MOV PLYTS, #64H ;赋显示次数初值为100次
0078 753A36 106 MOV DSPLYP, #L0 ;显示指针指向显存单元
007B 75360A 107 MOV L0, #0AH ;送显示数据"-----"
007E 75370A 108 MOV L1, #0AH
0081 75380A 109 MOV L2, #0AH
0084 753904 110 MOV L3, #04H
0087 D297 111 SETB LED4 ;LED4为数码管之间的发光二极管
0089 D239 112 SETB LPLMOD ;设定显示方式为闪烁
008B D23A 113 SETB HPLMOD ;
008D D23B 114 SETB BRIGHT ;允许显示
008F C238 115 CLR WORKIN ;清工作标志 , 待命
0091 01AB 116 AJMP SETUP ;转开始工作
0093 00 117 NOP
0094 00 118 NOP
0095 02040D 119 LJMP ERR ;软件陷阱
0098 759800 120 HSTART: MOV SCON, #00H ; 有上电标志,热启动,清串行口控制寄存器
009B 75B800 121 MOV IP, #00H ; 清中断优先控制寄存器
009E D2B0 122 SETB FKEY ;重设按键
00A0 D2B1 123 SETB MKEY
00A2 D2AF 124 SETB EA ;开中断
A51 MACRO ASSEMBLER 定时器6 04/14/2005 16:26:25 PAGE 3
00A4 01BD 125 AJMP BEGIN ;转向继续工作
00A6 00 126 NOP
00A7 00 127 NOP
00A8 02040D 128 LJMP ERR ;软件陷阱
00AB D2AF 129 SETUP: SETB EA ;开中断
130 ;
00AD 711F 131 MAIN1: ACALL DISPLY ;调用显示
00AF 20B035 132 JB FKEY, JUDGE ;按键扫描
00B2 71D1 133 ACALL KEYDLY ;延时消抖动
00B4 20B030 134 JB FKEY, JUDGE ;无键按下转向判断是否到点
00B7 C2A9 135 CLR ET0 ;功能键被按下,则
00B9 C28C 136 CLR TR0 ;暂停计时
00BB 31C3 137 ACALL MENU ; 调用菜单设置程序
00BD D238 138 BEGIN: SETB WORKIN ;置工作标志位,开始工作
00BF D2A9 139 SETB ET0 ;开中断
00C1 D28C 140 SETB TR0 ;开始计时
00C3 EC 141 MOV A, R4 ;移入工作模式选择
00C4 23 142 RL A ;指针放大
00C5 9000C9 143 MOV DPTR, #M_TAB
00C8 73 144 JMP @A+DPTR ;根据工作模式跳转到相应程序段
00C9 01D6 145 M_TAB: AJMP WORK1
00CB 01D6 146 AJMP WORK2
00CD 01DF 147 AJMP WORK3
00CF 01DF 148 AJMP WORK4
00D1 00 149 NOP
00D2 00 150 NOP
00D3 02040D 151 LJMP ERR ;软件陷阱
00D6 152 WORK1: ;
00D6 C2B7 153 WORK2: CLR SWITCH ;工作方式1和2:开继电器
00D8 01E1 154 AJMP MAIN2
00DA 00 155 NOP
00DB 00 156 NOP
00DC 02040D 157 LJMP ERR ;软件陷阱
00DF 158 WORK3: ;
00DF D2B7 159 WORK4: SETB SWITCH ;工作方式3和4:不开继电器
00E1 C2A7 160 MAIN2: CLR BELL ;蜂鸣器短鸣一声,以示开始工作
00E3 71F3 161 ACALL DL05S
00E5 D2A7 162 SETB BELL
00E7 3038C3 163 JUDGE: JNB WORKIN, MAIN1 ;判断是否在定时之中
00EA E530 164 MOV A, SL ;判断秒是否为零
00EC 70BF 165 JNZ MAIN1
00EE E531 166 MOV A, SH ;判断秒是否为零
00F0 70BB 167 JNZ MAIN1
00F2 E532 168 MOV A, ML ;判断分是否为零
00F4 70B7 169 JNZ MAIN1
00F6 E533 170 MOV A, MH ;判断分是否为零
00F8 70B3 171 JNZ MAIN1
00FA E534 172 MOV A, HL ;判断时是否为零
00FC 70AF 173 JNZ MAIN1
00FE E535 174 MOV A, HH ;判断时是否为零
0100 70AB 175 JNZ MAIN1 ;若时分秒全为零则
0102 C2A9 176 CLR ET0 ; 停止计时
0104 C28C 177 CLR TR0 ;
0106 5186 178 ACALL ACTION ; 调用到点工作子程序
0108 0130 179 AJMP MAIN ; 返回
010A 00 180 NOP
010B 00 181 NOP
010C 02040D 182 LJMP ERR ;软件陷阱
183 ;
184 ;******************
185 ; 倒计时程序 ;
186 ;******************
010F C2AF 187 PGT0: CLR EA ;关中断
0111 C0E0 188 PUSH ACC ;保护现场
0113 C0D0 189 PUSH PSW
0115 C082 190 PUSH DPL
A51 MACRO ASSEMBLER 定时器6 04/14/2005 16:26:25 PAGE 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -