📄 1602_duoji.lst
字号:
0359 F3E8 BCS 0x0357
035A 940E044F CALL pop_gset1
035C 9508 RET
_write_data:
temp --> R20
i --> R22
data --> R10
addr --> R22
035D 940E0448 CALL push_gset3
035F 2EA2 MOV R10,R18
0360 2F60 MOV R22,R16
(0012) ;
(0013) }
(0014) /****************************************************
(0015) 写一个字节
(0016) ****************************************************/
(0017) void write_data(uchar addr,uchar data)
(0018) {
(0019) unsigned char i,temp;
(0020) T_DDR|=T_IO;
0361 9AD1 SBI 0x1A,1
(0021) T_PORT&=~T_RST;
0362 98D8 CBI 0x1B,0
(0022) T_PORT&=~T_CLK;
0363 98DA CBI 0x1B,2
(0023) asm("nop");
0364 0000 NOP
(0024) asm("nop");
0365 0000 NOP
(0025) asm("nop");
0366 0000 NOP
(0026) asm("nop");
0367 0000 NOP
(0027) T_PORT|=T_RST; //时钟信号低时拉高RST初始化
0368 9AD8 SBI 0x1B,0
(0028) temp=addr;
0369 2F46 MOV R20,R22
(0029) for(i=0;i<8;i++)
036A 2766 CLR R22
036B C010 RJMP 0x037C
(0030) {
(0031) if(temp&(1<<i))
036C E001 LDI R16,1
036D 2F16 MOV R17,R22
036E 940E0463 CALL lsl8
0370 2E24 MOV R2,R20
0371 2220 AND R2,R16
0372 F011 BEQ 0x0375
(0032) T_PORT |=T_IO ;
0373 9AD9 SBI 0x1B,1
0374 C001 RJMP 0x0376
(0033) else
(0034) T_PORT &=~T_IO ;
0375 98D9 CBI 0x1B,1
(0035) asm("nop");
0376 0000 NOP
(0036) asm("nop");
0377 0000 NOP
(0037) T_PORT |=T_CLK; //时钟上升沿写入数据
0378 9ADA SBI 0x1B,2
(0038) asm("nop");
0379 0000 NOP
(0039) T_PORT &=~T_CLK; //时钟拉低电平
037A 98DA CBI 0x1B,2
037B 9563 INC R22
037C 3068 CPI R22,0x8
037D F370 BCS 0x036C
(0040) }
(0041) temp=data;
037E 2D4A MOV R20,R10
(0042) for(i=0;i<8;i++)
037F 2766 CLR R22
0380 C010 RJMP 0x0391
(0043) {
(0044) if(temp&(1<<i))
0381 E001 LDI R16,1
0382 2F16 MOV R17,R22
0383 940E0463 CALL lsl8
0385 2E24 MOV R2,R20
0386 2220 AND R2,R16
0387 F011 BEQ 0x038A
(0045) T_PORT |=T_IO ;
0388 9AD9 SBI 0x1B,1
0389 C001 RJMP 0x038B
(0046) else
(0047) T_PORT &=~T_IO ;
038A 98D9 CBI 0x1B,1
(0048) asm("nop");
038B 0000 NOP
(0049) asm("nop");
038C 0000 NOP
(0050) T_PORT |=T_CLK; //时钟上升沿写入数据
038D 9ADA SBI 0x1B,2
(0051) asm("nop");
038E 0000 NOP
(0052) T_PORT &=~T_CLK; //时钟拉低电平
038F 98DA CBI 0x1B,2
0390 9563 INC R22
0391 3068 CPI R22,0x8
0392 F370 BCS 0x0381
(0053) }
(0054) T_PORT&=~T_RST; //禁止DS1302
0393 98D8 CBI 0x1B,0
0394 940E043E CALL pop_gset3
0396 9508 RET
_read_data:
k --> R20
temp --> R22
i --> R10
addr --> R20
0397 940E0448 CALL push_gset3
0399 2F40 MOV R20,R16
(0055) }
(0056)
(0057) /***************************************************
(0058) 读一个字节
(0059) ***************************************************/
(0060) uchar read_data(uchar addr)
(0061) {
(0062) uchar i,temp,k;
(0063) temp=0;
039A 2766 CLR R22
(0064) T_DDR|=T_IO;
039B 9AD1 SBI 0x1A,1
(0065) T_PORT&=~T_RST;
039C 98D8 CBI 0x1B,0
(0066) T_PORT&=~T_CLK;
039D 98DA CBI 0x1B,2
(0067) asm("nop");
039E 0000 NOP
(0068) asm("nop");
039F 0000 NOP
(0069) asm("nop");
03A0 0000 NOP
(0070) asm("nop");
03A1 0000 NOP
(0071) T_PORT|=T_RST; //时钟信号低时拉高RST初始化
03A2 9AD8 SBI 0x1B,0
(0072) temp=addr;
03A3 2F64 MOV R22,R20
(0073) for(i=0;i<8;i++)
03A4 24AA CLR R10
03A5 C00F RJMP 0x03B5
(0074) {
(0075) if(temp&(1<<i))
03A6 E001 LDI R16,1
03A7 2D1A MOV R17,R10
03A8 940E0463 CALL lsl8
03AA 2E26 MOV R2,R22
03AB 2220 AND R2,R16
03AC F011 BEQ 0x03AF
(0076) T_PORT |=T_IO ;
03AD 9AD9 SBI 0x1B,1
03AE C001 RJMP 0x03B0
(0077) else
(0078) T_PORT &=~T_IO ;
03AF 98D9 CBI 0x1B,1
(0079) asm("nop");
03B0 0000 NOP
(0080) asm("nop");
03B1 0000 NOP
(0081) T_PORT |=T_CLK; //时钟上升沿写入数据
03B2 9ADA SBI 0x1B,2
(0082) T_PORT &=~T_CLK; //时钟拉低电平
03B3 98DA CBI 0x1B,2
03B4 94A3 INC R10
03B5 2D8A MOV R24,R10
03B6 3088 CPI R24,0x8
03B7 F370 BCS 0x03A6
(0083) }
(0084) T_DDR&=~T_IO;
03B8 98D1 CBI 0x1A,1
(0085) for(i=0;i<8;i++)
03B9 24AA CLR R10
03BA C016 RJMP 0x03D1
(0086) {
(0087) k=(T_PIN&T_IO);
03BB B349 IN R20,0x19
03BC 7042 ANDI R20,2
(0088) if(k==T_IO)
03BD 3042 CPI R20,2
03BE F431 BNE 0x03C5
(0089) temp|=(1<<i);
03BF E001 LDI R16,1
03C0 2D1A MOV R17,R10
03C1 940E0463 CALL lsl8
03C3 2B60 OR R22,R16
03C4 C007 RJMP 0x03CC
(0090) else
(0091) temp&=~(1<<i);
03C5 E001 LDI R16,1
03C6 2D1A MOV R17,R10
03C7 940E0463 CALL lsl8
03C9 2E20 MOV R2,R16
03CA 9420 COM R2
03CB 2162 AND R22,R2
(0092) asm("nop");
03CC 0000 NOP
(0093) asm("nop");
03CD 0000 NOP
(0094) T_PORT|=T_CLK; //上升沿读出数据
03CE 9ADA SBI 0x1B,2
(0095) T_PORT &=~T_CLK; //时钟电平拉低
03CF 98DA CBI 0x1B,2
03D0 94A3 INC R10
03D1 2D8A MOV R24,R10
03D2 3088 CPI R24,0x8
03D3 F338 BCS 0x03BB
(0096) }
(0097) T_DDR|=T_IO;
03D4 9AD1 SBI 0x1A,1
(0098) T_PORT&=~T_CLK;
03D5 98DA CBI 0x1B,2
(0099) T_PORT&=~T_RST; //禁止DS1302
03D6 98D8 CBI 0x1B,0
(0100) return(temp);
03D7 2F06 MOV R16,R22
03D8 940E043E CALL pop_gset3
03DA 9508 RET
(0101) }
(0102) //1302初始化
(0103) void init_1302()
(0104) {
(0105) write_data(0x8e,0x00); //关闭寄存器写保护
_init_1302:
03DB 2722 CLR R18
03DC E80E LDI R16,0x8E
03DD DF7F RCALL _write_data
(0106) write_data(0x90,0x00); //写充电寄存器
03DE 2722 CLR R18
03DF E900 LDI R16,0x90
03E0 DF7C RCALL _write_data
(0107) write_data(0x80,0x00); //秒寄存器停止位置0,时钟启动,初值设为0
03E1 2722 CLR R18
03E2 E800 LDI R16,0x80
03E3 DF79 RCALL _write_data
03E4 9508 RET
_init_time:
year --> Y+12
d --> Y+10
month --> Y+8
day --> Y+6
hour --> Y+4
min --> R20
sec --> R22
03E5 940E044A CALL push_gset2
03E7 2F42 MOV R20,R18
03E8 2F60 MOV R22,R16
(0108) }
(0109)
(0110) void init_time(uchar sec,uchar min,uchar hour,uchar day,uchar month,uchar d,uchar year)
(0111) {
(0112) write_data(0x80,sec);
03E9 2F26 MOV R18,R22
03EA E800 LDI R16,0x80
03EB DF71 RCALL _write_data
(0113) write_data(0x82,min);
03EC 2F24 MOV R18,R20
03ED E802 LDI R16,0x82
03EE DF6E RCALL _write_data
(0114) write_data(0x84,hour);
03EF 812C LDD R18,Y+4
03F0 E804 LDI R16,0x84
03F1 DF6B RCALL _write_data
(0115) write_data(0x86,day);
03F2 812E LDD R18,Y+6
03F3 E806 LDI R16,0x86
03F4 DF68 RCALL _write_data
(0116) write_data(0x88,month);
03F5 8528 LDD R18,Y+8
03F6 E808 LDI R16,0x88
03F7 DF65 RCALL _write_data
(0117) write_data(0x8a,d);
03F8 852A LDD R18,Y+10
03F9 E80A LDI R16,0x8A
03FA DF62 RCALL _write_data
(0118) write_data(0x8c,year);
FILE: <library>
03FB 852C LDD R18,Y+12
03FC E80C LDI R16,0x8C
03FD DF5F RCALL _write_data
03FE 940E043B CALL pop_gset2
0400 9508 RET
mod16s:
0401 9468 BSET 6
0402 92DA ST R13,-Y
0403 2ED1 MOV R13,R17
0404 C004 RJMP 0x0409
div16s:
0405 94E8 BCLR 6
0406 92DA ST R13,-Y
0407 2ED1 MOV R13,R17
0408 26D3 EOR R13,R19
0409 FF17 SBRS R17,7
040A C004 RJMP 0x040F
040B 9510 COM R17
040C 9500 COM R16
040D 5F0F SUBI R16,0xFF
040E 4F1F SBCI R17,0xFF
040F FF37 SBRS R19,7
0410 C004 RJMP 0x0415
0411 9530 COM R19
0412 9520 COM R18
0413 5F2F SUBI R18,0xFF
0414 4F3F SBCI R19,0xFF
0415 940E0422 CALL xdiv16u
0417 FED7 SBRS R13,7
0418 C004 RJMP 0x041D
0419 9510 COM R17
041A 9500 COM R16
041B 5F0F SUBI R16,0xFF
041C 4F1F SBCI R17,0xFF
041D 90D9 LD R13,Y+
041E 9508 RET
mod16u:
041F 9468 BSET 6
0420 C001 RJMP xdiv16u
div16u:
0421 94E8 BCLR 6
xdiv16u:
0422 92EA ST R14,-Y
0423 92FA ST R15,-Y
0424 938A ST R24,-Y
0425 24EE CLR R14
0426 24FF CLR R15
0427 E180 LDI R24,0x10
0428 0F00 LSL R16
0429 1F11 ROL R17
042A 1CEE ROL R14
042B 1CFF ROL R15
042C 16E2 CP R14,R18
042D 06F3 CPC R15,R19
042E F018 BCS 0x0432
042F 1AE2 SUB R14,R18
0430 0AF3 SBC R15,R19
0431 9503 INC R16
0432 958A DEC R24
0433 F7A1 BNE 0x0428
0434 F416 BRTC 0x0437
0435 2D0E MOV R16,R14
0436 2D1F MOV R17,R15
0437 9189 LD R24,Y+
0438 90F9 LD R15,Y+
0439 90E9 LD R14,Y+
043A 9508 RET
pop_gset2:
043B E0E2 LDI R30,2
043C 940C0450 JMP pop
pop_gset3:
043E E0E4 LDI R30,4
043F 940C0450 JMP pop
pop_gset4:
0441 E0E8 LDI R30,0x8
0442 940C0450 JMP pop
push_gset5:
0444 92FA ST R15,-Y
0445 92EA ST R14,-Y
push_gset4:
0446 92DA ST R13,-Y
0447 92CA ST R12,-Y
push_gset3:
0448 92BA ST R11,-Y
0449 92AA ST R10,-Y
push_gset2:
044A 937A ST R23,-Y
044B 936A ST R22,-Y
push_gset1:
044C 935A ST R21,-Y
044D 934A ST R20,-Y
044E 9508 RET
pop_gset1:
044F E0E1 LDI R30,1
pop:
0450 9149 LD R20,Y+
0451 9159 LD R21,Y+
0452 FDE0 SBRC R30,0
0453 9508 RET
0454 9169 LD R22,Y+
0455 9179 LD R23,Y+
0456 FDE1 SBRC R30,1
0457 9508 RET
0458 90A9 LD R10,Y+
0459 90B9 LD R11,Y+
045A FDE2 SBRC R30,2
045B 9508 RET
045C 90C9 LD R12,Y+
045D 90D9 LD R13,Y+
045E FDE3 SBRC R30,3
045F 9508 RET
0460 90E9 LD R14,Y+
0461 90F9 LD R15,Y+
0462 9508 RET
lsl8:
0463 2311 TST R17
0464 F019 BEQ 0x0468
0465 0F00 LSL R16
0466 951A DEC R17
0467 CFFB RJMP lsl8
0468 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -