📄 ds12997.lis
字号:
0146 ; void DS12887_Init(void)
0146 ; {
0146 .dbline 241
0146 ; DS12887_Write(0x0a, 0x20); //打开振荡器,启动DS12887
0146 20E2 ldi R18,32
0148 0AE0 ldi R16,10
014A 8FDF xcall _DS12887_Write
014C .dbline 242
014C ; DS12887_Write(0x0b, 0x86); //禁止更新,接下来初始化数据,即写入时间,日期等
014C 26E8 ldi R18,134
014E 0BE0 ldi R16,11
0150 8CDF xcall _DS12887_Write
0152 .dbline 243
0152 ; DS12887_Write(0x0b, 0x06); //正常更新,二进制格式,24进制小时
0152 26E0 ldi R18,6
0154 0BE0 ldi R16,11
0156 89DF xcall _DS12887_Write
0158 .dbline -2
0158 L27:
0158 .dbline 0 ; func end
0158 0895 ret
015A .dbend
015A .dbfunc e DS12887_SetTime _DS12887_SetTime fV
015A ; Value -> R22
015A ; Address -> R20
.even
015A _DS12887_SetTime::
015A 0E940000 xcall push_gset2
015E 622F mov R22,R18
0160 402F mov R20,R16
0162 .dbline -1
0162 .dbline 250
0162 ; }
0162 ;
0162 ;
0162 ;
0162 ; //设置时间函数
0162 ; void DS12887_SetTime( uchar Address, uchar Value)
0162 ; {
0162 .dbline 251
0162 ; DS12887_Write(0x0b, 0x86); //禁止更新,接下来初始化数据,即写入时间,日期等
0162 26E8 ldi R18,134
0164 0BE0 ldi R16,11
0166 81DF xcall _DS12887_Write
0168 .dbline 252
0168 ; DS12887_Write(Address,Value);
0168 262F mov R18,R22
016A 042F mov R16,R20
016C 7EDF xcall _DS12887_Write
016E .dbline 253
016E ; DS12887_Write(0x0b, 0x06); //正常更新,二进制格式,24进制小时
016E 26E0 ldi R18,6
0170 0BE0 ldi R16,11
0172 7BDF xcall _DS12887_Write
0174 .dbline -2
0174 L28:
0174 0E940000 xcall pop_gset2
0178 .dbline 0 ; func end
0178 0895 ret
017A .dbsym r Value 22 c
017A .dbsym r Address 20 c
017A .dbend
017A .dbfunc e DS12887_GetTime _DS12887_GetTime fV
017A .dbstruct 0 25 _SYSTEMTIME_
017A .dbfield 0 Second c
017A .dbfield 1 Minute c
017A .dbfield 2 Hour c
017A .dbfield 3 Week c
017A .dbfield 4 Day c
017A .dbfield 5 Month c
017A .dbfield 6 Year c
017A .dbfield 7 DateString A[9:9]c
017A .dbfield 16 TimeString A[9:9]c
017A .dbend
017A ; temp -> <dead>
017A ; Time -> R20,R21
.even
017A _DS12887_GetTime::
017A 0E940000 xcall push_gset1
017E A801 movw R20,R16
0180 .dbline -1
0180 .dbline 259
0180 ; }
0180 ;
0180 ;
0180 ; //读出时间
0180 ; void DS12887_GetTime(SYSTEMTIME *Time)
0180 ; { uchar temp;
0180 .dbline 260
0180 ; Time->Second = DS12887_Read(DS12887_Second);
0180 0027 clr R16
0182 A4DF xcall _DS12887_Read
0184 FA01 movw R30,R20
0186 0083 std z+0,R16
0188 .dbline 261
0188 ; Time->Minute = DS12887_Read(DS12887_Minute);
0188 02E0 ldi R16,2
018A A0DF xcall _DS12887_Read
018C FA01 movw R30,R20
018E 0183 std z+1,R16
0190 .dbline 262
0190 ; Time->Hour = DS12887_Read(DS12887_Hour );
0190 04E0 ldi R16,4
0192 9CDF xcall _DS12887_Read
0194 FA01 movw R30,R20
0196 0283 std z+2,R16
0198 .dbline 263
0198 ; Time->Day = DS12887_Read(DS12887_Day );
0198 07E0 ldi R16,7
019A 98DF xcall _DS12887_Read
019C FA01 movw R30,R20
019E 0483 std z+4,R16
01A0 .dbline 265
01A0 ; //Time->Week = DS12887_Read(DS12887_Week );
01A0 ; Time->Month = DS12887_Read(DS12887_Month );
01A0 08E0 ldi R16,8
01A2 94DF xcall _DS12887_Read
01A4 FA01 movw R30,R20
01A6 0583 std z+5,R16
01A8 .dbline 266
01A8 ; Time->Year = DS12887_Read(DS12887_Year );
01A8 09E0 ldi R16,9
01AA 90DF xcall _DS12887_Read
01AC FA01 movw R30,R20
01AE 0683 std z+6,R16
01B0 .dbline 268
01B0 ;
01B0 ; y1=DS12887_Read(DS12887_Second);
01B0 0027 clr R16
01B2 8CDF xcall _DS12887_Read
01B4 00930500 sts _y1,R16
01B8 .dbline 269
01B8 ; y2=DS12887_Read(DS12887_Minute);
01B8 02E0 ldi R16,2
01BA 88DF xcall _DS12887_Read
01BC 00930400 sts _y2,R16
01C0 .dbline 270
01C0 ; y3=DS12887_Read(DS12887_Hour );
01C0 04E0 ldi R16,4
01C2 84DF xcall _DS12887_Read
01C4 00930300 sts _y3,R16
01C8 .dbline 271
01C8 ; y4=DS12887_Read(DS12887_Day );
01C8 07E0 ldi R16,7
01CA 80DF xcall _DS12887_Read
01CC 00930200 sts _y4,R16
01D0 .dbline 272
01D0 ; y5=DS12887_Read(DS12887_Month );
01D0 08E0 ldi R16,8
01D2 7CDF xcall _DS12887_Read
01D4 00930100 sts _y5,R16
01D8 .dbline 273
01D8 ; y6=DS12887_Read(DS12887_Year );
01D8 09E0 ldi R16,9
01DA 78DF xcall _DS12887_Read
01DC 00930000 sts _y6,R16
01E0 .dbline -2
01E0 L29:
01E0 0E940000 xcall pop_gset1
01E4 .dbline 0 ; func end
01E4 0895 ret
01E6 .dbsym l temp 1 c
01E6 .dbsym r Time 20 pS[_SYSTEMTIME_]
01E6 .dbend
01E6 .dbfunc e port_init _port_init fV
.even
01E6 _port_init::
01E6 .dbline -1
01E6 .dbline 278
01E6 ; }
01E6 ;
01E6 ; /*****************端口初始化********************************/
01E6 ; void port_init(void)
01E6 ; {
01E6 .dbline 279
01E6 ; DDRB = 0xFF;
01E6 8FEF ldi R24,255
01E8 87BB out 0x17,R24
01EA .dbline 280
01EA ; PORTB = 0xFF; //设为输出高电平
01EA 88BB out 0x18,R24
01EC .dbline 282
01EC ;
01EC ; DDRA = 0x00;
01EC 2224 clr R2
01EE 2ABA out 0x1a,R2
01F0 .dbline 283
01F0 ; PORTA = 0x00; //设为高阻态
01F0 2BBA out 0x1b,R2
01F2 .dbline -2
01F2 L30:
01F2 .dbline 0 ; func end
01F2 0895 ret
01F4 .dbend
01F4 .dbfunc e init_devices _init_devices fV
.even
01F4 _init_devices::
01F4 .dbline -1
01F4 .dbline 288
01F4 ;
01F4 ; }
01F4 ; /********************初始化器件************************************/
01F4 ; void init_devices(void)
01F4 ; {
01F4 .dbline 289
01F4 ; port_init();
01F4 F8DF xcall _port_init
01F6 .dbline -2
01F6 L31:
01F6 .dbline 0 ; func end
01F6 0895 ret
01F8 .dbend
01F8 .dbfunc e main _main fV
01F8 ; CurrentTime -> y+0
.even
01F8 _main::
01F8 6997 sbiw R28,25
01FA .dbline -1
01FA .dbline 296
01FA ; }
01FA ;
01FA ;
01FA ;
01FA ; /***************主函数*****************************/
01FA ; void main(void)
01FA ; {
01FA .dbline 298
01FA ; SYSTEMTIME CurrentTime;
01FA ; init_devices();
01FA FCDF xcall _init_devices
01FC .dbline 300
01FC ;
01FC ; DS12887_Init();
01FC A4DF xcall _DS12887_Init
01FE .dbline 301
01FE ; DS12887_GetTime(&CurrentTime);
01FE 8E01 movw R16,R28
0200 BCDF xcall _DS12887_GetTime
0202 .dbline 304
0202 ; /*************时间初始化设置 ,2009-2-16 2:00:00************/
0202 ; //*
0202 ; DS12887_SetTime(DS12887_Second, 0); //设置秒
0202 2227 clr R18
0204 0027 clr R16
0206 A9DF xcall _DS12887_SetTime
0208 .dbline 305
0208 ; DS12887_SetTime(DS12887_Minute, 34); //设置分
0208 22E2 ldi R18,34
020A 02E0 ldi R16,2
020C A6DF xcall _DS12887_SetTime
020E .dbline 306
020E ; DS12887_SetTime(DS12887_Hour,16); //设置时
020E 20E1 ldi R18,16
0210 04E0 ldi R16,4
0212 A3DF xcall _DS12887_SetTime
0214 .dbline 307
0214 ; DS12887_SetTime(DS12887_Day, 4); //设置天
0214 24E0 ldi R18,4
0216 07E0 ldi R16,7
0218 A0DF xcall _DS12887_SetTime
021A .dbline 308
021A ; DS12887_SetTime(DS12887_Month, 3); //设置月
021A 23E0 ldi R18,3
021C 08E0 ldi R16,8
021E 9DDF xcall _DS12887_SetTime
0220 .dbline 309
0220 ; DS12887_SetTime(DS12887_Year, 9); //设置年
0220 29E0 ldi R18,9
0222 09E0 ldi R16,9
0224 9ADF xcall _DS12887_SetTime
0226 02C0 xjmp L34
0228 L33:
0228 .dbline 313
0228 .dbline 314
0228 8E01 movw R16,R28
022A A7DF xcall _DS12887_GetTime
022C .dbline 317
022C L34:
022C .dbline 312
022C FDCF xjmp L33
022E X1:
022E .dbline -2
022E L32:
022E 6996 adiw R28,25
0230 .dbline 0 ; func end
0230 0895 ret
0232 .dbsym l CurrentTime 0 S[_SYSTEMTIME_]
0232 .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\ds12997.c
0000 _y6::
0000 .blkb 1
0001 .dbsym e y6 _y6 c
0001 _y5::
0001 .blkb 1
0002 .dbsym e y5 _y5 c
0002 _y4::
0002 .blkb 1
0003 .dbsym e y4 _y4 c
0003 _y3::
0003 .blkb 1
0004 .dbsym e y3 _y3 c
0004 _y2::
0004 .blkb 1
0005 .dbsym e y2 _y2 c
0005 _y1::
0005 .blkb 1
0006 .dbsym e y1 _y1 c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -