📄 ds1302.lst
字号:
25D 940C 03A7 JMP pop_xgsetF00C
_WriteChar:
t --> R12
i --> R10
pBuffer --> R20
num --> Y,+8
col --> R10
row --> R22
25F 940E 03AE CALL push_xgsetF03C
261 2EA2 MOV R10,R18
262 2F60 MOV R22,R16
263 854A LDD R20,Y+10
264 855B LDD R21,Y+11
(0207) }
(0208) //================================================================
(0209) // 描述:在任意位置写任意多个字符
(0210) // 入口:’row‘要写的字符所在的行,只能为1或2;
(0211) // ‘col’要写的字符所在的列,只能为0---15
(0212) // ‘num’要写字符的个数
(0213) // ‘pbuffer’要写字符的首地址
(0214) //==================================================================
(0215) void WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
(0216) {
(0217) uchar i,t;
(0218) if (row == 1) row = 0x80 + col;
265 3061 CPI R22,1
266 F419 BNE 0x026A
267 2D6A MOV R22,R10
268 5860 SUBI R22,0x80
269 C002 RJMP 0x026C
(0219) else row = 0xC0 + col;
26A 2D6A MOV R22,R10
26B 5460 SUBI R22,0x40
(0220) writecom(row);
26C 2F06 MOV R16,R22
26D DECD RCALL _writecom
(0221) //if (num<=0 | num>9) num =0x30;
(0222) //else num = 0x30 + num;
(0223)
(0224) PORTA|=(1<<RS);
26E 9ADD SBI 0x1B,5
(0225) s_ms(500);
26F EF04 LDI R16,0xF4
270 E011 LDI R17,1
271 DE95 RCALL _s_ms
(0226) PORTA&=~(1<<RW);
272 98DE CBI 0x1B,6
(0227) s_ms(500);
273 EF04 LDI R16,0xF4
274 E011 LDI R17,1
275 DE91 RCALL _s_ms
(0228) for(i=num;i!=0;i--)
276 84A8 LDD R10,Y+8
277 84B9 LDD R11,Y+9
278 C014 RJMP 0x028D
(0229) {
(0230) t = *pBuffer;
279 01FA MOVW R30,R20
27A 80C0 LDD R12,Z+0
(0231) s_ms(500);
27B EF04 LDI R16,0xF4
27C E011 LDI R17,1
27D DE89 RCALL _s_ms
(0232) PORTD = t;
27E BAC2 OUT 0x12,R12
(0233) s_ms(500);
27F EF04 LDI R16,0xF4
280 E011 LDI R17,1
281 DE85 RCALL _s_ms
(0234) PORTA|=(1<<EN);
282 9ADF SBI 0x1B,7
(0235) s_ms(500);
283 EF04 LDI R16,0xF4
284 E011 LDI R17,1
285 DE81 RCALL _s_ms
(0236) PORTA&=~(1<<EN);
286 98DF CBI 0x1B,7
(0237) s_ms(500);
287 EF04 LDI R16,0xF4
288 E011 LDI R17,1
289 DE7D RCALL _s_ms
(0238) pBuffer++;
28A 5F4F SUBI R20,0xFF
28B 4F5F SBCI R21,0xFF
28C 94AA DEC R10
28D 20AA TST R10
28E F751 BNE 0x0279
28F 940C 03B7 JMP pop_xgsetF03C
_s_1ms:
aa --> R20
ms --> R16
291 934A ST R20,-Y
292 935A ST R21,-Y
FILE: E:\16实验程序\ds1302\ds1302_main.c
(0001) //时钟电路DS1302试验程序
(0002) //使用1602液晶显示
(0003)
(0004) #include "iom16v.h"
(0005) #include "ds1302.h"
(0006) #include "1602.h"
(0007)
(0008) uchar aa[]={'-'};
(0009) //时钟数据
(0010) unsigned char time_data[8] = {0x21,0x11,0x11,0x12,0x18,0x52,0x00,0x02};
(0011)
(0012) //在16M延时1ms的延时函数
(0013) void s_1ms(unsigned int ms)
(0014) {
(0015) unsigned int aa;
(0016) for(;ms>=1;ms--)
293 C00C RJMP 0x02A0
(0017) {
(0018) for(aa=0;aa<=2000;aa++)
294 2744 CLR R20
295 2755 CLR R21
296 C002 RJMP 0x0299
297 5F4F SUBI R20,0xFF
298 4F5F SBCI R21,0xFF
299 ED80 LDI R24,0xD0
29A E097 LDI R25,7
29B 1784 CP R24,R20
29C 0795 CPC R25,R21
29D F7C8 BCC 0x0297
29E 5001 SUBI R16,1
29F 4010 SBCI R17,0
2A0 3001 CPI R16,1
2A1 E0E0 LDI R30,0
2A2 071E CPC R17,R30
2A3 F780 BCC 0x0294
2A4 9159 LD R21,Y+
2A5 9149 LD R20,Y+
2A6 9508 RET
_main:
temp --> R20
2A7 9724 SBIW R28,4
(0019) {;}
(0020) }
(0021) }
(0022)
(0023) //主函数
(0024) void main()
(0025) {
(0026) unsigned char temp;
(0027) //端口初始化
(0028) PORTA = 0xFF;
2A8 EF8F LDI R24,0xFF
2A9 BB8B OUT 0x1B,R24
(0029) DDRA = 0xFF;
2AA BB8A OUT 0x1A,R24
(0030) PORTB = 0xF0;
2AB EF80 LDI R24,0xF0
2AC BB88 OUT 0x18,R24
(0031) DDRB = 0xFF;
2AD EF8F LDI R24,0xFF
2AE BB87 OUT 0x17,R24
(0032) PORTC = 0x7F;
2AF E78F LDI R24,0x7F
2B0 BB85 OUT 0x15,R24
(0033) DDRC = 0x80;
2B1 E880 LDI R24,0x80
2B2 BB84 OUT 0x14,R24
(0034) PORTD = 0x00;
2B3 2422 CLR R2
2B4 BA22 OUT 0x12,R2
(0035) DDRD = 0xFF;
2B5 EF8F LDI R24,0xFF
2B6 BB81 OUT 0x11,R24
(0036)
(0037) s_1ms(20);
2B7 E104 LDI R16,0x14
2B8 E010 LDI R17,0
2B9 DFD7 RCALL _s_1ms
(0038) //1602液晶初始化
(0039) LcdInit();
2BA DE9C RCALL _LcdInit
(0040) //时钟芯片DS1302初始化
(0041) ds1302_init();
2BB DE46 RCALL _ds1302_init
(0042) s_1ms(10);
2BC E00A LDI R16,0xA
2BD E010 LDI R17,0
2BE DFD2 RCALL _s_1ms
(0043) //写入初始的时间
(0044) ds1302_write_time(time_data);
2BF E601 LDI R16,0x61
2C0 E010 LDI R17,0
2C1 DDD7 RCALL _ds1302_write_time
2C2 C0DA RJMP 0x039D
(0045)
(0046) while (1) {
(0047) s_1ms(100);
2C3 E604 LDI R16,0x64
2C4 E010 LDI R17,0
2C5 DFCB RCALL _s_1ms
(0048) //读出时钟数据
(0049) ds1302_read_time(time_data);
2C6 E601 LDI R16,0x61
2C7 E010 LDI R17,0
2C8 DE03 RCALL _ds1302_read_time
(0050) //显示年份
(0051) WriteNum(1,3,2); //2
2C9 E082 LDI R24,2
2CA E090 LDI R25,0
2CB 8399 STD Y+1,R25
2CC 8388 STD Y+0,R24
2CD E023 LDI R18,3
2CE E030 LDI R19,0
2CF E001 LDI R16,1
2D0 E010 LDI R17,0
2D1 DF45 RCALL _WriteNum
(0052) WriteNum(1,4,0); //0
2D2 2422 CLR R2
2D3 2433 CLR R3
2D4 8239 STD Y+1,R3
2D5 8228 STD Y+0,R2
2D6 E024 LDI R18,4
2D7 E030 LDI R19,0
2D8 E001 LDI R16,1
2D9 E010 LDI R17,0
2DA DF3C RCALL _WriteNum
(0053) temp = (time_data[1] >> 4) ;
2DB 9140 0062 LDS R20,time_data+1
2DD 9542 SWAP R20
2DE 704F ANDI R20,0xF
(0054) WriteNum(1,5,temp);
2DF 2E24 MOV R2,R20
2E0 2433 CLR R3
2E1 8239 STD Y+1,R3
2E2 8228 STD Y+0,R2
2E3 E025 LDI R18,5
2E4 E030 LDI R19,0
2E5 E001 LDI R16,1
2E6 E010 LDI R17,0
2E7 DF2F RCALL _WriteNum
(0055) temp = (time_data[1] & 0x0F);
2E8 9140 0062 LDS R20,time_data+1
2EA 704F ANDI R20,0xF
(0056) WriteNum(1,6,temp);
2EB 2E24 MOV R2,R20
2EC 2433 CLR R3
2ED 8239 STD Y+1,R3
2EE 8228 STD Y+0,R2
2EF E026 LDI R18,6
2F0 E030 LDI R19,0
2F1 E001 LDI R16,1
2F2 E010 LDI R17,0
2F3 DF23 RCALL _WriteNum
(0057) WriteChar(1,7,2,aa);
2F4 E680 LDI R24,0x60
2F5 E090 LDI R25,0
2F6 839B STD Y+3,R25
2F7 838A STD Y+2,R24
2F8 E082 LDI R24,2
2F9 E090 LDI R25,0
2FA 8399 STD Y+1,R25
2FB 8388 STD Y+0,R24
2FC E027 LDI R18,7
2FD E001 LDI R16,1
2FE DF60 RCALL _WriteChar
(0058)
(0059) temp = (time_data[2] >> 4);
2FF 9140 0063 LDS R20,time_data+2
301 9542 SWAP R20
302 704F ANDI R20,0xF
(0060) WriteNum(1,8,temp);
303 2E24 MOV R2,R20
304 2433 CLR R3
305 8239 STD Y+1,R3
306 8228 STD Y+0,R2
307 E028 LDI R18,0x8
308 E030 LDI R19,0
309 E001 LDI R16,1
30A E010 LDI R17,0
30B DF0B RCALL _WriteNum
(0061) temp = (time_data[2] & 0x0F);
30C 9140 0063 LDS R20,time_data+2
30E 704F ANDI R20,0xF
(0062) WriteNum(1,9,temp);
30F 2E24 MOV R2,R20
310 2433 CLR R3
311 8239 STD Y+1,R3
312 8228 STD Y+0,R2
313 E029 LDI R18,0x9
314 E030 LDI R19,0
315 E001 LDI R16,1
316 E010 LDI R17,0
317 DEFF RCALL _WriteNum
(0063) WriteChar(1,10,2,aa);
318 E680 LDI R24,0x60
319 E090 LDI R25,0
31A 839B STD Y+3,R25
31B 838A STD Y+2,R24
31C E082 LDI R24,2
31D E090 LDI R25,0
31E 8399 STD Y+1,R25
31F 8388 STD Y+0,R24
320 E02A LDI R18,0xA
321 E001 LDI R16,1
322 DF3C RCALL _WriteChar
(0064)
(0065) temp = (time_data[3] >> 4);
323 9140 0064 LDS R20,time_data+3
325 9542 SWAP R20
326 704F ANDI R20,0xF
(0066) WriteNum(1,11,temp);
327 2E24 MOV R2,R20
328 2433 CLR R3
329 8239 STD Y+1,R3
32A 8228 STD Y+0,R2
32B E02B LDI R18,0xB
32C E030 LDI R19,0
32D E001 LDI R16,1
32E E010 LDI R17,0
32F DEE7 RCALL _WriteNum
(0067) temp = (time_data[3] & 0x0F);
330 9140 0064 LDS R20,time_data+3
332 704F ANDI R20,0xF
(0068) WriteNum(1,12,temp);
333 2E24 MOV R2,R20
334 2433 CLR R3
335 8239 STD Y+1,R3
336 8228 STD Y+0,R2
337 E02C LDI R18,0xC
338 E030 LDI R19,0
339 E001 LDI R16,1
33A E010 LDI R17,0
33B DEDB RCALL _WriteNum
(0069)
(0070) temp = (time_data[4] >> 4);
33C 9140 0065 LDS R20,0x0065
33E 9542 SWAP R20
33F 704F ANDI R20,0xF
(0071) WriteNum(2,4,temp);
340 2E24 MOV R2,R20
341 2433 CLR R3
342 8239 STD Y+1,R3
343 8228 STD Y+0,R2
344 E024 LDI R18,4
345 E030 LDI R19,0
346 E002 LDI R16,2
347 E010 LDI R17,0
348 DECE RCALL _WriteNum
(0072) temp = (time_data[4] & 0x0F);
349 9140 0065 LDS R20,0x0065
34B 704F ANDI R20,0xF
(0073) WriteNum(2,5,temp);
34C 2E24 MOV R2,R20
34D 2433 CLR R3
34E 8239 STD Y+1,R3
34F 8228 STD Y+0,R2
350 E025 LDI R18,5
351 E030 LDI R19,0
352 E002 LDI R16,2
353 E010 LDI R17,0
354 DEC2 RCALL _WriteNum
(0074) WriteChar(2,6,2,aa);
355 E680 LDI R24,0x60
356 E090 LDI R25,0
357 839B STD Y+3,R25
358 838A STD Y+2,R24
359 E082 LDI R24,2
35A E090 LDI R25,0
35B 8399 STD Y+1,R25
35C 8388 STD Y+0,R24
35D E026 LDI R18,6
35E E002 LDI R16,2
35F DEFF RCALL _WriteChar
(0075)
(0076) temp = (time_data[5] >> 4);
360 9140 0066 LDS R20,0x0066
362 9542 SWAP R20
363 704F ANDI R20,0xF
(0077) WriteNum(2,7,temp);
364 2E24 MOV R2,R20
365 2433 CLR R3
366 8239 STD Y+1,R3
367 8228 STD Y+0,R2
368 E027 LDI R18,7
369 E030 LDI R19,0
36A E002 LDI R16,2
36B E010 LDI R17,0
36C DEAA RCALL _WriteNum
(0078) temp = (time_data[5] & 0x0F);
36D 9140 0066 LDS R20,0x0066
36F 704F ANDI R20,0xF
(0079) WriteNum(2,8,temp);
370 2E24 MOV R2,R20
371 2433 CLR R3
372 8239 STD Y+1,R3
373 8228 STD Y+0,R2
374 E028 LDI R18,0x8
375 E030 LDI R19,0
376 E002 LDI R16,2
377 E010 LDI R17,0
378 DE9E RCALL _WriteNum
(0080) WriteChar(2,9,2,aa);
379 E680 LDI R24,0x60
37A E090 LDI R25,0
37B 839B STD Y+3,R25
37C 838A STD Y+2,R24
37D E082 LDI R24,2
37E E090 LDI R25,0
37F 8399 STD Y+1,R25
380 8388 STD Y+0,R24
381 E029 LDI R18,0x9
382 E002 LDI R16,2
383 DEDB RCALL _WriteChar
(0081)
(0082) temp = (time_data[6] >> 4);
384 9140 0067 LDS R20,0x0067
386 9542 SWAP R20
387 704F ANDI R20,0xF
(0083) WriteNum(2,10,temp);
388 2E24 MOV R2,R20
389 2433 CLR R3
38A 8239 STD Y+1,R3
38B 8228 STD Y+0,R2
38C E02A LDI R18,0xA
38D E030 LDI R19,0
38E E002 LDI R16,2
38F E010 LDI R17,0
390 DE86 RCALL _WriteNum
(0084) temp = (time_data[6] & 0x0F);
391 9140 0067 LDS R20,0x0067
393 704F ANDI R20,0xF
(0085) WriteNum(2,11,temp);
FILE: <library>
394 2E24 MOV R2,R20
395 2433 CLR R3
396 8239 STD Y+1,R3
397 8228 STD Y+0,R2
398 E02B LDI R18,0xB
399 E030 LDI R19,0
39A E002 LDI R16,2
39B E010 LDI R17,0
39C DE7A RCALL _WriteNum
39D CF25 RJMP 0x02C3
39E 9624 ADIW R28,4
39F 9508 RET
push_xgsetF00C:
3A0 937A ST R23,-Y
3A1 936A ST R22,-Y
3A2 935A ST R21,-Y
3A3 934A ST R20,-Y
3A4 92BA ST R11,-Y
3A5 92AA ST R10,-Y
3A6 9508 RET
pop_xgsetF00C:
3A7 90A9 LD R10,Y+
3A8 90B9 LD R11,Y+
3A9 9149 LD R20,Y+
3AA 9159 LD R21,Y+
3AB 9169 LD R22,Y+
3AC 9179 LD R23,Y+
3AD 9508 RET
push_xgsetF03C:
3AE 937A ST R23,-Y
3AF 936A ST R22,-Y
3B0 935A ST R21,-Y
3B1 934A ST R20,-Y
3B2 92DA ST R13,-Y
3B3 92CA ST R12,-Y
3B4 92BA ST R11,-Y
3B5 92AA ST R10,-Y
3B6 9508 RET
pop_xgsetF03C:
3B7 90A9 LD R10,Y+
3B8 90B9 LD R11,Y+
3B9 90C9 LD R12,Y+
3BA 90D9 LD R13,Y+
3BB 9149 LD R20,Y+
3BC 9159 LD R21,Y+
3BD 9169 LD R22,Y+
3BE 9179 LD R23,Y+
3BF 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -