📄 ds1302.lis
字号:
0398 80E0 ldi R24,<L73
039A 90E0 ldi R25,>L73
039C FE01 movw R30,R28
039E 3B96 adiw R30,11
03A0 0BE0 ldi R16,11
03A2 10E0 ldi R17,0
03A4 FA93 st -y,R31
03A6 EA93 st -y,R30
03A8 9A93 st -y,R25
03AA 8A93 st -y,R24
03AC 0E940000 xcall asgncblk
03B0 .dbline 269
03B0 ; uchar line2[9]={0,0,':',0,0,':',0,0,'\0'}; //显示第2行的字符数组
03B0 80E0 ldi R24,<L74
03B2 90E0 ldi R25,>L74
03B4 FE01 movw R30,R28
03B6 3296 adiw R30,2
03B8 09E0 ldi R16,9
03BA 10E0 ldi R17,0
03BC FA93 st -y,R31
03BE EA93 st -y,R30
03C0 9A93 st -y,R25
03C2 8A93 st -y,R24
03C4 0E940000 xcall asgncblk
03C8 .dbline 270
03C8 ; for(i=0;i<3;i++) //为第2行的字符数组赋值
03C8 4427 clr R20
03CA 1EC0 xjmp L78
03CC L75:
03CC .dbline 271
03CC .dbline 272
03CC 9E01 movw R18,R28
03CE 242E mov R2,R20
03D0 3324 clr R3
03D2 E2E0 ldi R30,2
03D4 F0E0 ldi R31,0
03D6 E219 sub R30,R2
03D8 F309 sbc R31,R3
03DA E60F add R30,R22
03DC F71F adc R31,R23
03DE 0081 ldd R16,z+0
03E0 CCDF xcall _BCD_ASCII
03E2 .dbline 273
03E2 83E0 ldi R24,3
03E4 849F mul R24,R20
03E6 F001 movw R30,R0
03E8 CE01 movw R24,R28
03EA 0296 adiw R24,2
03EC E80F add R30,R24
03EE F91F adc R31,R25
03F0 2880 ldd R2,y+0
03F2 2082 std z+0,R2
03F4 .dbline 274
03F4 83E0 ldi R24,3
03F6 849F mul R24,R20
03F8 F001 movw R30,R0
03FA CE01 movw R24,R28
03FC 0396 adiw R24,3
03FE E80F add R30,R24
0400 F91F adc R31,R25
0402 2980 ldd R2,y+1
0404 2082 std z+0,R2
0406 .dbline 275
0406 L76:
0406 .dbline 270
0406 4395 inc R20
0408 L78:
0408 .dbline 270
0408 4330 cpi R20,3
040A 00F3 brlo L75
040C .dbline 276
040C ; {
040C ; BCD_ASCII(time[2-i],asc);
040C ; line2[i*3]=asc[0];
040C ; line2[i*3+1]=asc[1];
040C ; }
040C ; BCD_ASCII(time[6],asc); //为第1行的年赋值
040C 9E01 movw R18,R28
040E FB01 movw R30,R22
0410 0681 ldd R16,z+6
0412 B3DF xcall _BCD_ASCII
0414 .dbline 277
0414 ; line1[0]=asc[0];
0414 2880 ldd R2,y+0
0416 2B86 std y+11,R2
0418 .dbline 278
0418 ; line1[1]=asc[1];
0418 2980 ldd R2,y+1
041A 2C86 std y+12,R2
041C .dbline 279
041C ; BCD_ASCII(time[4],asc); //为第1行的月赋值
041C 9E01 movw R18,R28
041E FB01 movw R30,R22
0420 0481 ldd R16,z+4
0422 ABDF xcall _BCD_ASCII
0424 .dbline 280
0424 ; line1[3]=asc[0];
0424 2880 ldd R2,y+0
0426 2E86 std y+14,R2
0428 .dbline 281
0428 ; line1[4]=asc[1];
0428 2980 ldd R2,y+1
042A 2F86 std y+15,R2
042C .dbline 282
042C ; BCD_ASCII(time[3],asc); //为第1行的日赋值
042C 9E01 movw R18,R28
042E FB01 movw R30,R22
0430 0381 ldd R16,z+3
0432 A3DF xcall _BCD_ASCII
0434 .dbline 283
0434 ; line1[6]=asc[0];
0434 2880 ldd R2,y+0
0436 298A std y+17,R2
0438 .dbline 284
0438 ; line1[7]=asc[1];
0438 2980 ldd R2,y+1
043A 2A8A std y+18,R2
043C .dbline 285
043C ; BCD_ASCII(time[5],asc); //为第1行的星期赋值
043C 9E01 movw R18,R28
043E FB01 movw R30,R22
0440 0581 ldd R16,z+5
0442 9BDF xcall _BCD_ASCII
0444 .dbline 286
0444 ; line1[9]=asc[1];
0444 2980 ldd R2,y+1
0446 2C8A std y+20,R2
0448 .dbline 288
0448 ;
0448 ; LCD_write_string(0X82,"20"); //第1行从第3个位置开始显示,将07年显示为2007的形式
0448 20E0 ldi R18,<L91
044A 30E0 ldi R19,>L91
044C 02E8 ldi R16,130
044E 66DE xcall _LCD_write_string
0450 .dbline 290
0450 ;
0450 ; LCD_write_string(0X84,line1);
0450 9E01 movw R18,R28
0452 255F subi R18,245 ; offset = 11
0454 3F4F sbci R19,255
0456 04E8 ldi R16,132
0458 61DE xcall _LCD_write_string
045A .dbline 292
045A ;
045A ; LCD_write_string(0X80+0X44,line2); //第2行从第5个位置开始显示,/第2行显示
045A 9E01 movw R18,R28
045C 2E5F subi R18,254 ; offset = 2
045E 3F4F sbci R19,255
0460 04EC ldi R16,196
0462 5CDE xcall _LCD_write_string
0464 .dbline -2
0464 L72:
0464 6696 adiw R28,22
0466 0E940000 xcall pop_gset2
046A .dbline 0 ; func end
046A 0895 ret
046C .dbsym l line1 11 A[11:11]c
046C .dbsym l line2 2 A[9:9]c
046C .dbsym l asc 0 A[2:2]c
046C .dbsym r i 20 c
046C .dbsym r time 22 pc
046C .dbend
.area lit(rom, con, rel)
0014 L93:
0014 5059 .byte 'P,'Y
0016 2301 .byte 35,1
0018 0106 .byte 1,6
001A 07 .byte 7
001B L94:
001B 0000 .byte 0,0
001D 0000 .byte 0,0
001F 0000 .byte 0,0
0021 00 .byte 0
.area text(rom, con, rel)
046C .dbfile D:\单片机\ds1302\ds1302_end\ds1302.c
046C .dbfunc e main _main fV
046C ; dis_y -> <dead>
046C ; dis_x -> <dead>
046C ; shift -> <dead>
046C ; setdat -> <dead>
046C ; setadd -> <dead>
046C ; settime -> y+7
046C ; gettime -> y+0
.even
046C _main::
046C 2E97 sbiw R28,14
046E .dbline -1
046E .dbline 301
046E ; }
046E ; /*******************************************
046E ; 函数名称: main
046E ; 功 能: 1. 在1602液晶上显示当前时间 2.可以设置时间(M1-M9为数字0-9,M13为设置模式和显示模式选择,M14为当前设置位选择)
046E ; 参 数: 无
046E ; 返回值 : 无
046E ; /********************************************/
046E ; void main(void)
046E ; {
046E .dbline 308
046E ;
046E ; uchar setadd,setdat,shift; //setadd指定将当前数值送入DS1302的哪个寄存器
046E ; //setdat是当前设置的数值,即被送入DS1302指定寄存器的数
046E ; //shift来实现十位和各位的设置相互独立(因为十位和个位是在一个寄存器里的)
046E ;
046E ; uchar dis_x,dis_y; //存储1602液晶当前光标的位置
046E ; uchar settime[7]={0x50,0x59,0x23,0x01,0x01,0x06,0x07};//设置的秒,分,时,日,月,星期,年
046E 80E0 ldi R24,<L93
0470 90E0 ldi R25,>L93
0472 FE01 movw R30,R28
0474 3796 adiw R30,7
0476 07E0 ldi R16,7
0478 10E0 ldi R17,0
047A FA93 st -y,R31
047C EA93 st -y,R30
047E 9A93 st -y,R25
0480 8A93 st -y,R24
0482 0E940000 xcall asgncblk
0486 .dbline 309
0486 ; uchar gettime[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};//保存当前时间的数
0486 80E0 ldi R24,<L94
0488 90E0 ldi R25,>L94
048A FE01 movw R30,R28
048C 07E0 ldi R16,7
048E 10E0 ldi R17,0
0490 FA93 st -y,R31
0492 EA93 st -y,R30
0494 9A93 st -y,R25
0496 8A93 st -y,R24
0498 0E940000 xcall asgncblk
049C .dbline 311
049C ; //初始化液晶
049C ; DDRC=0xff;
049C 8FEF ldi R24,255
049E 84BB out 0x14,R24
04A0 .dbline 312
04A0 ; PORTC=0x00;
04A0 2224 clr R2
04A2 25BA out 0x15,R2
04A4 .dbline 313
04A4 ; LCD_init();
04A4 5FDE xcall _LCD_init
04A6 .dbline 315
04A6 ;
04A6 ; DS1302_portinit(); //初始化DS1302的三根数据线
04A6 AFDE xcall _DS1302_portinit
04A8 .dbline 316
04A8 ; DS1302_init(); //启动振荡器,DS1302开始工作
04A8 5EDF xcall _DS1302_init
04AA .dbline 317
04AA ; DS1302_setT(settime); //设置初始时间
04AA 8E01 movw R16,R28
04AC 095F subi R16,249 ; offset = 7
04AE 1F4F sbci R17,255
04B0 1DDF xcall _DS1302_setT
04B2 04C0 xjmp L96
04B4 L95:
04B4 .dbline 320
04B4 .dbline 321
04B4 8E01 movw R16,R28
04B6 3ADF xcall _DS1302_getT
04B8 .dbline 322
04B8 8E01 movw R16,R28
04BA 6ADF xcall _Disp_time
04BC .dbline 324
04BC L96:
04BC .dbline 319
04BC FBCF xjmp L95
04BE X1:
04BE .dbline -2
04BE L92:
04BE 2E96 adiw R28,14
04C0 .dbline 0 ; func end
04C0 0895 ret
04C2 .dbsym l dis_y 1 c
04C2 .dbsym l dis_x 1 c
04C2 .dbsym l shift 1 c
04C2 .dbsym l setdat 1 c
04C2 .dbsym l setadd 1 c
04C2 .dbsym l settime 7 A[7:7]c
04C2 .dbsym l gettime 0 A[7:7]c
04C2 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\单片机\ds1302\ds1302_end\ds1302.c
0000 _data_temp::
0000 .blkb 2
0002 .dbfile D:\单片机\ds1302\ds1302_end/1602B_LCD.C
0002 .dbsym e data_temp _data_temp i
.area data(ram, con, rel)
0000 .dbfile D:\单片机\ds1302\ds1302_end/1602B_LCD.C
0000 L91:
0000 .blkb 3
.area idata
0000 323000 .byte 50,48,0
.area data(ram, con, rel)
0003 .dbfile D:\单片机\ds1302\ds1302_end/1602B_LCD.C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -