📄 ds1302.lst
字号:
328 9040 007F LDS R4,0x007F
32A 2455 CLR R5
32B 1640 CP R4,R16
32C 0651 CPC R5,R17
32D F159 BEQ 0x0359
(0133) {
(0134) jisuan(day);
32E DD6D RCALL _jisuan
(0135) Char_Set_XY_BYTE(7,2,charindex[gewei],2);
32F E082 LDI R24,2
330 E090 LDI R25,0
331 839B STD Y+3,R25
332 838A STD Y+2,R24
333 E68E LDI R24,0x6E
334 E090 LDI R25,0
335 91E0 00B6 LDS R30,gewei
337 91F0 00B7 LDS R31,gewei+1
339 0FE8 ADD R30,R24
33A 1FF9 ADC R31,R25
33B 8020 LDD R2,Z+0
33C 2433 CLR R3
33D 8239 STD Y+1,R3
33E 8228 STD Y+0,R2
33F E022 LDI R18,2
340 E030 LDI R19,0
341 E007 LDI R16,7
342 E010 LDI R17,0
343 D163 RCALL _Char_Set_XY_BYTE
(0136) Char_Set_XY_BYTE(7,2,charindex[shiwei],1);
344 E081 LDI R24,1
345 E090 LDI R25,0
346 839B STD Y+3,R25
347 838A STD Y+2,R24
348 E68E LDI R24,0x6E
349 E090 LDI R25,0
34A 91E0 00B4 LDS R30,shiwei
34C 91F0 00B5 LDS R31,shiwei+1
34E 0FE8 ADD R30,R24
34F 1FF9 ADC R31,R25
350 8020 LDD R2,Z+0
351 2433 CLR R3
352 8239 STD Y+1,R3
353 8228 STD Y+0,R2
354 E022 LDI R18,2
355 E030 LDI R19,0
356 E007 LDI R16,7
357 E010 LDI R17,0
358 D14E RCALL _Char_Set_XY_BYTE
(0137) }
(0138) mid[6]=day;
359 9020 00A8 LDS R2,day
35B 9030 00A9 LDS R3,day+1
35D 9220 007F STS 0x007F,R2
35F CE23 RJMP 0x0183
360 9624 ADIW R28,4
361 9508 RET
FILE: E:\AVR实验\ds1302+12864时钟\mudle1302.c
(0001) #include "ds1302.h"
(0002)
(0003)
(0004) void Delayus(uchar i)
(0005) {
(0006) while(--i);
_Delayus:
i --> R16
362 2F80 MOV R24,R16
363 5081 SUBI R24,1
364 2F08 MOV R16,R24
365 2388 TST R24
366 F7D9 BNE 0x0362
367 9508 RET
(0007) }
(0008)
(0009)
(0010)
(0011)
(0012) uchar ReadSec(void)
(0013) {
(0014) return ReadRTC_Byte(0x81);
_ReadSec:
368 E801 LDI R16,0x81
369 E010 LDI R17,0
36A D058 RCALL _ReadRTC_Byte
36B 9508 RET
(0015) }
(0016) uchar ReadMin(void)
(0017) {
(0018) return ReadRTC_Byte(0x83);
_ReadMin:
36C E803 LDI R16,0x83
36D E010 LDI R17,0
36E D054 RCALL _ReadRTC_Byte
36F 9508 RET
(0019) }
(0020) uchar ReadHour(void)
(0021) {
(0022) return ReadRTC_Byte(0x85);
_ReadHour:
370 E805 LDI R16,0x85
371 E010 LDI R17,0
372 D050 RCALL _ReadRTC_Byte
373 9508 RET
(0023) }
(0024) uchar ReadDate(void)
(0025) {
(0026) return ReadRTC_Byte(0x87);
_ReadDate:
374 E807 LDI R16,0x87
375 E010 LDI R17,0
376 D04C RCALL _ReadRTC_Byte
377 9508 RET
(0027) }
(0028)
(0029) uchar ReadYear(void)
(0030) {
(0031) return ReadRTC_Byte(0x8D);
_ReadYear:
378 E80D LDI R16,0x8D
379 E010 LDI R17,0
37A D048 RCALL _ReadRTC_Byte
37B 9508 RET
(0032) }
(0033)
(0034) uchar ReadMonth(void)
(0035) {
(0036) return ReadRTC_Byte(0x89);
_ReadMonth:
37C E809 LDI R16,0x89
37D E010 LDI R17,0
37E D044 RCALL _ReadRTC_Byte
37F 9508 RET
(0037) }
(0038) uchar ReadDay(void)
(0039) {
(0040) return ReadRTC_Byte(0x8B);
_ReadDay:
380 E80B LDI R16,0x8B
381 E010 LDI R17,0
382 D040 RCALL _ReadRTC_Byte
383 9508 RET
_WriteSec:
number --> R10
384 92AA ST R10,-Y
385 2EA0 MOV R10,R16
(0041) }
(0042)
(0043)
(0044)
(0045) void WriteSec(uchar number)
(0046) {
(0047) WriteRTC_Byte(0x80,number);
386 2D2A MOV R18,R10
387 2733 CLR R19
388 E800 LDI R16,0x80
389 E010 LDI R17,0
38A D047 RCALL _WriteRTC_Byte
38B 90A9 LD R10,Y+
38C 9508 RET
_WriteMin:
number --> R10
38D 92AA ST R10,-Y
38E 2EA0 MOV R10,R16
(0048) }
(0049) void WriteMin(uchar number)
(0050) {
(0051) WriteRTC_Byte(0x82,number);
38F 2D2A MOV R18,R10
390 2733 CLR R19
391 E802 LDI R16,0x82
392 E010 LDI R17,0
393 D03E RCALL _WriteRTC_Byte
394 90A9 LD R10,Y+
395 9508 RET
_WriteHour:
number --> R10
396 92AA ST R10,-Y
397 2EA0 MOV R10,R16
(0052) }
(0053) void WriteHour(uchar number) //向DS1302中写入分字节
(0054) {
(0055) WriteRTC_Byte(0x84,number);
398 2D2A MOV R18,R10
399 2733 CLR R19
39A E804 LDI R16,0x84
39B E010 LDI R17,0
39C D035 RCALL _WriteRTC_Byte
39D 90A9 LD R10,Y+
39E 9508 RET
_WriteYear:
number --> R10
39F 92AA ST R10,-Y
3A0 2EA0 MOV R10,R16
(0056) }
(0057) void WriteYear(uchar number) //向DS1302中写入分字节
(0058) {
(0059) WriteRTC_Byte(0x8C,number);
3A1 2D2A MOV R18,R10
3A2 2733 CLR R19
3A3 E80C LDI R16,0x8C
3A4 E010 LDI R17,0
3A5 D02C RCALL _WriteRTC_Byte
3A6 90A9 LD R10,Y+
3A7 9508 RET
_WriteMonth:
number --> R10
3A8 92AA ST R10,-Y
3A9 2EA0 MOV R10,R16
(0060) }
(0061) void WriteMonth(uchar number) //向DS1302中写入分字节
(0062) {
(0063) WriteRTC_Byte(0x88,number);
3AA 2D2A MOV R18,R10
3AB 2733 CLR R19
3AC E808 LDI R16,0x88
3AD E010 LDI R17,0
3AE D023 RCALL _WriteRTC_Byte
3AF 90A9 LD R10,Y+
3B0 9508 RET
_WriteDay:
number --> R10
3B1 92AA ST R10,-Y
3B2 2EA0 MOV R10,R16
(0064) }
(0065)
(0066) void WriteDay(uchar number) //向DS1302中写入分字节
(0067) {
(0068) WriteRTC_Byte(0x8A,number);
3B3 2D2A MOV R18,R10
3B4 2733 CLR R19
3B5 E80A LDI R16,0x8A
3B6 E010 LDI R17,0
3B7 D01A RCALL _WriteRTC_Byte
3B8 90A9 LD R10,Y+
3B9 9508 RET
_WriteDate:
number --> R10
3BA 92AA ST R10,-Y
3BB 2EA0 MOV R10,R16
(0069) }
(0070) void WriteDate(uchar number) //向DS1302中写入分字节
(0071) {
(0072) WriteRTC_Byte(0x86,number);
3BC 2D2A MOV R18,R10
3BD 2733 CLR R19
3BE E806 LDI R16,0x86
3BF E010 LDI R17,0
3C0 D011 RCALL _WriteRTC_Byte
3C1 90A9 LD R10,Y+
3C2 9508 RET
_ReadRTC_Byte:
redata --> R10
address --> R10
3C3 92AA ST R10,-Y
3C4 2EA0 MOV R10,R16
(0073) }
(0074)
(0075)
(0076)
(0077)
(0078) uint ReadRTC_Byte(uchar address)
(0079) {
(0080) unsigned char redata;
(0081)
(0082) Clr_ds1302_rst;//ds1302_rst = 0;
3C5 98A9 CBI 0x15,1
(0083) Clr_ds1302_clk;//ds1302_clk = 0;
3C6 98AB CBI 0x15,3
(0084) Set_ds1302_rst;//ds1302_rst = 1;
3C7 9AA9 SBI 0x15,1
(0085) Write_bit(address);
3C8 2D0A MOV R16,R10
3C9 2711 CLR R17
3CA D019 RCALL _Write_bit
(0086) redata=Read_bit();
3CB D02B RCALL _Read_bit
3CC 2EA0 MOV R10,R16
(0087) Clr_ds1302_rst;//ds1302_rst = 0;
3CD 98A9 CBI 0x15,1
(0088) Set_ds1302_clk;//ds1302_clk = 1;
3CE 9AAB SBI 0x15,3
(0089) return redata;
3CF 2711 CLR R17
3D0 90A9 LD R10,Y+
3D1 9508 RET
_WriteRTC_Byte:
number --> R10
address --> R12
3D2 92AA ST R10,-Y
3D3 92CA ST R12,-Y
3D4 2EA2 MOV R10,R18
3D5 2EC0 MOV R12,R16
(0090) }
(0091)
(0092) void WriteRTC_Byte(uchar address,uchar number)
(0093) {
(0094) Clr_ds1302_clk;//ds1302_clk = 0;
3D6 98AB CBI 0x15,3
(0095) Clr_ds1302_rst;// ds1302_rst = 0;
3D7 98A9 CBI 0x15,1
(0096) Set_ds1302_rst;//ds1302_rst = 1;
3D8 9AA9 SBI 0x15,1
(0097) Write_bit(address);
3D9 2D0C MOV R16,R12
3DA 2711 CLR R17
3DB D008 RCALL _Write_bit
(0098) Write_bit(number);
3DC 2D0A MOV R16,R10
3DD 2711 CLR R17
3DE D005 RCALL _Write_bit
(0099) Clr_ds1302_rst;//ds1302_rst = 0;
3DF 98A9 CBI 0x15,1
(0100) Set_ds1302_clk;//ds1302_clk = 1;
3E0 9AAB SBI 0x15,3
3E1 90C9 LD R12,Y+
3E2 90A9 LD R10,Y+
3E3 9508 RET
_Write_bit:
i --> R20
addr --> R16
3E4 934A ST R20,-Y
(0101) }
(0102)
(0103)
(0104)
(0105)
(0106)
(0107) void Write_bit (uchar addr)
(0108) {
(0109) uchar i=0;
(0110) for(i=8;i>0;i--){
3E5 E048 LDI R20,0x8
3E6 C00B RJMP 0x03F2
(0111) if((addr&0x01)==0x01)
3E7 2F80 MOV R24,R16
3E8 7081 ANDI R24,1
3E9 3081 CPI R24,1
3EA F411 BNE 0x03ED
(0112) Set_ds1302_data;//ds1302_dat = 1;
3EB 9AAA SBI 0x15,2
3EC C001 RJMP 0x03EE
(0113) else
(0114) Clr_ds1302_data;//ds1302_dat = 0;
3ED 98AA CBI 0x15,2
(0115) Set_ds1302_clk;//ds1302_clk=1;
3EE 9AAB SBI 0x15,3
(0116) Clr_ds1302_clk;//ds1302_clk=0;
3EF 98AB CBI 0x15,3
(0117) addr>>=1;
3F0 9506 LSR R16
3F1 954A DEC R20
3F2 E080 LDI R24,0
3F3 1784 CP R24,R20
3F4 F390 BCS 0x03E7
3F5 9149 LD R20,Y+
3F6 9508 RET
_Read_bit:
data_r --> R20
i --> R22
3F7 934A ST R20,-Y
3F8 936A ST R22,-Y
(0118) }
(0119) }
(0120)
(0121) uchar Read_bit ()
(0122) {
(0123) uchar i=0;
(0124) uchar data_r=0;
3F9 2744 CLR R20
(0125)
(0126) Set_ds1302_data;
3FA 9AAA SBI 0x15,2
(0127) data_in;
3FB 98A2 CBI 0x14,2
(0128) Delayus(15);
3FC E00F LDI R16,0xF
3FD DF64 RCALL _Delayus
(0129)
(0130) for(i=8;i>0;i--){
3FE E068 LDI R22,0x8
3FF C007 RJMP 0x0407
(0131) data_r>>=1;
400 9546 LSR R20
(0132)
(0133)
(0134) if(data_in_read)
401 9B9A SBIS 0x13,2
402 C001 RJMP 0x0404
(0135) {
(0136) data_r|=0x80;
403 6840 ORI R20,0x80
(0137) }
(0138) Set_ds1302_clk;//ds1302_clk = 1;
404 9AAB SBI 0x15,3
(0139)
(0140) Clr_ds1302_clk;//ds1302_clk = 0;
405 98AB CBI 0x15,3
406 956A DEC R22
407 E080 LDI R24,0
408 1786 CP R24,R22
409 F3B0 BCS 0x0400
(0141)
(0142) }
(0143)
(0144) data_out;
40A 9AA2 SBI 0x14,2
(0145) return data_r;
40B 2F04 MOV R16,R20
40C 9169 LD R22,Y+
40D 9149 LD R20,Y+
40E 9508 RET
FILE: E:\AVR实验\ds1302+12864时钟\jhd12864.c
(0001) #include "jhd12864.h"
(0002)
(0003)
(0004) delayms()
(0005) { unsigned int i=0;
_delayms:
i --> R16
40F 2700 CLR R16
410 2711 CLR R17
411 C002 RJMP 0x0414
(0006) while(i!=1140)
(0007) {
(0008) i++;
412 5F0F SUBI R16,0xFF
413 4F1F SBCI R17,0xFF
414 3704 CPI R16,0x74
415 E0E4 LDI R30,4
416 071E CPC R17,R30
417 F7D1 BNE 0x0412
418 9508 RET
_delay_1ms:
j --> R20
t --> R10
419 D298 RCALL push_xgset300C
41A 0158 MOVW R10,R16
(0009) }
(0010) }
(0011)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -