📄 ds1305.lst
字号:
01E0 9546 LSR R20
(0171) if(in_ds1305_io()) data|=0x80;
01E1 9B9A SBIS 0x13,2
01E2 C001 RJMP 0x01E4
01E3 6840 ORI R20,0x80
(0172) asm("nop");
01E4 0000 NOP
(0173) asm("nop");
01E5 0000 NOP
(0174) set_ds1305_sclk();
01E6 9AA9 SBI 0x15,1
(0175) asm("nop");
01E7 0000 NOP
(0176) asm("nop");
01E8 0000 NOP
(0177) clr_ds1305_sclk();
01E9 98A9 CBI 0x15,1
(0178) asm("nop");
01EA 0000 NOP
(0179) asm("nop");
01EB 0000 NOP
01EC 956A DEC R22
01ED 2422 CLR R2
01EE 1626 CP R2,R22
01EF F380 BCS 0x01E0
(0180) }
(0181) clr_ds1305_rst();
01F0 98A8 CBI 0x15,0
(0182) asm("nop");
01F1 0000 NOP
(0183) asm("nop");
01F2 0000 NOP
(0184) return(data);
01F3 2F04 MOV R16,R20
01F4 D321 RCALL pop_gset2
01F5 9508 RET
(0185) }
(0186) unsigned char check_ds1305(void)
(0187) {
(0188) ds1305_write(ds1305_control_reg,0x40);
_check_ds1305:
01F6 E420 LDI R18,0x40
01F7 E00F LDI R16,0xF
01F8 DF84 RCALL _ds1305_write
(0189) if(ds1305_read(ds1305_control_reg)==0x40) return 1;
01F9 E00F LDI R16,0xF
01FA DFBF RCALL _ds1305_read
01FB 3400 CPI R16,0x40
01FC F411 BNE 0x01FF
01FD E001 LDI R16,1
01FE C001 RJMP 0x0200
(0190) return 0;
01FF 2700 CLR R16
0200 9508 RET
(0191) }
(0192) void ds1305_read_time(void)
(0193) {
(0194) year=ds1305_read(ds1305_year_reg); //年
_ds1305_read_time:
0201 E006 LDI R16,6
0202 DFB7 RCALL _ds1305_read
0203 2E20 MOV R2,R16
0204 2433 CLR R3
0205 9230014F STS year+1,R3
0207 9220014E STS year,R2
(0195) year=((year&0xf0)>>4)*10+(year&0x0F)+2000;
0209 0191 MOVW R18,R2
020A 7F20 ANDI R18,0xF0
020B 7030 ANDI R19,0
020C 9536 LSR R19
020D 9527 ROR R18
020E 9536 LSR R19
020F 9527 ROR R18
0210 9536 LSR R19
0211 9527 ROR R18
0212 9536 LSR R19
0213 9527 ROR R18
0214 E00A LDI R16,0xA
0215 E010 LDI R17,0
0216 D2EF RCALL empy16s
0217 9180014E LDS R24,year
0219 9190014F LDS R25,year+1
021B 708F ANDI R24,0xF
021C 7090 ANDI R25,0
021D 0118 MOVW R2,R16
021E 0E28 ADD R2,R24
021F 1E39 ADC R3,R25
0220 01C1 MOVW R24,R2
0221 5380 SUBI R24,0x30
0222 4F98 SBCI R25,0xF8
0223 9390014F STS year+1,R25
0225 9380014E STS year,R24
(0196) month=ds1305_read(ds1305_month_reg);//月
0227 E005 LDI R16,5
0228 DF91 RCALL _ds1305_read
0229 93000155 STS month,R16
(0197) month=((month&0xf0)>>4)*10+(month&0x0F);
022B 2F80 MOV R24,R16
022C 7F80 ANDI R24,0xF0
022D 9582 SWAP R24
022E 708F ANDI R24,0xF
022F E09A LDI R25,0xA
0230 9F98 MUL R25,R24
0231 2F80 MOV R24,R16
0232 708F ANDI R24,0xF
0233 2C20 MOV R2,R0
0234 0E28 ADD R2,R24
0235 92200155 STS month,R2
(0198) day=ds1305_read(ds1305_date_reg); //日
0237 E004 LDI R16,4
0238 DF81 RCALL _ds1305_read
0239 93000153 STS day,R16
(0199) day=((day&0xf0)>>4)*10+(day&0x0F);
023B 2F80 MOV R24,R16
023C 7F80 ANDI R24,0xF0
023D 9582 SWAP R24
023E 708F ANDI R24,0xF
023F E09A LDI R25,0xA
0240 9F98 MUL R25,R24
0241 2F80 MOV R24,R16
0242 708F ANDI R24,0xF
0243 2C20 MOV R2,R0
0244 0E28 ADD R2,R24
0245 92200153 STS day,R2
(0200) week=ds1305_read(ds1305_day_reg); //周
0247 E003 LDI R16,3
0248 DF71 RCALL _ds1305_read
0249 93000154 STS week,R16
(0201) week=((week&0xf0)>>4)*10+(week&0x0F);
024B 2F80 MOV R24,R16
024C 7F80 ANDI R24,0xF0
024D 9582 SWAP R24
024E 708F ANDI R24,0xF
024F E09A LDI R25,0xA
0250 9F98 MUL R25,R24
0251 2F80 MOV R24,R16
0252 708F ANDI R24,0xF
0253 2C20 MOV R2,R0
0254 0E28 ADD R2,R24
0255 92200154 STS week,R2
(0202) hour=ds1305_read(ds1305_hr_reg); //时
0257 E002 LDI R16,2
0258 DF61 RCALL _ds1305_read
0259 93000152 STS hour,R16
(0203) hour=((hour&0xf0)>>4)*10+(hour&0x0F);
025B 2F80 MOV R24,R16
025C 7F80 ANDI R24,0xF0
025D 9582 SWAP R24
025E 708F ANDI R24,0xF
025F E09A LDI R25,0xA
0260 9F98 MUL R25,R24
0261 2F80 MOV R24,R16
0262 708F ANDI R24,0xF
0263 2C20 MOV R2,R0
0264 0E28 ADD R2,R24
0265 92200152 STS hour,R2
(0204) minute=ds1305_read(ds1305_min_reg); //分
0267 E001 LDI R16,1
0268 DF51 RCALL _ds1305_read
0269 93000151 STS minute,R16
(0205) minute=((minute&0xf0)>>4)*10+(minute&0x0F);
026B 2F80 MOV R24,R16
026C 7F80 ANDI R24,0xF0
026D 9582 SWAP R24
026E 708F ANDI R24,0xF
026F E09A LDI R25,0xA
0270 9F98 MUL R25,R24
0271 2F80 MOV R24,R16
0272 708F ANDI R24,0xF
0273 2C20 MOV R2,R0
0274 0E28 ADD R2,R24
0275 92200151 STS minute,R2
(0206) second=ds1305_read(ds1305_sec_reg); //秒
0277 2700 CLR R16
0278 DF41 RCALL _ds1305_read
0279 93000150 STS second,R16
(0207) second=((second&0xf0)>>4)*10+(second&0x0F);
027B 2F80 MOV R24,R16
027C 7F80 ANDI R24,0xF0
027D 9582 SWAP R24
027E 708F ANDI R24,0xF
027F E09A LDI R25,0xA
0280 9F98 MUL R25,R24
0281 2F80 MOV R24,R16
0282 708F ANDI R24,0xF
0283 2C20 MOV R2,R0
0284 0E28 ADD R2,R24
0285 92200150 STS second,R2
0287 9508 RET
(0208) }
(0209) void ds1305_write_time(void)
(0210) {
(0211) ds1305_write(ds1305_control_reg,0x80); //停止振荡器,关闭写保护,关闭闹铃中断
_ds1305_write_time:
0288 E820 LDI R18,0x80
0289 E00F LDI R16,0xF
028A DEF2 RCALL _ds1305_write
(0212) ds1305_write(ds1305_charger_reg,0xa9); //涓流充电
028B EA29 LDI R18,0xA9
028C E101 LDI R16,0x11
028D DEEF RCALL _ds1305_write
(0213) //ds1305_write(ds1305_year_reg,year); //年
(0214) //ds1305_write(ds1305_month_reg,month); //月
(0215) //ds1305_write(ds1305_date_reg,day); //日
(0216) //ds1305_write(ds1305_day_reg,week); //周
(0217) //ds1305_write(ds1305_hr_reg,hour); //时
(0218) minute=((minute/10)<<4)+minute%10;
028E E01A LDI R17,0xA
028F 91000151 LDS R16,minute
0291 D25C RCALL mod8u
0292 2E20 MOV R2,R16
0293 E01A LDI R17,0xA
0294 91000151 LDS R16,minute
0296 D259 RCALL div8u
0297 2F80 MOV R24,R16
0298 708F ANDI R24,0xF
0299 9582 SWAP R24
029A 0D82 ADD R24,R2
029B 93800151 STS minute,R24
(0219) ds1305_write(ds1305_min_reg,minute); //分
029D 2F28 MOV R18,R24
029E E001 LDI R16,1
029F DEDD RCALL _ds1305_write
(0220) second=((second/10)<<4)+second%10;
02A0 E01A LDI R17,0xA
02A1 91000150 LDS R16,second
02A3 D24A RCALL mod8u
02A4 2E20 MOV R2,R16
02A5 E01A LDI R17,0xA
02A6 91000150 LDS R16,second
02A8 D247 RCALL div8u
02A9 2F80 MOV R24,R16
02AA 708F ANDI R24,0xF
02AB 9582 SWAP R24
02AC 0D82 ADD R24,R2
02AD 93800150 STS second,R24
(0221) ds1305_write(ds1305_sec_reg,second); //秒
02AF 2F28 MOV R18,R24
02B0 2700 CLR R16
02B1 DECB RCALL _ds1305_write
(0222) ds1305_write(ds1305_control_reg,0x41); //打开写保护
02B2 E421 LDI R18,0x41
02B3 E00F LDI R16,0xF
02B4 DEC8 RCALL _ds1305_write
02B5 9508 RET
(0223) }
(0224)
(0225) void ds1305_init(void)
(0226) {
(0227) ds1305_write(ds1305_control_reg,0x80); //停止振荡器,关闭写保护,关闭闹铃中断
_ds1305_init:
02B6 E820 LDI R18,0x80
02B7 E00F LDI R16,0xF
02B8 DEC4 RCALL _ds1305_write
(0228) ds1305_write(ds1305_charger_reg,0xa9); //涓流充电
02B9 EA29 LDI R18,0xA9
02BA E101 LDI R16,0x11
02BB DEC1 RCALL _ds1305_write
(0229) ds1305_write(ds1305_year_reg,0x05); //年
02BC E025 LDI R18,5
02BD E006 LDI R16,6
02BE DEBE RCALL _ds1305_write
(0230) ds1305_write(ds1305_month_reg,0x12); //月
02BF E122 LDI R18,0x12
02C0 E005 LDI R16,5
02C1 DEBB RCALL _ds1305_write
(0231) ds1305_write(ds1305_date_reg,0x23); //日
02C2 E223 LDI R18,0x23
02C3 E004 LDI R16,4
02C4 DEB8 RCALL _ds1305_write
(0232) ds1305_write(ds1305_day_reg,0x05); //周
02C5 E025 LDI R18,5
02C6 E003 LDI R16,3
02C7 DEB5 RCALL _ds1305_write
(0233) ds1305_write(ds1305_hr_reg,0x10); //时
02C8 E120 LDI R18,0x10
02C9 E002 LDI R16,2
02CA DEB2 RCALL _ds1305_write
(0234) ds1305_write(ds1305_min_reg,0x56); //分
02CB E526 LDI R18,0x56
02CC E001 LDI R16,1
02CD DEAF RCALL _ds1305_write
(0235) ds1305_write(ds1305_sec_reg,0x00); //秒
02CE 2722 CLR R18
02CF 2700 CLR R16
02D0 DEAC RCALL _ds1305_write
(0236) ds1305_write(alarm0_sec_reg,0x20);
02D1 E220 LDI R18,0x20
02D2 E007 LDI R16,7
02D3 DEA9 RCALL _ds1305_write
(0237) ds1305_write(alarm0_min_reg,0x80);
02D4 E820 LDI R18,0x80
02D5 E008 LDI R16,0x8
02D6 DEA6 RCALL _ds1305_write
(0238) ds1305_write(alarm0_hr_reg,0x80);
02D7 E820 LDI R18,0x80
02D8 E009 LDI R16,0x9
02D9 DEA3 RCALL _ds1305_write
(0239) ds1305_write(alarm0_day_reg,0x80);
02DA E820 LDI R18,0x80
02DB E00A LDI R16,0xA
02DC DEA0 RCALL _ds1305_write
(0240) ds1305_write(ds1305_control_reg,45); //打开写保护
02DD E22D LDI R18,0x2D
02DE E00F LDI R16,0xF
02DF DE9D RCALL _ds1305_write
02E0 9508 RET
(0241) }
(0242) void delay_1us(void)//1u延时函数
(0243) {
(0244) asm("nop");
_delay_1us:
02E1 0000 NOP
02E2 9508 RET
(0245) }
(0246)
(0247) void delay_1ms(void)//1ms延时函数
(0248) {
(0249) unsigned int i;
(0250) for (i=0;i<1034;i++)
_delay_1ms:
i --> R16
02E3 2700 CLR R16
02E4 2711 CLR R17
02E5 C002 RJMP 0x02E8
02E6 5F0F SUBI R16,0xFF
02E7 4F1F SBCI R17,0xFF
02E8 300A CPI R16,0xA
02E9 E0E4 LDI R30,4
02EA 071E CPC R17,R30
02EB F3D0 BCS 0x02E6
02EC 9508 RET
_delay_nus:
i --> R20
n --> R22
02ED D234 RCALL push_gset2
02EE 01B8 MOVW R22,R16
(0251) {
(0252) }
(0253) }
(0254)
(0255) void delay_nus(unsigned int n)//nus延时函数
(0256) {
(0257) unsigned int i;
(0258) for (i=0;i<n;i++)//执行n次1微秒延时
02EF 2744 CLR R20
02F0 2755 CLR R21
02F1 C003 RJMP 0x02F5
(0259) delay_1us();
02F2 DFEE RCALL _delay_1us
02F3 5F4F SUBI R20,0xFF
02F4 4F5F SBCI R21,0xFF
02F5 1746 CP R20,R22
02F6 0757 CPC R21,R23
02F7 F3D0 BCS 0x02F2
02F8 D21D RCALL pop_gset2
02F9 9508 RET
_delay_nms:
i --> R20
n --> R22
02FA D227 RCALL push_gset2
02FB 01B8 MOVW R22,R16
(0260) }
(0261)
(0262) void delay_nms(unsigned int n)//延时n毫秒
(0263) {
(0264) unsigned int i;
(0265) for (i=0;i<n;i++)//执行n次1毫秒延时
02FC 2744 CLR R20
02FD 2755 CLR R21
02FE C003 RJMP 0x0302
(0266) delay_1ms();
02FF DFE3 RCALL _delay_1ms
0300 5F4F SUBI R20,0xFF
0301 4F5F SBCI R21,0xFF
0302 1746 CP R20,R22
0303 0757 CPC R21,R23
0304 F3D0 BCS 0x02FF
0305 D210 RCALL pop_gset2
0306 9508 RET
(0267) }
(0268)
(0269) void uart_init(void)
(0270) {
(0271) //UCSRB=(1<<RXEN)|(1<<TXEN); //允许发送和接收
(0272) UBRRL=(fosc/16/baud-1)%256; //设置波特率寄存器低位字节
_uart_init:
0307 E28F LDI R24,0x2F
0308 B989 OUT 0x09,R24
(0273) UBRRH=(fosc/16/baud-1)/256; //设置波特率寄存器高位字节
0309 2422 CLR R2
030A BC20 OUT 0x20,R2
(0274) UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位STOP位
030B E886 LDI R24,0x86
030C BD80 OUT 0x20,R24
(0275) UCSRB=(1<<RXEN)|(1<<TXEN); //允许发送和接收
FILE: <library>
030D E188 LDI R24,0x18
030E B98A OUT 0x0A,R24
030F 9508 RET
__print:
0310 D19F RCALL push_arg4
0311 D20A RCALL push_gset5
0312 972A SBIW R28,0xA
0313 2400 CLR R0
0314 2411 CLR R1
0315 821F STD Y+7,R1
0316 820E STD Y+6,R0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -