📄 ds12887.lst
字号:
01A5 8387 STD Z+7,R24
(0349) Time->DateString[1] = Time->Year%10 + '0';
01A6 E01A LDI R17,0xA
01A7 01FA MOVW R30,R20
01A8 8106 LDD R16,Z+6
01A9 940E0286 CALL mod8u
01AB 2F80 MOV R24,R16
01AC 5D80 SUBI R24,0xD0
01AD 01FA MOVW R30,R20
01AE 8780 STD Z+8,R24
(0350) Time->DateString[2] = '-';
01AF E28D LDI R24,0x2D
01B0 01FA MOVW R30,R20
01B1 8781 STD Z+9,R24
(0351) Time->DateString[3] = Time->Month/10 + '0';
01B2 E01A LDI R17,0xA
01B3 01FA MOVW R30,R20
01B4 8105 LDD R16,Z+5
01B5 940E0288 CALL div8u
01B7 2F80 MOV R24,R16
01B8 5D80 SUBI R24,0xD0
01B9 01FA MOVW R30,R20
01BA 8782 STD Z+10,R24
(0352) Time->DateString[4] = Time->Month%10 + '0';
01BB E01A LDI R17,0xA
01BC 01FA MOVW R30,R20
01BD 8105 LDD R16,Z+5
01BE 940E0286 CALL mod8u
01C0 2F80 MOV R24,R16
01C1 5D80 SUBI R24,0xD0
01C2 01FA MOVW R30,R20
01C3 8783 STD Z+11,R24
(0353) Time->DateString[5] = '-';
01C4 E28D LDI R24,0x2D
01C5 01FA MOVW R30,R20
01C6 8784 STD Z+12,R24
(0354) Time->DateString[6] = Time->Day/10 + '0';
01C7 E01A LDI R17,0xA
01C8 01FA MOVW R30,R20
01C9 8104 LDD R16,Z+4
01CA 940E0288 CALL div8u
01CC 2F80 MOV R24,R16
01CD 5D80 SUBI R24,0xD0
01CE 01FA MOVW R30,R20
01CF 8785 STD Z+13,R24
(0355) Time->DateString[7] = Time->Day%10 + '0';
01D0 E01A LDI R17,0xA
01D1 01FA MOVW R30,R20
01D2 8104 LDD R16,Z+4
01D3 940E0286 CALL mod8u
01D5 2F80 MOV R24,R16
01D6 5D80 SUBI R24,0xD0
01D7 01FA MOVW R30,R20
01D8 8786 STD Z+14,R24
(0356) Time->DateString[8] = '\0';
01D9 2422 CLR R2
01DA 01FA MOVW R30,R20
01DB 8627 STD Z+15,R2
(0357)
(0358) y[0]=Time->DateString[0];
01DC 01FA MOVW R30,R20
01DD 8027 LDD R2,Z+7
01DE 92200060 STS y,R2
(0359) y[1]=Time->DateString[1]; //年
01E0 01FA MOVW R30,R20
01E1 8420 LDD R2,Z+8
01E2 92200061 STS y+1,R2
(0360)
(0361) y[3]=Time->DateString[3];
01E4 01FA MOVW R30,R20
01E5 8422 LDD R2,Z+10
01E6 92200063 STS y+3,R2
(0362) y[4]=Time->DateString[4]; //月
01E8 01FA MOVW R30,R20
01E9 8423 LDD R2,Z+11
01EA 92200064 STS 0x64,R2
(0363)
(0364) y[6]=Time->DateString[6];
01EC 01FA MOVW R30,R20
01ED 8425 LDD R2,Z+13
01EE 92200066 STS 0x66,R2
(0365) y[7]=Time->DateString[7]; //日
01F0 01FA MOVW R30,R20
01F1 8426 LDD R2,Z+14
01F2 92200067 STS 0x67,R2
01F4 940E02AC CALL pop_gset1
01F6 9508 RET
_TimeToStr:
Time --> R20
01F7 940E02A9 CALL push_gset1
01F9 01A8 MOVW R20,R16
(0366)
(0367) }
(0368)
(0369)
(0370) /*********************时间转化成字符***********************************/
(0371) void TimeToStr(SYSTEMTIME *Time)
(0372) {
(0373) Time->TimeString[0] = Time->Hour/10 + '0';
01FA E01A LDI R17,0xA
01FB 01FA MOVW R30,R20
01FC 8102 LDD R16,Z+2
01FD 940E0288 CALL div8u
01FF 2F80 MOV R24,R16
0200 5D80 SUBI R24,0xD0
0201 01FA MOVW R30,R20
0202 8B80 STD Z+16,R24
(0374) Time->TimeString[1] = Time->Hour%10 + '0';
0203 E01A LDI R17,0xA
0204 01FA MOVW R30,R20
0205 8102 LDD R16,Z+2
0206 940E0286 CALL mod8u
0208 2F80 MOV R24,R16
0209 5D80 SUBI R24,0xD0
020A 01FA MOVW R30,R20
020B 8B81 STD Z+17,R24
(0375) Time->TimeString[2] = ':';
020C E38A LDI R24,0x3A
020D 01FA MOVW R30,R20
020E 8B82 STD Z+18,R24
(0376) Time->TimeString[3] = Time->Minute/10 + '0';
020F E01A LDI R17,0xA
0210 01FA MOVW R30,R20
0211 8101 LDD R16,Z+1
0212 940E0288 CALL div8u
0214 2F80 MOV R24,R16
0215 5D80 SUBI R24,0xD0
0216 01FA MOVW R30,R20
0217 8B83 STD Z+19,R24
(0377) Time->TimeString[4] = Time->Minute%10 + '0';
0218 E01A LDI R17,0xA
0219 01FA MOVW R30,R20
021A 8101 LDD R16,Z+1
021B 940E0286 CALL mod8u
021D 2F80 MOV R24,R16
021E 5D80 SUBI R24,0xD0
021F 01FA MOVW R30,R20
0220 8B84 STD Z+20,R24
(0378) Time->TimeString[5] = ':';
0221 E38A LDI R24,0x3A
0222 01FA MOVW R30,R20
0223 8B85 STD Z+21,R24
(0379) Time->TimeString[6] = Time->Second/10 + '0';
0224 E01A LDI R17,0xA
0225 01FA MOVW R30,R20
0226 8100 LDD R16,Z+0
0227 940E0288 CALL div8u
0229 2F80 MOV R24,R16
022A 5D80 SUBI R24,0xD0
022B 01FA MOVW R30,R20
022C 8B86 STD Z+22,R24
(0380) Time->TimeString[7] = Time->Second%10 + '0';
022D E01A LDI R17,0xA
022E 01FA MOVW R30,R20
022F 8100 LDD R16,Z+0
0230 940E0286 CALL mod8u
0232 2F80 MOV R24,R16
0233 5D80 SUBI R24,0xD0
0234 01FA MOVW R30,R20
0235 8B87 STD Z+23,R24
(0381) Time->TimeString[8] = '\0';
0236 2422 CLR R2
0237 01FA MOVW R30,R20
0238 8E20 STD Z+24,R2
(0382)
(0383) y[9]=Time->TimeString[0];
0239 01FA MOVW R30,R20
023A 8820 LDD R2,Z+16
023B 92200069 STS 0x69,R2
(0384) y[10]=Time->TimeString[1]; //时
023D 01FA MOVW R30,R20
023E 8821 LDD R2,Z+17
023F 9220006A STS 0x6A,R2
(0385)
(0386) y[12]=Time->TimeString[3];
0241 01FA MOVW R30,R20
0242 8823 LDD R2,Z+19
0243 9220006C STS 0x6C,R2
(0387) y[13]=Time->TimeString[4]; //分
0245 01FA MOVW R30,R20
0246 8824 LDD R2,Z+20
0247 9220006D STS 0x6D,R2
(0388)
(0389) y[15]=Time->TimeString[6];
0249 01FA MOVW R30,R20
024A 8826 LDD R2,Z+22
024B 9220006F STS 0x6F,R2
(0390) y[16]=Time->TimeString[7]; //秒
024D 01FA MOVW R30,R20
024E 8827 LDD R2,Z+23
024F 92200070 STS 0x70,R2
0251 940E02AC CALL pop_gset1
0253 9508 RET
(0391)
(0392) }
(0393)
(0394)
(0395) /********************初始化器件************************************/
(0396) void init_devices(void)
(0397) {
(0398) port_init();
_init_devices:
0254 DE1E RCALL _port_init
(0399) usart_init();
0255 DE11 RCALL _usart_init
0256 9508 RET
_main:
temp --> R20
CurrentTime --> Y+0
0257 9769 SBIW R28,0x19
(0400) }
(0401) /***************主函数*****************************/
(0402) void main(void)
(0403) {
(0404) SYSTEMTIME CurrentTime;
(0405) uchar temp;
(0406) init_devices();
0258 DFFB RCALL _init_devices
(0407) DS12887_Init(); //只读时间的时候可以屏蔽该句
0259 DEF0 RCALL _DS12887_Init
(0408) DS12887_GetTime(&CurrentTime);
025A 018E MOVW R16,R28
025B DF08 RCALL _DS12887_GetTime
(0409) /*************时间初始化设置 ,2009-3-4 16:57:00************/
(0410) //时钟调准后屏蔽该段程序
(0411) //*
(0412) DS12887_SetTime(DS12887_Second, 0); //设置秒
025C 2722 CLR R18
025D 2700 CLR R16
025E DEF5 RCALL _DS12887_SetTime
(0413) DS12887_SetTime(DS12887_Minute, 57); //设置分
025F E329 LDI R18,0x39
0260 E002 LDI R16,2
0261 DEF2 RCALL _DS12887_SetTime
(0414) DS12887_SetTime(DS12887_Hour,16); //设置时
0262 E120 LDI R18,0x10
0263 E004 LDI R16,4
0264 DEEF RCALL _DS12887_SetTime
(0415) DS12887_SetTime(DS12887_Day, 4); //设置天
0265 E024 LDI R18,4
0266 E007 LDI R16,7
0267 DEEC RCALL _DS12887_SetTime
(0416) DS12887_SetTime(DS12887_Month, 3); //设置月
0268 E023 LDI R18,3
0269 E008 LDI R16,0x8
026A DEE9 RCALL _DS12887_SetTime
(0417) DS12887_SetTime(DS12887_Year, 9); //设置年
026B E029 LDI R18,0x9
026C E009 LDI R16,0x9
026D DEE6 RCALL _DS12887_SetTime
(0418) //*/
(0419) usart_str_send("DS12887工作中.......");
026E E803 LDI R16,0x83
026F E010 LDI R17,0
0270 DE10 RCALL _usart_str_send
0271 C011 RJMP 0x0283
(0420) while(1)
(0421) {
(0422) DS12887_GetTime(&CurrentTime);
0272 018E MOVW R16,R28
0273 DEF0 RCALL _DS12887_GetTime
(0423) DateToStr(&CurrentTime);
0274 018E MOVW R16,R28
0275 DF24 RCALL _DateToStr
(0424) TimeToStr(&CurrentTime);
0276 018E MOVW R16,R28
0277 DF7F RCALL _TimeToStr
(0425) temp=usart_char_receive();
0278 DE2A RCALL _usart_char_receive
0279 2F40 MOV R20,R16
(0426) if(temp=='0') //字符0----数据传送启动指令
027A 3300 CPI R16,0x30
027B F419 BNE 0x027F
(0427) usart_str_send("现在时间是:");
027C E706 LDI R16,0x76
027D E010 LDI R17,0
027E DE02 RCALL _usart_str_send
(0428) usart_send_arry();//传送时间数据
027F DE11 RCALL _usart_send_arry
(0429) usart_str_send(" ");
FILE: <library>
0280 E703 LDI R16,0x73
0281 E010 LDI R17,0
0282 DDFE RCALL _usart_str_send
0283 CFEE RJMP 0x0272
0284 9669 ADIW R28,0x19
0285 9508 RET
mod8u:
0286 9468 BSET 6
0287 C001 RJMP xdiv8u
div8u:
0288 94E8 BCLR 6
xdiv8u:
0289 932A ST R18,-Y
028A 92FA ST R15,-Y
028B 92EA ST R14,-Y
028C 24FF CLR R15
028D 24EE CLR R14
028E E120 LDI R18,0x10
028F 0F00 LSL R16
0290 1CFF ROL R15
0291 1CEE ROL R14
0292 16E1 CP R14,R17
0293 F010 BCS 0x0296
0294 1AE1 SUB R14,R17
0295 9503 INC R16
0296 952A DEC R18
0297 F7B9 BNE 0x028F
0298 F40E BRTC 0x029A
0299 2D0E MOV R16,R14
029A 90E9 LD R14,Y+
029B 90F9 LD R15,Y+
029C 9129 LD R18,Y+
029D 9508 RET
pop_gset2:
029E E0E2 LDI R30,2
029F 940C02AD JMP pop
push_gset5:
02A1 92FA ST R15,-Y
02A2 92EA ST R14,-Y
push_gset4:
02A3 92DA ST R13,-Y
02A4 92CA ST R12,-Y
push_gset3:
02A5 92BA ST R11,-Y
02A6 92AA ST R10,-Y
push_gset2:
02A7 937A ST R23,-Y
02A8 936A ST R22,-Y
push_gset1:
02A9 935A ST R21,-Y
02AA 934A ST R20,-Y
02AB 9508 RET
pop_gset1:
02AC E0E1 LDI R30,1
pop:
02AD 9149 LD R20,Y+
02AE 9159 LD R21,Y+
02AF FDE0 SBRC R30,0
02B0 9508 RET
02B1 9169 LD R22,Y+
02B2 9179 LD R23,Y+
02B3 FDE1 SBRC R30,1
02B4 9508 RET
02B5 90A9 LD R10,Y+
02B6 90B9 LD R11,Y+
02B7 FDE2 SBRC R30,2
02B8 9508 RET
02B9 90C9 LD R12,Y+
02BA 90D9 LD R13,Y+
02BB FDE3 SBRC R30,3
02BC 9508 RET
02BD 90E9 LD R14,Y+
02BE 90F9 LD R15,Y+
02BF 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -