📄 ds1305.lst
字号:
__start:
__text_start:
010C E5CF LDI R28,0x5F
010D E0D4 LDI R29,4
010E BFCD OUT 0x3D,R28
010F BFDE OUT 0x3E,R29
0110 51C0 SUBI R28,0x10
0111 40D0 SBCI R29,0
0112 EA0A LDI R16,0xAA
0113 8308 STD Y+0,R16
0114 2400 CLR R0
0115 E4EE LDI R30,0x4E
0116 E0F1 LDI R31,1
0117 E011 LDI R17,1
0118 37E1 CPI R30,0x71
0119 07F1 CPC R31,R17
011A F011 BEQ 0x011D
011B 9201 ST R0,Z+
011C CFFB RJMP 0x0118
011D 8300 STD Z+0,R16
011E E2E9 LDI R30,0x29
011F E0F1 LDI R31,1
0120 E6A0 LDI R26,0x60
0121 E0B0 LDI R27,0
0122 E012 LDI R17,2
0123 31E7 CPI R30,0x17
0124 07F1 CPC R31,R17
0125 F021 BEQ 0x012A
0126 95C8 LPM
0127 9631 ADIW R30,1
0128 920D ST R0,X+
0129 CFF9 RJMP 0x0123
012A D00E RCALL _main
_exit:
012B CFFF RJMP _exit
_int0_isr:
012C 922A ST R2,-Y
012D 938A ST R24,-Y
012E B62F IN R2,0x3F
012F 922A ST R2,-Y
FILE: F:\ziliao\JTAG\example\DS1305\DS1305.c
(0001) /*DS1302时钟显示*/
(0002)
(0003) #include <iom8v.h>
(0004) #include <macros.h>
(0005) #include <stdio.h>
(0006)
(0007) /*串口波特率设置*/
(0008) #define fosc 7372800 //晶振7.3728M
(0009) #define baud 9600 //波特率设置
(0010)
(0011) #define ds1305_rst PC0
(0012) #define ds1305_sclk PC1
(0013) #define ds1305_io PC2
(0014) #define set_ds1305_rst_ddr() DDRC|=1<<ds1305_rst
(0015) #define set_ds1305_rst() PORTC|=1<<ds1305_rst
(0016) #define clr_ds1305_rst() PORTC&=~(1<<ds1305_rst)
(0017) #define set_ds1305_io_ddr() DDRC|=1<<ds1305_io
(0018) #define set_ds1305_io() PORTC|=1<<ds1305_io
(0019) #define clr_ds1305_io() PORTC&=~(1<<ds1305_io)
(0020) #define clr_ds1305_io_ddr() DDRC&=~(1<<ds1305_io)
(0021) #define in_ds1305_io() PINC&(1<<ds1305_io)
(0022) #define set_ds1305_sclk_ddr() DDRC|=1<<ds1305_sclk
(0023) #define set_ds1305_sclk() PORTC|=1<<ds1305_sclk
(0024) #define clr_ds1305_sclk() PORTC&=~(1<<ds1305_sclk)
(0025)
(0026) #define ds1305_sec_reg 0x00
(0027) #define ds1305_min_reg 0x01
(0028) #define ds1305_hr_reg 0x02
(0029) #define ds1305_date_reg 0x04
(0030) #define ds1305_month_reg 0x05
(0031) #define ds1305_day_reg 0x03
(0032) #define ds1305_year_reg 0x06
(0033) #define alarm0_sec_reg 0x07
(0034) #define alarm0_min_reg 0x08
(0035) #define alarm0_hr_reg 0x09
(0036) #define alarm0_day_reg 0x0a
(0037) #define alarm1_sec_reg 0x0b
(0038) #define alarm1_min_reg 0x0c
(0039) #define alarm1_hr_reg 0x0d
(0040) #define alarm1_day_reg 0x0e
(0041) #define ds1305_control_reg 0x0f
(0042) #define ds1305_status_reg 0x10
(0043) #define ds1305_charger_reg 0x11
(0044)
(0045)
(0046) unsigned char month,week,day,hour,minute,second;
(0047) unsigned int year;
(0048) #pragma interrupt_handler int0_isr:2
(0049) void int0_isr(void)
(0050) {
(0051) PORTB^=0X01;
0130 E081 LDI R24,1
0131 B228 IN R2,0x18
0132 2628 EOR R2,R24
0133 BA28 OUT 0x18,R2
0134 9029 LD R2,Y+
0135 BE2F OUT 0x3F,R2
0136 9189 LD R24,Y+
0137 9029 LD R2,Y+
0138 9518 RETI
_main:
guangbiao --> Y+13
queren_zhi1 --> Y+13
jia_zhi1 --> Y+13
jian_zhi1 --> Y+13
tuichu_zhi1 --> Y+13
queren_zhi --> Y+13
jia_zhi --> Y+13
jian_zhi --> Y+13
tuichu_zhi --> Y+13
she_zhi --> Y+13
queren1 --> Y+13
tuichu1 --> Y+13
jian1 --> Y+13
jia1 --> Y+13
queren --> Y+13
tuichu --> Y+13
jian --> Y+13
jia --> Y+13
shu --> Y+13
j --> Y+13
0139 972C SBIW R28,0xC
(0052)
(0053) }
(0054)
(0055) void main(void)
(0056) { unsigned char j,shu,jia,jian,tuichu,queren,jia1,jian1,tuichu1,queren1,she_zhi,tuichu_zhi,jian_zhi,jia_zhi,queren_zhi,tuichu_zhi1,jian_zhi1,jia_zhi1,queren_zhi1,guangbiao;
(0057) //guangbiao=0;
(0058) CLI();
013A 94F8 BCLR 7
(0059) DDRC=0XFF;
013B EF8F LDI R24,0xFF
013C BB84 OUT 0x14,R24
(0060) PORTC|=0x07;
013D B385 IN R24,0x15
013E 6087 ORI R24,7
013F BB85 OUT 0x15,R24
(0061) DDRB=0XFF;
0140 EF8F LDI R24,0xFF
0141 BB87 OUT 0x17,R24
(0062) PORTB=0x00;
0142 2422 CLR R2
0143 BA28 OUT 0x18,R2
(0063) PORTD=0XFF;
0144 BB82 OUT 0x12,R24
(0064) DDRD=0X00;
0145 BA21 OUT 0x11,R2
(0065) MCUCR=0x00;
0146 BE25 OUT 0x35,R2
(0066) GICR=0X40;
0147 E480 LDI R24,0x40
0148 BF8B OUT 0x3B,R24
(0067) uart_init();
0149 D1BD RCALL _uart_init
(0068) ds1305_init();
014A D16B RCALL _ds1305_init
(0069) SEI();
014B 9478 BSET 7
014C C02D RJMP 0x017A
(0070)
(0071) while(1)
(0072) {
(0073) delay_nms(500);
014D EF04 LDI R16,0xF4
014E E011 LDI R17,1
014F D1AA RCALL _delay_nms
(0074) ds1305_read_time();
0150 D0B0 RCALL _ds1305_read_time
(0075) printf("当前的时间是: %d年%d月%d日 星期%d %d:%d:%d\n",year,month,day,week,hour,minute,second);
0151 90200150 LDS R2,second
0153 2433 CLR R3
0154 863B STD Y+11,R3
0155 862A STD Y+10,R2
0156 90200151 LDS R2,minute
0158 2433 CLR R3
0159 8639 STD Y+9,R3
015A 8628 STD Y+8,R2
015B 90200152 LDS R2,hour
015D 2433 CLR R3
015E 823F STD Y+7,R3
015F 822E STD Y+6,R2
0160 90200154 LDS R2,week
0162 2433 CLR R3
0163 823D STD Y+5,R3
0164 822C STD Y+4,R2
0165 90200153 LDS R2,day
0167 2433 CLR R3
0168 823B STD Y+3,R3
0169 822A STD Y+2,R2
016A 90200155 LDS R2,month
016C 2433 CLR R3
016D 8239 STD Y+1,R3
016E 8228 STD Y+0,R2
016F 9120014E LDS R18,year
0171 9130014F LDS R19,year+1
0173 E600 LDI R16,0x60
0174 E010 LDI R17,0
0175 D499 RCALL _printf
(0076) putchar(0x0a);
0176 E00A LDI R16,0xA
0177 D3CC RCALL _putchar
(0077) putchar(0x0d);
0178 E00D LDI R16,0xD
0179 D3CA RCALL _putchar
017A CFD2 RJMP 0x014D
017B 962C ADIW R28,0xC
017C 9508 RET
_ds1305_write:
i --> R20
data --> R18
reg --> R16
017D D3A6 RCALL push_gset1
(0078) }
(0079)
(0080) }
(0081)
(0082) void ds1305_write(unsigned char reg,unsigned char data)
(0083) {
(0084) unsigned char i=0;
017E 2744 CLR R20
(0085) reg+=0x80;//写标志
017F 5800 SUBI R16,0x80
(0086) set_ds1305_io_ddr();
0180 9AA2 SBI 0x14,2
(0087) //asm("nop");
(0088) //asm("nop");
(0089) clr_ds1305_rst();
0181 98A8 CBI 0x15,0
(0090) asm("nop");
0182 0000 NOP
(0091) asm("nop");
0183 0000 NOP
(0092) clr_ds1305_sclk();
0184 98A9 CBI 0x15,1
(0093) asm("nop");
0185 0000 NOP
(0094) asm("nop");
0186 0000 NOP
(0095) set_ds1305_rst();
0187 9AA8 SBI 0x15,0
(0096) asm("nop");
0188 0000 NOP
(0097) asm("nop");
0189 0000 NOP
(0098) for(i=8;i>0;i--)
018A E048 LDI R20,0x8
018B C00F RJMP 0x019B
(0099) {
(0100) if(reg&0x01) set_ds1305_io();
018C FF00 SBRS R16,0
018D C002 RJMP 0x0190
018E 9AAA SBI 0x15,2
018F C001 RJMP 0x0191
(0101) else clr_ds1305_io();
0190 98AA CBI 0x15,2
(0102) asm("nop");
0191 0000 NOP
(0103) asm("nop");
0192 0000 NOP
(0104) set_ds1305_sclk();
0193 9AA9 SBI 0x15,1
(0105) asm("nop");
0194 0000 NOP
(0106) asm("nop");
0195 0000 NOP
(0107) clr_ds1305_sclk();
0196 98A9 CBI 0x15,1
(0108) asm("nop");
0197 0000 NOP
(0109) asm("nop");
0198 0000 NOP
(0110) reg>>=1;
0199 9506 LSR R16
019A 954A DEC R20
019B 2422 CLR R2
019C 1624 CP R2,R20
019D F370 BCS 0x018C
(0111) }
(0112) for(i=8;i>0;i--)
019E E048 LDI R20,0x8
019F C00F RJMP 0x01AF
(0113) {
(0114) if(data&0x01) set_ds1305_io();
01A0 FF20 SBRS R18,0
01A1 C002 RJMP 0x01A4
01A2 9AAA SBI 0x15,2
01A3 C001 RJMP 0x01A5
(0115) else clr_ds1305_io();
01A4 98AA CBI 0x15,2
(0116) asm("nop");
01A5 0000 NOP
(0117) asm("nop");
01A6 0000 NOP
(0118) set_ds1305_sclk();
01A7 9AA9 SBI 0x15,1
(0119) asm("nop");
01A8 0000 NOP
(0120) asm("nop");
01A9 0000 NOP
(0121) clr_ds1305_sclk();
01AA 98A9 CBI 0x15,1
(0122) asm("nop");
01AB 0000 NOP
(0123) asm("nop");
01AC 0000 NOP
(0124) data>>=1;
01AD 9526 LSR R18
01AE 954A DEC R20
01AF 2422 CLR R2
01B0 1624 CP R2,R20
01B1 F370 BCS 0x01A0
(0125) }
(0126) clr_ds1305_rst();
01B2 98A8 CBI 0x15,0
(0127) asm("nop");
01B3 0000 NOP
(0128) asm("nop");
01B4 0000 NOP
(0129) clr_ds1305_io_ddr();
01B5 98A2 CBI 0x14,2
(0130) asm("nop");
01B6 0000 NOP
(0131) asm("nop");
01B7 0000 NOP
01B8 D36E RCALL pop_gset1
01B9 9508 RET
_ds1305_read:
data --> R20
i --> R22
reg --> R16
01BA D367 RCALL push_gset2
(0132) }
(0133) unsigned char ds1305_read(unsigned char reg)
(0134) {
(0135) unsigned char data=0;
01BB 2744 CLR R20
(0136) unsigned char i=0;
01BC 2766 CLR R22
(0137)
(0138) set_ds1305_io_ddr();
01BD 9AA2 SBI 0x14,2
(0139) //asm("nop");
(0140) //asm("nop");
(0141) clr_ds1305_rst();
01BE 98A8 CBI 0x15,0
(0142) asm("nop");
01BF 0000 NOP
(0143) asm("nop");
01C0 0000 NOP
(0144) clr_ds1305_sclk();
01C1 98A9 CBI 0x15,1
(0145) asm("nop");
01C2 0000 NOP
(0146) asm("nop");
01C3 0000 NOP
(0147) set_ds1305_rst();
01C4 9AA8 SBI 0x15,0
(0148) asm("nop");
01C5 0000 NOP
(0149) asm("nop");
01C6 0000 NOP
(0150) for(i=8;i>0;i--)
01C7 E068 LDI R22,0x8
01C8 C00F RJMP 0x01D8
(0151) {
(0152)
(0153) if(reg&0x01) set_ds1305_io();
01C9 FF00 SBRS R16,0
01CA C002 RJMP 0x01CD
01CB 9AAA SBI 0x15,2
01CC C001 RJMP 0x01CE
(0154) else clr_ds1305_io();
01CD 98AA CBI 0x15,2
(0155) asm("nop");
01CE 0000 NOP
(0156) asm("nop");
01CF 0000 NOP
(0157) set_ds1305_sclk();
01D0 9AA9 SBI 0x15,1
(0158) asm("nop");
01D1 0000 NOP
(0159) asm("nop");
01D2 0000 NOP
(0160) clr_ds1305_sclk();
01D3 98A9 CBI 0x15,1
(0161) asm("nop");
01D4 0000 NOP
(0162) asm("nop");
01D5 0000 NOP
(0163) reg>>=1;
01D6 9506 LSR R16
01D7 956A DEC R22
01D8 2422 CLR R2
01D9 1626 CP R2,R22
01DA F370 BCS 0x01C9
(0164) }
(0165) clr_ds1305_io_ddr();
01DB 98A2 CBI 0x14,2
(0166) asm("nop");
01DC 0000 NOP
(0167) asm("nop");
01DD 0000 NOP
(0168) for(i=8;i>0;i--)
01DE E068 LDI R22,0x8
01DF C00D RJMP 0x01ED
(0169) {
(0170) data>>=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -