📄 ex10-3.lst
字号:
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 1
MCS-51 Family Cross Assembler A S E M - 5 1 V 1.2
=====================================================
Source File: EX10-3.ASM
Object File: EX10-3.HEX
List File: EX10-3.LST
Line I Addr Code Source
1: ;*********************************************************************/
2:
3: B 95 T_RST Bit P1.5 ;实时时钟复位线引脚
4: B 96 T_CLK Bit P1.6 ;实时时钟时钟线引脚
5: B 97 T_IO Bit P1.7 ;实时时钟数据线引脚
6:
7: N 0030 SECOND EQU 30H
8: N 0031 MINUTE EQU 31H
9: N 0032 HOUR EQU 32H
10: N 0033 DAY EQU 33H
11: N 0034 MONTH EQU 34H
12: N 0035 WEEK EQU 35H
13: N 0036 YEARL EQU 36H
14:
15: ;*********************************************************************/
16: N 0000 ORG 0000H
17: 0000 02 00 60 START: LJMP MAIN
18: N 0060 ORG 0060H
19: 0060 75 81 60 MAIN: MOV SP,#60H ;修改堆栈
20: ;*********************************************************************
21: 0063 75 30 55 MOV SECOND,#55H ;初始时间设为23:59:55
22: 0066 75 31 59 MOV MINUTE,#59H
23: 0069 75 32 23 MOV HOUR,#23H
24: 006C 75 33 31 MOV DAY,#31H ;初始日期设为07年12月31日第一周
25: 006F 75 34 12 MOV MONTH,#12H
26: 0072 75 35 01 MOV WEEK,#01H
27: 0075 75 36 07 MOV YEARL,#07H
28: 0078 12 01 5F LCALL SETDS1302
29: 007B 12 01 FF LCALL LCD_INIT ;调用液晶模块初始化子程序
30: 007E 7B 14 MOV R3,#20
31: 0080 75 89 01 MOV TMOD,#01H
32: 0083 75 8C 3C MOV TH0,#3CH ;置定时器初值(定时50ms)
33: 0086 75 8A B0 MOV TL0,#0B0H
34: 0089 D2 8C SETB TR0 ;启动定时器0
35: 008B 10 8D 02 LP1: JBC TF0,LP2 ;查询计数溢出
36: 008E 80 FB SJMP LP1 ;未到50 ms继续计数
37: 0090 75 8C 3C LP2: MOV TH0,#3CH ;重新置定时器初值
38: 0093 75 8A B0 MOV TL0,#0B0H
39: 0096 7A 81 MOV R2,#81H ;从第1行第2位开始,设置DDRAM地址
40: 0098 12 02 34 LCALL WRTC
41: 009B 90 00 BF MOV DPTR,#ZIFU1 ;指向显示字符代码首地址
42: 009E 7C 06 MOV R4,#06H
43: 00A0 12 02 44 LCALL WP1 ;第1行字符代码写入DDRAM
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 2
Line I Addr Code Source
44: 00A3 12 01 15 LCALL DISPYMD ;显示年月日
45: 00A6 7A C1 MOV R2,#0C1H ;设置第2行DDRAM地址
46: 00A8 12 02 34 LCALL WRTC
47: 00AB 90 00 C5 MOV DPTR,#ZIFU2 ;指向显示字符代码首地址
48: 00AE 7C 06 MOV R4,#06H
49: 00B0 12 02 44 LCALL WP1 ;第1行字符代码写入DDRAM
50: 00B3 12 00 CB LCALL DISPHMS ;显示时分秒
51: 00B6 DB D3 DJNZ R3,LP1 ;未到1s继续循环
52: 00B8 12 01 BA LCALL GET1302 ;每到1s从DS1302读取一次时间
53: 00BB 7B 14 mov r3,#20
54: 00BD 80 CC SJMP lp1
55: 00BF 44 61 74 65 ZIFU1: DB "Date: "
00C3 3A 20
56: 00C5 54 69 6D 65 ZIFU2: DB "Time: "
00C9 3A 20
57:
58: ;*******************************************
59: 00CB E5 32 DISPHMS:MOV A,HOUR ;时分秒显示子程序
60: 00CD C4 SWAP A
61: 00CE 54 03 ANL A,#03H
62: 00D0 24 30 ADD A,#30H
63: 00D2 FA MOV R2,A
64: 00D3 12 02 3C LCALL WRTD
65: 00D6 E5 32 MOV A,HOUR
66: 00D8 54 0F ANL A,#0FH
67: 00DA 24 30 ADD A,#30H
68: 00DC FA MOV R2,A
69: 00DD 12 02 3C LCALL WRTD
70: 00E0 7A 2D MOV R2,#2DH
71: 00E2 12 02 3C LCALL WRTD
72: 00E5 E5 31 MOV A,MINUTE ;显示分
73: 00E7 C4 SWAP A
74: 00E8 54 07 ANL A,#07H
75: 00EA 24 30 ADD A,#30H
76: 00EC FA MOV R2,A
77: 00ED 12 02 3C LCALL WRTD
78: 00F0 E5 31 MOV A,MINUTE
79: 00F2 54 0F ANL A,#0FH
80: 00F4 24 30 ADD A,#30H
81: 00F6 FA MOV R2,A
82: 00F7 12 02 3C LCALL WRTD
83: 00FA 7A 2D MOV R2,#2DH
84: 00FC 12 02 3C LCALL WRTD
85: 00FF E5 30 MOV A,SECOND ;显示秒
86: 0101 C4 SWAP A
87: 0102 54 07 ANL A,#07H
88: 0104 24 30 ADD A,#30H
89: 0106 FA MOV R2,A
90: 0107 12 02 3C LCALL WRTD
91: 010A E5 30 MOV A,SECOND
92: 010C 54 0F ANL A,#0FH
93: 010E 24 30 ADD A,#30H
94: 0110 FA MOV R2,A
95: 0111 12 02 3C LCALL WRTD
96: 0114 22 RET
97: ;*****************************************
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 3
Line I Addr Code Source
98: 0115 E5 36 DISPYMD:MOV A,YEARL ;年月日显示子程序
99: 0117 C4 SWAP A
100: 0118 54 03 ANL A,#03H
101: 011A 24 30 ADD A,#30H
102: 011C FA MOV R2,A
103: 011D 12 02 3C LCALL WRTD
104: 0120 E5 36 MOV A,YEARL
105: 0122 54 0F ANL A,#0FH
106: 0124 24 30 ADD A,#30H
107: 0126 FA MOV R2,A
108: 0127 12 02 3C LCALL WRTD
109: 012A 7A 2D MOV R2,#2DH
110: 012C 12 02 3C LCALL WRTD
111:
112: 012F E5 34 MOV A,MONTH ;显示月
113: 0131 C4 SWAP A
114: 0132 54 07 ANL A,#07H
115: 0134 24 30 ADD A,#30H
116: 0136 FA MOV R2,A
117: 0137 12 02 3C LCALL WRTD
118: 013A E5 34 MOV A,MONTH
119: 013C 54 0F ANL A,#0FH
120: 013E 24 30 ADD A,#30H
121: 0140 FA MOV R2,A
122: 0141 12 02 3C LCALL WRTD
123: 0144 7A 2D MOV R2,#2DH
124: 0146 12 02 3C LCALL WRTD
125: 0149 E5 33 MOV A,DAY ;显示日
126: 014B C4 SWAP A
127: 014C 54 07 ANL A,#07H
128: 014E 24 30 ADD A,#30H
129: 0150 FA MOV R2,A
130: 0151 12 02 3C LCALL WRTD
131: 0154 E5 33 MOV A,DAY
132: 0156 54 0F ANL A,#0FH
133: 0158 24 30 ADD A,#30H
134: 015A FA MOV R2,A
135: 015B 12 02 3C LCALL WRTD
136: 015E 22 RET
137: ;*****************************************************************
138: 015F C2 95 SETDS1302: CLR T_RST ;设置DS1302初始时间,并启动计时
139: 0161 00 nop
140: 0162 C2 96 CLR T_CLK
141: 0164 00 nop
142: 0165 D2 95 SETB T_RST
143: 0167 00 nop
144: 0168 75 F0 8E MOV B,#8EH ;写控制命令字
145: 016B 12 01 DE LCALL INPUTBYTE
146: 016E 75 F0 00 MOV B,#00H ;写保护关闭
147: 0171 12 01 DE LCALL INPUTBYTE
148: 0174 D2 96 SETB T_CLK
149: 0176 00 nop
150: 0177 C2 95 CLR T_RST
151: 0179 78 30 MOV R0,#SECOND ;内存中的时间首地址
152: 017B 79 80 MOV R1,#80H ;DS1302中的时间首地址
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 4
Line I Addr Code Source
153: 017D 7F 07 MOV R7,#7 ;字节数
154: 017F C2 95 SETLOOP:CLR T_RST
155: 0181 00 nop
156: 0182 C2 96 CLR T_CLK
157: 0184 00 nop
158: 0185 D2 95 SETB T_RST
159: 0187 00 nop
160: 0188 89 F0 MOV B,R1 ;写命令字
161: 018A 12 01 DE LCALL INPUTBYTE
162: 018D E6 MOV A,@R0 ;设置时间
163: 018E F5 F0 MOV B,A
164: 0190 12 01 DE LCALL INPUTBYTE
165: 0193 08 INC R0
166: 0194 09 INC R1
167: 0195 09 INC R1
168: 0196 D2 96 SETB T_CLK
169: 0198 00 nop
170: 0199 C2 95 CLR T_RST
171: 019B 00 nop
172: 019C DF E1 DJNZ R7,SETLOOP
173: 019E C2 95 CLR T_RST
174: 01A0 00 nop
175: 01A1 C2 96 CLR T_CLK
176: 01A3 00 nop
177: 01A4 D2 95 SETB T_RST
178: 01A6 00 nop
179: 01A7 75 F0 8E MOV B,#8EH
180: 01AA 12 01 DE LCALL INPUTBYTE
181: 01AD 75 F0 80 MOV B,#80H ;开写保护
182: 01B0 12 01 DE LCALL INPUTBYTE
183: 01B3 D2 96 SETB T_CLK
184: 01B5 00 nop
185: 01B6 C2 95 CLR T_RST
186: 01B8 00 nop
187: 01B9 22 RET
188: ;*****************************************************************
189: 01BA GET1302: ;从DS1302读取时间
190: 01BA 78 30 MOV R0,#SECOND
191: 01BC 79 81 MOV R1,#81H ;DS1302中读时间的首地址
192: 01BE 7F 07 MOV R7,#7
193: 01C0 C2 95 GETLOOP:CLR T_RST
194: 01C2 00 nop
195: 01C3 C2 96 CLR T_CLK
196: 01C5 00 nop
197: 01C6 D2 95 SETB T_RST
198: 01C8 00 nop
199: 01C9 89 F0 MOV B,R1
200: 01CB 12 01 DE LCALL INPUTBYTE ;写命令字
201: 01CE 12 01 EF LCALL OUTPUTBYTE ;读时间
202: 01D1 F6 MOV @R0,A ;将从DS1302中读取的时间从内存中保存
203: 01D2 08 INC R0 ;修改地址指针
204: 01D3 09 INC R1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -