📄 timer.lst
字号:
8051 Assembler Version 1.00 04/15/107 21:49:41 Page 1
G:\sheji2\1\timer.asm
1 0000
2 0000 ;the definition of the port
3 0000 SCLK BIT P1.0 ;DS1302的SCLK串行时钟与51的P1.0连接
4 0000 IO BIT P1.1 ;IO数据输入输出与P1.1连接
5 0000 RST BIT P1.2 ;RST复位与P1.2连接
6 0000 RS BIT P2.0 ;the link of lcd&&mcu
7 0000 RW BIT P2.1
8 0000 E BIT P2.2
9 0000 ; the definition of RAM in 51
10 0000 BITCNT EQU 30H ;数据位计数单元
11 0000 BYTECNT EQU 31H ;数据字节计数单元
12 0000 COMMAND EQU 32H ;命令字节单元
13 0000 RECDATA EQU 40H ;接受数据缓冲区
14 0000 SENDATA EQU 50H ;发送数据缓冲区
15 0000 DATE1 EQU 90H ;显示缓冲区,存储要显示的十位数
16 0000 DATE2 EQU 91H ;显示缓冲区,存储要显示的个位数
17 0000 DATE EQU 92H ;存放写入LCD的数据
18 0000 DATE_N EQU 93H ;存放写入LCD的数据的个数
19 0000 DATE3 EQU 94H ;暂时存放LCD的命令字节
20 0000 ;the main program of the design about time and stopwach
21 0000 ORG 0000H
22 0000 0130 AJMP LCDMAIN
23 000B ORG 000BH
24 000B 0159 AJMP IT0P ;转中断服务程序
25 0030 ORG 0030H
26 0030 5165 LCDMAIN: ACALL LCDINT ;initialization of the lcd016l
27 0032 51C7 LOOP: ACALL Read_Sec ;调用读出秒程序
28 0034 75948A MOV DATE3,#8AH ;the 11th word of the first line in the lcd
29 0037 513F ACALL Display_Time ;use of the program for displaying time
30 0039 512C ACALL Display_Spot ;display":"
31 003B 51D0 ACALL Read_Min ;调用读出分程序
32 003D 759487 MOV DATE3,#87H ;the 8th word of the first line in the lcd
33 0040 513F ACALL Display_Time ;jump to the program for displaying time
34 0042 51D9 ACALL Read_Hour ;调用读出小时程序
35 0044 759484 MOV DATE3,#84H ;the 5th word of the first line in the lcd
36 0047 513F ACALL Display_Time
37 0049 30B005 JNB P3.0,YU ;当按下KEY1(P3.0=0)
38 004C 30B206 JNB P3.2,WEI ;当按下KEY3
39 004F
40 004F 0132 AJMP LOOP
41 0051 314C YU: ACALL Adjust_Time ;调时程序
42 0053 0132 AJMP LOOP
43 0055 3108 WEI: ACALL Stopwatch ;秒表
44 0057 0132 AJMP LOOP
45 0059
46 0059 758AF0 IT0P: MOV TL0,#0F0H ;中断服务程序
47 005C 758CD8 MOV TH0,#0D8H
48 005F D2B1 SETB P3.1
49 0061 30B113 JNB P3.1,STOP ;push the button key2
50 0064 B8630D CJNE R0,#99,NO_99
51 0067 7800 MOV R0,#0
52 0069 BA3B05 CJNE R2,#59,NO_59
53 006C 7A00 MOV R2,#0
54 006E 0C INC R4
55 006F 0181 AJMP SHOW
56 0071 0A NO_59: INC R2
57 0072 0181 AJMP SHOW
8051 Assembler Version 1.00 04/15/107 21:49:41 Page 2
G:\sheji2\1\timer.asm
58 0074 08 NO_99: INC R0
59 0075 0181 AJMP SHOW
60 0077 00 STOP: NOP
61 0078 5196 KEY_2: ACALL DELAY
62 007A D2B1 SETB P3.1
63 007C 30B1F9 JNB P3.1,KEY_2
64 007F C28C CLR TR0
65 0081 00 SHOW: NOP
66 0082 E8 MOV A,R0
67 0083 75948A MOV DATE3,#8AH
68 0086 1197 ACALL Display_SW
69 0088 11B8 ACALL Display_Spot_SW
70 008A 759487 MOV DATE3,#87H
71 008D EA MOV A,R2
72 008E 1197 ACALL Display_SW
73 0090 EC MOV A,R4
74 0091 759484 MOV DATE3,#84H
75 0094 1197 ACALL Display_SW
76 0096 32 RETI
77 0097
78 0097 75F00A Display_SW: MOV B,#10
79 009A 84 DIV AB
80 009B F590 MOV DATE1,A
81 009D 85F091 MOV DATE2,B
82 00A0 439130 ORL DATE2,#30H
83 00A3 439030 ORL DATE1,#30H
84 00A6 AB94 MOV R3,DATE3
85 00A8 11CB ACALL WRLCD_SW
86 00AA 859092 MOV DATE,DATE1
87 00AD 11DF ACALL WRDATE_SW
88 00AF 0B INC R3
89 00B0 11CB ACALL WRLCD_SW
90 00B2 859192 MOV DATE,DATE2
91 00B5 11DF ACALL WRDATE_SW
92 00B7 22 RET
93 00B8
94 00B8 7B89 Display_Spot_SW: MOV R3,#89H
95 00BA 11CB ACALL WRLCD_SW
96 00BC 75923A MOV DATE,#3AH
97 00BF 11DF ACALL WRDATE_SW
98 00C1 7B86 MOV R3,#86H
99 00C3 11CB ACALL WRLCD_SW
100 00C5 75923A MOV DATE,#3AH
101 00C8 11DF ACALL WRDATE_SW
102 00CA 22 RET
103 00CB
104 00CB 11EF WRLCD_SW: ACALL BUSY_SW
105 00CD C0E0 PUSH ACC
106 00CF EB MOV A,R3
107 00D0 C2A0 CLR RS
108 00D2 C2A1 CLR RW
109 00D4 F580 MOV P0,A
110 00D6 C2A2 CLR E
111 00D8 11FF ACALL DELAY_SW
112 00DA D2A2 SETB E
113 00DC D0E0 POP ACC
114 00DE 22 RET
8051 Assembler Version 1.00 04/15/107 21:49:41 Page 3
G:\sheji2\1\timer.asm
115 00DF
116 00DF 11EF WRDATE_SW: ACALL BUSY_SW
117 00E1 D2A0 SETB RS
118 00E3 C2A1 CLR RW
119 00E5 859280 MOV P0,DATE
120 00E8 C2A2 CLR E
121 00EA 11FF ACALL DELAY_SW
122 00EC D2A2 SETB E
123 00EE 22 RET
124 00EF
125 00EF C2A0 BUSY_SW: CLR RS
126 00F1 D2A1 SETB RW
127 00F3 E580 MOV A,P0
128 00F5 C2A2 CLR E
129 00F7 11FF ACALL DELAY_SW
130 00F9 D2A2 SETB E
131 00FB 20E7F1 JB ACC.7,BUSY_SW ;F=1忙碌
132 00FE 22 RET
133 00FF
134 00FF 7E02 DELAY_SW: MOV R6,#2
135 0101 7D19 D2: MOV R5,#25
136 0103 DDFE DJNZ R5,$
137 0105 DEFA DJNZ R6,D2
138 0107 22 RET
139 0108
140 0108 ;利用定时器T0的方式1,首先对其及中断系统进行初始化
141 0108 00 Stopwatch: NOP
142 0109 5196 KEY3: ACALL DELAY
143 010B D2B2 SETB P3.2
144 010D 30B2F9 JNB P3.2,KEY3
145 0110 759030 MOV DATE1,#30H
146 0113 759130 MOV DATE2,#30H
147 0116 75948A MOV DATE3,#8AH
148 0119 5153 ACALL Display_Time1
149 011B 512C ACALL Display_Spot
150 011D 759487 MOV DATE3,#87H
151 0120 5153 ACALL Display_Time1
152 0122 759484 MOV DATE3,#84H
153 0125 5153 ACALL Display_Time1 ;显示00:00:00
154 0127
155 0127 7800 MOV R0,#0
156 0129 7A00 MOV R2,#0
157 012B 7C00 MOV R4,#0
158 012D 758901 MOV TMOD,#01H ;设置定时器0的方式1
159 0130 85F08A MOV TL0,0F0H
160 0133 85D88C MOV TH0,0D8H ;T0置初值,0.01s计数一次
161 0136 D28C SETB TR0 ;允许T0计数
162 0138 D2AF SETB EA ;CPU开放中断
163 013A D2A9 SETB ET0 ;允许T0中断
164 013C D2B2 HERE: SETB P3.2 ;等待
165 013E 20B2FB JB P3.2,HERE ;按下KEY3则跳出
166 0141 C28C CLR TR0 ;stop counting
167 0143 5196 KEY33: ACALL DELAY
168 0145 D2B2 SETB P3.2
169 0147 30B2F9 JNB P3.2,KEY33
170 014A 00 NOP
171 014B 22 RET
8051 Assembler Version 1.00 04/15/107 21:49:41 Page 4
G:\sheji2\1\timer.asm
172 014C
173 014C ;调整时间程序
174 014C
175 014C 51BB Adjust_Time: ACALL Clock_Unable
176 014E 5196 KEY1_Fi: ACALL DELAY ;延时,防止抖动
177 0150 D2B0 SETB P3.0
178 0152 30B0F9 JNB P3.0, KEY1_Fi ;键是否释放
179 0155 759030 WAIT1: MOV DATE1,#30H
180 0158 759130 MOV DATE2,#30H
181 015B 75948A MOV DATE3,#8AH
182 015E 5153 ACALL Display_Time1
183 0160 5196 ACALL DELAY
184 0162 20B0F0 JB P3.0,WAIT1 ;P3.0=0则执行以下程序
185 0165 5196 KEY1_S: ACALL DELAY
186 0167 D2B0 SETB P3.0
187 0169 30B0F9 JNB P3.0,KEY1_S ;键是否释放
188 016C 317D ACALL Adjust_Min
189 016E 51F8 ACALL Send_Enable
190 0170 716B ACALL Deal_M
191 0172 51E2 ACALL Send_Min
192 0174 31CF ACALL Adjust_Hour
193 0176 7178 ACALL Deal_H
194 0178 51ED ACALL Send_Hour
195 017A 51AF ACALL Clock_Enable
196 017C 22 RET
197 017D
198 017D Adjust_Min:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -