📄 ds1305.lis
字号:
0280 807F andi R24,240
0282 8295 swap R24
0284 8F70 andi R24,#0x0F
0286 9AE0 ldi R25,10
0288 989F mul R25,R24
028A 802F mov R24,R16
028C 8F70 andi R24,15
028E 202C mov R2,R0
0290 280E add R2,R24
0292 20920300 sts _minute,R2
0296 .dbline 206
0296 ; second=ds1305_read(ds1305_sec_reg); //秒
0296 0027 clr R16
0298 41DF rcall _ds1305_read
029A 00930200 sts _second,R16
029E .dbline 207
029E ; second=((second&0xf0)>>4)*10+(second&0x0F);
029E 802F mov R24,R16
02A0 807F andi R24,240
02A2 8295 swap R24
02A4 8F70 andi R24,#0x0F
02A6 9AE0 ldi R25,10
02A8 989F mul R25,R24
02AA 802F mov R24,R16
02AC 8F70 andi R24,15
02AE 202C mov R2,R0
02B0 280E add R2,R24
02B2 20920200 sts _second,R2
02B6 .dbline -2
02B6 L36:
02B6 .dbline 0 ; func end
02B6 0895 ret
02B8 .dbend
02B8 .dbfunc e ds1305_write_time _ds1305_write_time fV
.even
02B8 _ds1305_write_time::
02B8 .dbline -1
02B8 .dbline 210
02B8 ; }
02B8 ; void ds1305_write_time(void)
02B8 ; {
02B8 .dbline 211
02B8 ; ds1305_write(ds1305_control_reg,0x80); //停止振荡器,关闭写保护,关闭闹铃中断
02B8 20E8 ldi R18,128
02BA 0FE0 ldi R16,15
02BC F2DE rcall _ds1305_write
02BE .dbline 212
02BE ; ds1305_write(ds1305_charger_reg,0xa9); //涓流充电
02BE 29EA ldi R18,169
02C0 01E1 ldi R16,17
02C2 EFDE rcall _ds1305_write
02C4 .dbline 218
02C4 ; //ds1305_write(ds1305_year_reg,year); //年
02C4 ; //ds1305_write(ds1305_month_reg,month); //月
02C4 ; //ds1305_write(ds1305_date_reg,day); //日
02C4 ; //ds1305_write(ds1305_day_reg,week); //周
02C4 ; //ds1305_write(ds1305_hr_reg,hour); //时
02C4 ; minute=((minute/10)<<4)+minute%10;
02C4 1AE0 ldi R17,10
02C6 00910300 lds R16,_minute
02CA 00D0 rcall mod8u
02CC 202E mov R2,R16
02CE 1AE0 ldi R17,10
02D0 00910300 lds R16,_minute
02D4 00D0 rcall div8u
02D6 802F mov R24,R16
02D8 8F70 andi R24,#0x0F
02DA 8295 swap R24
02DC 820D add R24,R2
02DE 80930300 sts _minute,R24
02E2 .dbline 219
02E2 ; ds1305_write(ds1305_min_reg,minute); //分
02E2 282F mov R18,R24
02E4 01E0 ldi R16,1
02E6 DDDE rcall _ds1305_write
02E8 .dbline 220
02E8 ; second=((second/10)<<4)+second%10;
02E8 1AE0 ldi R17,10
02EA 00910200 lds R16,_second
02EE 00D0 rcall mod8u
02F0 202E mov R2,R16
02F2 1AE0 ldi R17,10
02F4 00910200 lds R16,_second
02F8 00D0 rcall div8u
02FA 802F mov R24,R16
02FC 8F70 andi R24,#0x0F
02FE 8295 swap R24
0300 820D add R24,R2
0302 80930200 sts _second,R24
0306 .dbline 221
0306 ; ds1305_write(ds1305_sec_reg,second); //秒
0306 282F mov R18,R24
0308 0027 clr R16
030A CBDE rcall _ds1305_write
030C .dbline 222
030C ; ds1305_write(ds1305_control_reg,0x41); //打开写保护
030C 21E4 ldi R18,65
030E 0FE0 ldi R16,15
0310 C8DE rcall _ds1305_write
0312 .dbline -2
0312 L37:
0312 .dbline 0 ; func end
0312 0895 ret
0314 .dbend
0314 .dbfunc e ds1305_init _ds1305_init fV
.even
0314 _ds1305_init::
0314 .dbline -1
0314 .dbline 226
0314 ; }
0314 ;
0314 ; void ds1305_init(void)
0314 ; {
0314 .dbline 227
0314 ; ds1305_write(ds1305_control_reg,0x80); //停止振荡器,关闭写保护,关闭闹铃中断
0314 20E8 ldi R18,128
0316 0FE0 ldi R16,15
0318 C4DE rcall _ds1305_write
031A .dbline 228
031A ; ds1305_write(ds1305_charger_reg,0xa9); //涓流充电
031A 29EA ldi R18,169
031C 01E1 ldi R16,17
031E C1DE rcall _ds1305_write
0320 .dbline 229
0320 ; ds1305_write(ds1305_year_reg,0x05); //年
0320 25E0 ldi R18,5
0322 06E0 ldi R16,6
0324 BEDE rcall _ds1305_write
0326 .dbline 230
0326 ; ds1305_write(ds1305_month_reg,0x12); //月
0326 22E1 ldi R18,18
0328 05E0 ldi R16,5
032A BBDE rcall _ds1305_write
032C .dbline 231
032C ; ds1305_write(ds1305_date_reg,0x23); //日
032C 23E2 ldi R18,35
032E 04E0 ldi R16,4
0330 B8DE rcall _ds1305_write
0332 .dbline 232
0332 ; ds1305_write(ds1305_day_reg,0x05); //周
0332 25E0 ldi R18,5
0334 03E0 ldi R16,3
0336 B5DE rcall _ds1305_write
0338 .dbline 233
0338 ; ds1305_write(ds1305_hr_reg,0x10); //时
0338 20E1 ldi R18,16
033A 02E0 ldi R16,2
033C B2DE rcall _ds1305_write
033E .dbline 234
033E ; ds1305_write(ds1305_min_reg,0x56); //分
033E 26E5 ldi R18,86
0340 01E0 ldi R16,1
0342 AFDE rcall _ds1305_write
0344 .dbline 235
0344 ; ds1305_write(ds1305_sec_reg,0x00); //秒
0344 2227 clr R18
0346 0027 clr R16
0348 ACDE rcall _ds1305_write
034A .dbline 236
034A ; ds1305_write(alarm0_sec_reg,0x20);
034A 20E2 ldi R18,32
034C 07E0 ldi R16,7
034E A9DE rcall _ds1305_write
0350 .dbline 237
0350 ; ds1305_write(alarm0_min_reg,0x80);
0350 20E8 ldi R18,128
0352 08E0 ldi R16,8
0354 A6DE rcall _ds1305_write
0356 .dbline 238
0356 ; ds1305_write(alarm0_hr_reg,0x80);
0356 20E8 ldi R18,128
0358 09E0 ldi R16,9
035A A3DE rcall _ds1305_write
035C .dbline 239
035C ; ds1305_write(alarm0_day_reg,0x80);
035C 20E8 ldi R18,128
035E 0AE0 ldi R16,10
0360 A0DE rcall _ds1305_write
0362 .dbline 240
0362 ; ds1305_write(ds1305_control_reg,45); //打开写保护
0362 2DE2 ldi R18,45
0364 0FE0 ldi R16,15
0366 9DDE rcall _ds1305_write
0368 .dbline -2
0368 L38:
0368 .dbline 0 ; func end
0368 0895 ret
036A .dbend
036A .dbfunc e delay_1us _delay_1us fV
.even
036A _delay_1us::
036A .dbline -1
036A .dbline 243
036A ; }
036A ; void delay_1us(void)//1u延时函数
036A ; {
036A .dbline 244
036A ; asm("nop");
036A 0000 nop
036C .dbline -2
036C L39:
036C .dbline 0 ; func end
036C 0895 ret
036E .dbend
036E .dbfunc e delay_1ms _delay_1ms fV
036E ; i -> R16,R17
.even
036E _delay_1ms::
036E .dbline -1
036E .dbline 248
036E ; }
036E ;
036E ; void delay_1ms(void)//1ms延时函数
036E ; {
036E .dbline 250
036E ; unsigned int i;
036E ; for (i=0;i<1034;i++)
036E 0027 clr R16
0370 1127 clr R17
0372 02C0 rjmp L44
0374 L41:
0374 .dbline 251
0374 .dbline 252
0374 L42:
0374 .dbline 250
0374 0F5F subi R16,255 ; offset = 1
0376 1F4F sbci R17,255
0378 L44:
0378 .dbline 250
0378 0A30 cpi R16,10
037A E4E0 ldi R30,4
037C 1E07 cpc R17,R30
037E D0F3 brlo L41
0380 .dbline -2
0380 L40:
0380 .dbline 0 ; func end
0380 0895 ret
0382 .dbsym r i 16 i
0382 .dbend
0382 .dbfunc e delay_nus _delay_nus fV
0382 ; i -> R20,R21
0382 ; n -> R22,R23
.even
0382 _delay_nus::
0382 00D0 rcall push_gset2
0384 B801 movw R22,R16
0386 .dbline -1
0386 .dbline 256
0386 ; {
0386 ; }
0386 ; }
0386 ;
0386 ; void delay_nus(unsigned int n)//nus延时函数
0386 ; {
0386 .dbline 258
0386 ; unsigned int i;
0386 ; for (i=0;i<n;i++)//执行n次1微秒延时
0386 4427 clr R20
0388 5527 clr R21
038A 03C0 rjmp L49
038C L46:
038C .dbline 259
038C EEDF rcall _delay_1us
038E L47:
038E .dbline 258
038E 4F5F subi R20,255 ; offset = 1
0390 5F4F sbci R21,255
0392 L49:
0392 .dbline 258
0392 4617 cp R20,R22
0394 5707 cpc R21,R23
0396 D0F3 brlo L46
0398 .dbline -2
0398 L45:
0398 00D0 rcall pop_gset2
039A .dbline 0 ; func end
039A 0895 ret
039C .dbsym r i 20 i
039C .dbsym r n 22 i
039C .dbend
039C .dbfunc e delay_nms _delay_nms fV
039C ; i -> R20,R21
039C ; n -> R22,R23
.even
039C _delay_nms::
039C 00D0 rcall push_gset2
039E B801 movw R22,R16
03A0 .dbline -1
03A0 .dbline 263
03A0 ; delay_1us();
03A0 ; }
03A0 ;
03A0 ; void delay_nms(unsigned int n)//延时n毫秒
03A0 ; {
03A0 .dbline 265
03A0 ; unsigned int i;
03A0 ; for (i=0;i<n;i++)//执行n次1毫秒延时
03A0 4427 clr R20
03A2 5527 clr R21
03A4 03C0 rjmp L54
03A6 L51:
03A6 .dbline 266
03A6 E3DF rcall _delay_1ms
03A8 L52:
03A8 .dbline 265
03A8 4F5F subi R20,255 ; offset = 1
03AA 5F4F sbci R21,255
03AC L54:
03AC .dbline 265
03AC 4617 cp R20,R22
03AE 5707 cpc R21,R23
03B0 D0F3 brlo L51
03B2 .dbline -2
03B2 L50:
03B2 00D0 rcall pop_gset2
03B4 .dbline 0 ; func end
03B4 0895 ret
03B6 .dbsym r i 20 i
03B6 .dbsym r n 22 i
03B6 .dbend
03B6 .dbfunc e uart_init _uart_init fV
.even
03B6 _uart_init::
03B6 .dbline -1
03B6 .dbline 270
03B6 ; delay_1ms();
03B6 ; }
03B6 ;
03B6 ; void uart_init(void)
03B6 ; {
03B6 .dbline 272
03B6 ; //UCSRB=(1<<RXEN)|(1<<TXEN); //允许发送和接收
03B6 ; UBRRL=(fosc/16/baud-1)%256; //设置波特率寄存器低位字节
03B6 8FE2 ldi R24,47
03B8 89B9 out 0x9,R24
03BA .dbline 273
03BA ; UBRRH=(fosc/16/baud-1)/256; //设置波特率寄存器高位字节
03BA 2224 clr R2
03BC 20BC out 0x20,R2
03BE .dbline 274
03BE ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位STOP位
03BE 86E8 ldi R24,134
03C0 80BD out 0x20,R24
03C2 .dbline 275
03C2 ; UCSRB=(1<<RXEN)|(1<<TXEN); //允许发送和接收
03C2 88E1 ldi R24,24
03C4 8AB9 out 0xa,R24
03C6 .dbline -2
03C6 L55:
03C6 .dbline 0 ; func end
03C6 0895 ret
03C8 .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\ziliao\JTAG\example\DS1305\DS1305.c
0000 _year::
0000 .blkb 2
0002 .dbsym e year _year i
0002 _second::
0002 .blkb 1
0003 .dbsym e second _second c
0003 _minute::
0003 .blkb 1
0004 .dbsym e minute _minute c
0004 _hour::
0004 .blkb 1
0005 .dbsym e hour _hour c
0005 _day::
0005 .blkb 1
0006 .dbsym e day _day c
0006 _week::
0006 .blkb 1
0007 .dbsym e week _week c
0007 _month::
0007 .blkb 1
0008 .dbsym e month _month c
.area data(ram, con, rel)
0000 .dbfile F:\ziliao\JTAG\example\DS1305\DS1305.c
0000 L6:
0000 .blkb 47
.area idata
0000 B5B1C7B0B5C4CAB1BCE4CAC7A3BA2020 .byte 181,177,199,176,181,196,202,177,188,228,202,199,163,186,32,32
0010 2564C4EA2564D4C22564C8D52020D0C7 .byte 37,'d,196,234,37,'d,212,194,37,'d,200,213,32,32,208,199
0020 C6DA25642025643A25643A25640A00 .byte 198,218,37,'d,32,37,'d,58,37,'d,58,37,'d,10,0
.area data(ram, con, rel)
002F .dbfile F:\ziliao\JTAG\example\DS1305\DS1305.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -