📄 ds1302-dsy.lst
字号:
A51 MACRO ASSEMBLER DS1302_DSY 07/21/2006 08:51:55 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN DS1302-DSY.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE DS1302-DSY.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
2 ;8位数码管显示
3 ;P0 为段码口、P2 为位码口
4 ;晶振 11.0592M
5 ;时钟芯片:DS1302
6
7 ;************** DS1302 端口位定义 **************
0091 8 IO_DATA BIT P1.1 ; 数据传送总线
0090 9 SCLK BIT P1.0 ; 时钟控制总线
0092 10 RST BIT P1.2 ; 复位总线
11
0094 12 K1 EQU P1.4 ;独立键
0095 13 K2 EQU P1.5
0096 14 K3 EQU P1.6
0097 15 K4 EQU P1.7
16
00B7 17 BEEP EQU P3.7 ;蜂鸣器
0093 18 RELAY EQU P1.3 ;继电器
19
0022 20 T_CONU EQU 22H ;中断计数
0023 21 TIME_L EQU 23H ;定时初值
0024 22 TIME_H EQU 24H
23
0050 24 TIME_DATA EQU 50H ;显示时间单元首地址
0060 25 DATE_DATA EQU 60H ;显示日期单元首地址
0058 26 DS_DATA EQU 58H ;显示定时时间单元首地址
27 ;------------------------------------------------
0000 28 ORG 0000H
0000 2100 29 AJMP MAIN
30
000B 31 ORG 000BH
000B 2165 32 AJMP INT_T0
33
0100 34 ORG 0100H
35 ;------------------------------------------------
0100 36 MAIN:
0100 758901 37 MOV TMOD,#01H ;T0,方式1
0103 752300 38 MOV TIME_L,#00H ;50MS定时值
0106 75244C 39 MOV TIME_H,#4CH
0109 752200 40 MOV T_CONU,#00H ;中断次数
010C 75A882 41 MOV IE,#82H ;EA=1,ET0=1
42
010F 7400 43 MOV A,#00H
0111 7840 44 MOV R0,#40H ;从40H单元开始
0113 7940 45 MOV R1,#40H ;清64个单元
0115 F6 46 M_CLEAR: MOV @R0,A
0116 08 47 INC R0
0117 D9FC 48 DJNZ R1,M_CLEAR
49
0119 757F0A 50 MOV 7FH,#0AH ;送熄灭符
011C D2B7 51 SETB BEEP
011E 1206BA 52 LCALL TIME_DELAY ;调显示延时
0121 120180 53 LCALL PROSET ;DS1302初始化
54
0124 55 MAIN1:
0124 120190 56 LCALL GET_TIME ;从DS1302读数据程序
0127 120235 57 LCALL CHULI ;实时时间数据处理
012A 7850 58 MOV R0,#TIME_DATA ;显示时、分、秒
A51 MACRO ASSEMBLER DS1302_DSY 07/21/2006 08:51:55 PAGE 2
012C 1202A2 59 LCALL DISP
012F 7850 60 MOV R0,#TIME_DATA
0131 1202AE 61 LCALL TIME_DISPLAY
0134 1202DA 62 LCALL SET_KEY ;键功能程序
0137 12068A 63 LCALL COMP ;实时时间与定时时间比较
013A 2094E7 64 JB K1,MAIN1
013D D1DC 65 CALL BEEP_BL
013F 66 MAIN2:
013F 120235 67 LCALL CHULI ;日期数据处理
0142 7860 68 MOV R0,#DATE_DATA
0144 1202A2 69 LCALL DISP ;显示年、月、日
0147 7860 70 MOV R0,#DATE_DATA
0149 1202AE 71 LCALL TIME_DISPLAY
014C 2094F0 72 JB K1,MAIN2
014F D1DC 73 CALL BEEP_BL
0151 74 MAIN3:
0151 120630 75 LCALL DS_CHULI ;定时时间数据处理
0154 7858 76 MOV R0,#DS_DATA
0156 12065B 77 LCALL DS_SP ;显示定时时间
0159 7858 78 MOV R0,#DS_DATA
015B 120667 79 LCALL DS_DISPLAY
015E 2094F0 80 JB K1,MAIN3
0161 D1DC 81 CALL BEEP_BL
0163 2124 82 AJMP MAIN1
83 ;--------------------------------------------
84 ;中断服务子程序
85 ;300MS对闪动标记取反一次
86 ;--------------------------------------------
0165 87 INT_T0:
0165 C0E0 88 PUSH ACC
0167 C0D0 89 PUSH PSW
0169 85238A 90 MOV TL0,TIME_L
016C 85248C 91 MOV TH0,TIME_H
016F 0522 92 INC T_CONU
0171 E522 93 MOV A,T_CONU
0173 B40605 94 CJNE A,#06H,INT_END
0176 752200 95 MOV T_CONU,#00H
0179 B20A 96 CPL 0AH
017B 97 INT_END:
017B D0D0 98 POP PSW
017D D0E0 99 POP ACC
017F 32 100 RETI
101 ;--------------------------------------------
102 ;DS1302 初始化子程序
103 ; (R0)=数据 (R1)=地址
104 ;--------------------------------------------
0180 105 PROSET:
0180 C292 106 CLR RST ;DS1302复位
0182 C290 107 CLR SCLK
0184 00 108 NOP
0185 00 109 NOP
0186 D292 110 SETB RST
111
112 ;MOV R1,#80H ;写秒寄存器
113 ;MOV R0,#00H ;启动振荡器
114 ;LCALL WRITE
115
116 ;MOV R1,#82H ;写分寄存器
117 ;MOV R0,#58H
118 ;LCALL WRITE
119
120 ;MOV R1,#84H ;写时寄存器
121 ;MOV R0,#80H
122 ;LCALL WRITE
123
0188 7990 124 MOV R1,#90H ;写充电寄存器
A51 MACRO ASSEMBLER DS1302_DSY 07/21/2006 08:51:55 PAGE 3
018A 78AB 125 MOV R0,#0ABH
018C 1201C2 126 LCALL WRITE
018F 22 127 RET
128 ;===============================================
129 ;读时间、日期数据子程序
130 ;存放单元 40H - 46H
131 ;===============================================
0190 132 GET_TIME:
0190 7981 133 MOV R1,#81H ;读秒
0192 1201FD 134 LCALL READ
0195 8840 135 MOV 40H,R0
136
0197 7983 137 MOV R1,#83H ;读分
0199 1201FD 138 LCALL READ
019C 8841 139 MOV 41H,R0
140
019E 7985 141 MOV R1,#85H ;读时
01A0 1201FD 142 LCALL READ
01A3 8842 143 MOV 42H,R0
144
01A5 7987 145 MOV R1,#87H ;读出日期
01A7 1201FD 146 LCALL READ
01AA 8843 147 MOV 43H,R0
148
01AC 7989 149 MOV R1,#89H ;读出月份
01AE 1201FD 150 LCALL READ
01B1 8844 151 MOV 44H,R0
152
01B3 798B 153 MOV R1,#8BH ;读出星期
01B5 1201FD 154 LCALL READ
01B8 8846 155 MOV 46H,R0
156
01BA 798D 157 MOV R1,#8DH ;读出年
01BC 1201FD 158 LCALL READ
01BF 8845 159 MOV 45H,R0
160
01C1 22 161 RET
162 ;================================================
163 ;写 DS1302 子程序
164 ;================================================
01C2 165 WRITE:
01C2 C290 166 CLR SCLK
01C4 00 167 NOP
01C5 00 168 NOP
01C6 D292 169 SETB RST
01C8 00 170 NOP
01C9 E9 171 MOV A,R1
01CA 7A08 172 MOV R2,#08H
01CC 173 WRI_01:
01CC 13 174 RRC A ;传输地址到DS1302
01CD 00 175 NOP
01CE 00 176 NOP
01CF C290 177 CLR SCLK
01D1 00 178 NOP
01D2 00 179 NOP
01D3 9291 180 MOV IO_DATA,C
01D5 00 181 NOP
01D6 00 182 NOP
01D7 D290 183 SETB SCLK
01D9 00 184 NOP
01DA 00 185 NOP
01DB DAEF 186 DJNZ R2,WRI_01
01DD C290 187 CLR SCLK
01DF 00 188 NOP
01E0 00 189 NOP
01E1 E8 190 MOV A,R0
A51 MACRO ASSEMBLER DS1302_DSY 07/21/2006 08:51:55 PAGE 4
01E2 7A08 191 MOV R2,#08H
01E4 192 WRI_02:
01E4 13 193 RRC A ;传输数据到DS1302
01E5 00 194 NOP
01E6 C290 195 CLR SCLK
01E8 00 196 NOP
01E9 00 197 NOP
01EA 9291 198 MOV IO_DATA,C
01EC 00 199 NOP
01ED 00 200 NOP
01EE D290 201 SETB SCLK
01F0 00 202 NOP
01F1 00 203 NOP
01F2 DAF0 204 DJNZ R2,WRI_02
01F4 C290 205 CLR SCLK
01F6 00 206 NOP
01F7 00 207 NOP
01F8 C292 208 CLR RST
01FA 00 209 NOP
01FB 00 210 NOP
01FC 22 211 RET
212 ;=================================================
213 ;读 DS1302 子程序
214 ;=================================================
01FD 215 READ:
01FD C290 216 CLR SCLK
01FF 00 217 NOP
0200 00 218 NOP
0201 D292 219 SETB RST
0203 00 220 NOP
0204 00 221 NOP
0205 E9 222 MOV A,R1
0206 7A08 223 MOV R2,#08H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -