📄 ds1302.lst
字号:
01AF 24AA CLR R10
01B0 94A3 INC R10
01B1 C016 RJMP 0x01C8
(0271) { dm[4-i]=m%10;
01B2 E014 LDI R17,4
01B3 191A SUB R17,R10
01B4 E002 LDI R16,2
01B5 0201 MULS R16,R17
01B6 01F0 MOVW R30,R0
01B7 01CE MOVW R24,R28
01B8 0FE8 ADD R30,R24
01B9 1FF9 ADC R31,R25
01BA E02A LDI R18,0xA
01BB E030 LDI R19,0
01BC 2F06 MOV R16,R22
01BD 2711 CLR R17
01BE 940E0222 CALL mod16s
01C0 8311 STD Z+1,R17
01C1 8300 STD Z+0,R16
(0272) m=m/10;
01C2 E01A LDI R17,0xA
01C3 2F06 MOV R16,R22
01C4 940E025E CALL div8u
01C6 2F60 MOV R22,R16
01C7 94A3 INC R10
01C8 2D8A MOV R24,R10
01C9 3083 CPI R24,3
01CA F338 BCS 0x01B2
(0273) }
(0274) for(i=3;i<5;i++)
01CB E083 LDI R24,3
01CC 2EA8 MOV R10,R24
01CD C016 RJMP 0x01E4
(0275) { dm[4-i]=n%10;
01CE E014 LDI R17,4
01CF 191A SUB R17,R10
01D0 E002 LDI R16,2
01D1 0201 MULS R16,R17
01D2 01F0 MOVW R30,R0
01D3 01CE MOVW R24,R28
01D4 0FE8 ADD R30,R24
01D5 1FF9 ADC R31,R25
01D6 E02A LDI R18,0xA
01D7 E030 LDI R19,0
01D8 2F04 MOV R16,R20
01D9 2711 CLR R17
01DA 940E0222 CALL mod16s
01DC 8311 STD Z+1,R17
01DD 8300 STD Z+0,R16
(0276) n=n/10;
01DE E01A LDI R17,0xA
01DF 2F04 MOV R16,R20
01E0 940E025E CALL div8u
01E2 2F40 MOV R20,R16
01E3 94A3 INC R10
01E4 2D8A MOV R24,R10
01E5 3085 CPI R24,5
01E6 F338 BCS 0x01CE
(0277) }
(0278) for(i=0;i<4;i++)
01E7 24AA CLR R10
01E8 C00C RJMP 0x01F5
(0279) { show(dm[i],i);
01E9 2D2A MOV R18,R10
01EA E082 LDI R24,2
01EB 9D8A MUL R24,R10
01EC 01F0 MOVW R30,R0
01ED 01CE MOVW R24,R28
01EE 0FE8 ADD R30,R24
01EF 1FF9 ADC R31,R25
01F0 8100 LDD R16,Z+0
01F1 DE81 RCALL _show
(0280)
(0281) PORTD=0XFF;
01F2 EF8F LDI R24,0xFF
01F3 BB82 OUT 0x12,R24
01F4 94A3 INC R10
01F5 2D8A MOV R24,R10
01F6 3084 CPI R24,4
01F7 F388 BCS 0x01E9
01F8 9628 ADIW R28,0x8
01F9 940E0287 CALL pop_gset3
01FB 9508 RET
_main:
shift --> Y+1
setdat --> Y+1
setadd --> Y+1
settime --> Y+2
gettime --> Y+0
01FC 9724 SBIW R28,4
(0282) }
(0283)
(0284)
(0285)
(0286) }
(0287) /*******************************************
(0288) 函数名称: main
(0289) 功 能: 1. 在1602液晶上显示当前时间 2.可以设置时间(M1-M9为数字0-9,M13为设置模式和显示模式选择,M14为当前设置位选择)
(0290) 参 数: 无
(0291) 返回值 : 无
(0292) /********************************************/
(0293) void main(void)
(0294) {
(0295)
(0296)
(0297) uchar setadd,setdat,shift; //setadd指定将当前数值送入DS1302的哪个寄存器
(0298) //setdat是当前设置的数值,即被送入DS1302指定寄存器的数
(0299) //shift来实现十位和各位的设置相互独立(因为十位和个位是在一个寄存器里的)
(0300) //uchar dis_x,dis_y; //存储1602液晶当前光标的位置
(0301) uchar settime[2]={0X59,0X50};//设置的秒,分,时,日,月,星期,年
01FD E784 LDI R24,0x74
01FE E090 LDI R25,0
01FF 01FE MOVW R30,R28
0200 9632 ADIW R30,2
0201 E002 LDI R16,2
0202 E010 LDI R17,0
0203 93FA ST R31,-Y
0204 93EA ST R30,-Y
0205 939A ST R25,-Y
0206 938A ST R24,-Y
0207 940E02AF CALL asgncblk
(0302) uchar gettime[2]={0X00,0X00};//保存当前时间的数组
0209 E786 LDI R24,0x76
020A E090 LDI R25,0
020B 01FE MOVW R30,R28
020C E002 LDI R16,2
020D E010 LDI R17,0
020E 93FA ST R31,-Y
020F 93EA ST R30,-Y
0210 939A ST R25,-Y
0211 938A ST R24,-Y
0212 940E02AF CALL asgncblk
(0303) //LCD1602_initial(); //初始化1602液晶
(0304) DS1302_portinit(); //初始化DS1302的三根数据线
0214 DEAF RCALL _DS1302_portinit
(0305) DS1302_init(); //启动振荡器,DS1302开始工作
0215 DF7D RCALL _DS1302_init
(0306) DS1302_setT(settime); //设置初始时间
0216 018E MOVW R16,R28
0217 5F0E SUBI R16,0xFE
0218 4F1F SBCI R17,0xFF
0219 DF28 RCALL _DS1302_setT
021A C004 RJMP 0x021F
(0307)
(0308) //以下程序完成显示和设置时间
(0309) while(1)
(0310) {
(0311) DS1302_getT(gettime); //获得当前时间
021B 018E MOVW R16,R28
021C DF45 RCALL _DS1302_getT
(0312)
(0313) Disp_time(gettime); //显示当前时间
FILE: <library>
021D 018E MOVW R16,R28
021E DF89 RCALL _Disp_time
021F CFFB RJMP 0x021B
0220 9624 ADIW R28,4
0221 9508 RET
mod16s:
0222 9468 BSET 6
0223 92DA ST R13,-Y
0224 2ED1 MOV R13,R17
0225 C004 RJMP 0x022A
div16s:
0226 94E8 BCLR 6
0227 92DA ST R13,-Y
0228 2ED1 MOV R13,R17
0229 26D3 EOR R13,R19
022A FF17 SBRS R17,7
022B C004 RJMP 0x0230
022C 9510 COM R17
022D 9500 COM R16
022E 5F0F SUBI R16,0xFF
022F 4F1F SBCI R17,0xFF
0230 FF37 SBRS R19,7
0231 C004 RJMP 0x0236
0232 9530 COM R19
0233 9520 COM R18
0234 5F2F SUBI R18,0xFF
0235 4F3F SBCI R19,0xFF
0236 940E0243 CALL xdiv16u
0238 FED7 SBRS R13,7
0239 C004 RJMP 0x023E
023A 9510 COM R17
023B 9500 COM R16
023C 5F0F SUBI R16,0xFF
023D 4F1F SBCI R17,0xFF
023E 90D9 LD R13,Y+
023F 9508 RET
mod16u:
0240 9468 BSET 6
0241 C001 RJMP xdiv16u
div16u:
0242 94E8 BCLR 6
xdiv16u:
0243 92EA ST R14,-Y
0244 92FA ST R15,-Y
0245 938A ST R24,-Y
0246 24EE CLR R14
0247 24FF CLR R15
0248 E180 LDI R24,0x10
0249 0F00 LSL R16
024A 1F11 ROL R17
024B 1CEE ROL R14
024C 1CFF ROL R15
024D 16E2 CP R14,R18
024E 06F3 CPC R15,R19
024F F018 BCS 0x0253
0250 1AE2 SUB R14,R18
0251 0AF3 SBC R15,R19
0252 9503 INC R16
0253 958A DEC R24
0254 F7A1 BNE 0x0249
0255 F416 BRTC 0x0258
0256 2D0E MOV R16,R14
0257 2D1F MOV R17,R15
0258 9189 LD R24,Y+
0259 90F9 LD R15,Y+
025A 90E9 LD R14,Y+
025B 9508 RET
mod8u:
025C 9468 BSET 6
025D C001 RJMP xdiv8u
div8u:
025E 94E8 BCLR 6
xdiv8u:
025F 932A ST R18,-Y
0260 92FA ST R15,-Y
0261 92EA ST R14,-Y
0262 24FF CLR R15
0263 24EE CLR R14
0264 E120 LDI R18,0x10
0265 0F00 LSL R16
0266 1CFF ROL R15
0267 1CEE ROL R14
0268 16E1 CP R14,R17
0269 F010 BCS 0x026C
026A 1AE1 SUB R14,R17
026B 9503 INC R16
026C 952A DEC R18
026D F7B9 BNE 0x0265
026E F40E BRTC 0x0270
026F 2D0E MOV R16,R14
0270 90E9 LD R14,Y+
0271 90F9 LD R15,Y+
0272 9129 LD R18,Y+
0273 9508 RET
empy16s:
0274 920A ST R0,-Y
0275 921A ST R1,-Y
0276 938A ST R24,-Y
0277 939A ST R25,-Y
0278 9F02 MUL R16,R18
0279 01C0 MOVW R24,R0
027A 9F12 MUL R17,R18
027B 0D90 ADD R25,R0
027C 9F03 MUL R16,R19
027D 0D90 ADD R25,R0
027E 018C MOVW R16,R24
027F 9199 LD R25,Y+
0280 9189 LD R24,Y+
0281 9019 LD R1,Y+
0282 9009 LD R0,Y+
0283 9508 RET
pop_gset2:
0284 E0E2 LDI R30,2
0285 940C0296 JMP pop
pop_gset3:
0287 E0E4 LDI R30,4
0288 940C0296 JMP pop
push_gset5:
028A 92FA ST R15,-Y
028B 92EA ST R14,-Y
push_gset4:
028C 92DA ST R13,-Y
028D 92CA ST R12,-Y
push_gset3:
028E 92BA ST R11,-Y
028F 92AA ST R10,-Y
push_gset2:
0290 937A ST R23,-Y
0291 936A ST R22,-Y
push_gset1:
0292 935A ST R21,-Y
0293 934A ST R20,-Y
0294 9508 RET
pop_gset1:
0295 E0E1 LDI R30,1
pop:
0296 9149 LD R20,Y+
0297 9159 LD R21,Y+
0298 FDE0 SBRC R30,0
0299 9508 RET
029A 9169 LD R22,Y+
029B 9179 LD R23,Y+
029C FDE1 SBRC R30,1
029D 9508 RET
029E 90A9 LD R10,Y+
029F 90B9 LD R11,Y+
02A0 FDE2 SBRC R30,2
02A1 9508 RET
02A2 90C9 LD R12,Y+
02A3 90D9 LD R13,Y+
02A4 FDE3 SBRC R30,3
02A5 9508 RET
02A6 90E9 LD R14,Y+
02A7 90F9 LD R15,Y+
02A8 9508 RET
lsl8:
02A9 2311 TST R17
02AA F019 BEQ 0x02AE
02AB 0F00 LSL R16
02AC 951A DEC R17
02AD CFFB RJMP lsl8
02AE 9508 RET
asgncblk:
02AF 93AA ST R26,-Y
02B0 93BA ST R27,-Y
02B1 93EA ST R30,-Y
02B2 93FA ST R31,-Y
02B3 920A ST R0,-Y
02B4 81AF LDD R26,Y+7
02B5 85B8 LDD R27,Y+8
02B6 81ED LDD R30,Y+5
02B7 81FE LDD R31,Y+6
02B8 3000 CPI R16,0
02B9 0701 CPC R16,R17
02BA F031 BEQ 0x02C1
02BB 95C8 LPM
02BC 920D ST R0,X+
02BD 9631 ADIW R30,1
02BE 5001 SUBI R16,1
02BF 4010 SBCI R17,0
02C0 CFF7 RJMP 0x02B8
02C1 9009 LD R0,Y+
02C2 91F9 LD R31,Y+
02C3 91E9 LD R30,Y+
02C4 91B9 LD R27,Y+
02C5 91A9 LD R26,Y+
02C6 9624 ADIW R28,4
02C7 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -