📄 rtc.lst
字号:
0395 1A20 SUB R2,R16
0396 2FE4 MOV R30,R20
0397 2FF5 MOV R31,R21
0398 8627 STD Z+15,R2
(0343) }
0399 D0D7 RCALL pop_gset2
039A 9508 RET
_DSWrite_Byte:
clear --> R20
Data --> R18
Address --> R16
039B D0DD RCALL push_gset1
(0344)
(0345) //***************************通过SPI接口写数据函数*****************//
(0346) //函数参数说明:
(0347) //Address:DS1722寄存器地址
(0348) //Data:写入的数据
(0349) void DSWrite_Byte(uchar Address,uchar Data)
(0350) {uchar clear;
(0351) PORTB=PORTB|0x10; //使能SPI器件
039C 9AC4 SBI 0x18,4
(0352) SPDR=Address;
039D B90F OUT 0x0F,R16
(0353) while(!(SPSR&0x80)) {;}
039E 9B77 SBIS 0x0E,7
039F CFFE RJMP 0x039E
(0354) clear=SPSR;
03A0 B14E IN R20,0x0E
(0355) clear=SPDR;
03A1 B14F IN R20,0x0F
(0356) SPDR=Data;
03A2 B92F OUT 0x0F,R18
(0357) while(!(SPSR&0x80)) {;}
03A3 9B77 SBIS 0x0E,7
03A4 CFFE RJMP 0x03A3
(0358) clear=SPSR;
03A5 B14E IN R20,0x0E
(0359) clear=SPDR;
03A6 B14F IN R20,0x0F
(0360) PORTB=PORTB&0xef;
03A7 B388 IN R24,0x18
03A8 7E8F ANDI R24,0xEF
03A9 BB88 OUT 0x18,R24
(0361) }
03AA D0D1 RCALL pop_gset1
03AB 9508 RET
_DSRead_Byte:
Data --> R20
clear --> R22
Address --> R16
03AC D0E3 RCALL push_gset2
(0362)
(0363)
(0364) //***************************通过SPI接口读数据函数*****************//
(0365) //函数参数说明:
(0366) //Address:DS1722寄存器地址
(0367) //返回值:读取的温度数据
(0368) uchar DSRead_Byte(uchar Address)
(0369) {uchar clear;
(0370) uchar Data;
(0371) PORTB=PORTB|0x10;
03AD 9AC4 SBI 0x18,4
(0372) SPDR=Address;
03AE B90F OUT 0x0F,R16
(0373) while(!(SPSR&0x80)) {;}
03AF 9B77 SBIS 0x0E,7
03B0 CFFE RJMP 0x03AF
(0374) clear=SPSR;
03B1 B16E IN R22,0x0E
(0375) clear=SPDR;
03B2 B16F IN R22,0x0F
(0376) SPDR=Address; //发空数据
03B3 B90F OUT 0x0F,R16
(0377) while(!(SPSR&0x80)) {;}
03B4 9B77 SBIS 0x0E,7
03B5 CFFE RJMP 0x03B4
(0378) clear=SPSR;
03B6 B16E IN R22,0x0E
(0379) Data=SPDR;
03B7 B14F IN R20,0x0F
(0380) PORTB=PORTB&0xef;
03B8 B388 IN R24,0x18
03B9 7E8F ANDI R24,0xEF
03BA BB88 OUT 0x18,R24
(0381) return(Data);
03BB 2F04 MOV R16,R20
03BC D0B4 RCALL pop_gset2
03BD 9508 RET
_main:
i --> Y+4
SD2303_Controller2 --> R20
SD2303_Controller1 --> R22
DS --> R20
SD --> Y+26
Set_Time --> Y+19
time --> Y+3
03BE 976B SBIW R28,0x1B
(0382) }
(0383)
(0384) void main(void)
(0385) {uchar i;
(0386) uchar time[16]={2,0,0,4,1,2,2,7,1,1,7,3,0,0,0,0};
03BF E18B LDI R24,0x1B
03C0 E090 LDI R25,0
03C1 2FEC MOV R30,R28
03C2 2FFD MOV R31,R29
03C3 9633 ADIW R30,3
03C4 E100 LDI R16,0x10
03C5 E010 LDI R17,0
03C6 93FA ST R31,-Y
03C7 93EA ST R30,-Y
03C8 939A ST R25,-Y
03C9 938A ST R24,-Y
03CA D0DD RCALL asgncblk
(0387) uchar Set_Time[7]={0x50,0x30,0x20,0x03,0x05,0x01,0x05};
03CB E28B LDI R24,0x2B
03CC E090 LDI R25,0
03CD 2FEC MOV R30,R28
03CE 2FFD MOV R31,R29
03CF 9673 ADIW R30,0x13
03D0 E007 LDI R16,7
03D1 E010 LDI R17,0
03D2 93FA ST R31,-Y
03D3 93EA ST R30,-Y
03D4 939A ST R25,-Y
03D5 938A ST R24,-Y
03D6 D0D1 RCALL asgncblk
(0388) //初始化时间 2005-01-05 Wed 20-30-50
(0389) uchar SD,DS;
(0390) uchar SD2303_Controller1=0x00; //禁止中断
03D7 2766 CLR R22
(0391) uchar SD2303_Controller2=0x20; //时间格式:24小时制
03D8 E240 LDI R20,0x20
(0392) DDRA=0xff; //A口输出
03D9 EF8F LDI R24,0xFF
03DA BB8A OUT 0x1A,R24
(0393) DDRC=0xff; //C口输出
03DB BB84 OUT 0x14,R24
(0394) DDRD=0x80; //D口最高位输出,其他带上拉输入
03DC E880 LDI R24,0x80
03DD BB81 OUT 0x11,R24
(0395) PORTD=0x7F;
03DE E78F LDI R24,0x7F
03DF BB82 OUT 0x12,R24
(0396) DDRB=0xF3; //B口带第2、3位带上拉输入,其他输出
03E0 EF83 LDI R24,0xF3
03E1 BB87 OUT 0x17,R24
(0397) PORTB=0xF3;
03E2 BB88 OUT 0x18,R24
(0398) Write_1byte(SD2303,0x0e,SD2303_Controller1);//写控制字
03E3 8368 STD Y+0,R22
03E4 E02E LDI R18,0xE
03E5 E604 LDI R16,0x64
03E6 DD47 RCALL _Write_1byte
(0399) Write_1byte(SD2303,0x0f,SD2303_Controller2);//写控制字
03E7 8348 STD Y+0,R20
03E8 E02F LDI R18,0xF
03E9 E604 LDI R16,0x64
03EA DD43 RCALL _Write_1byte
(0400) Write_Nbyte(SD2303,0x00,Set_Time,7); //初始化时间
03EB E087 LDI R24,7
03EC 838A STD Y+2,R24
03ED 2F8C MOV R24,R28
03EE 2F9D MOV R25,R29
03EF 9643 ADIW R24,0x13
03F0 8399 STD Y+1,R25
03F1 8388 STD Y+0,R24
03F2 2722 CLR R18
03F3 E604 LDI R16,0x64
03F4 DD10 RCALL _Write_Nbyte
(0401) SPCR=0b01011100;
03F5 E58C LDI R24,0x5C
03F6 B98D OUT 0x0D,R24
(0402) DSWrite_Byte(0x80,0xf0); //DS1722 8位分辨率自由转换模式
03F7 EF20 LDI R18,0xF0
03F8 E800 LDI R16,0x80
03F9 DFA1 RCALL _DSWrite_Byte
03FA C056 RJMP 0x0451
(0403) while(1)
(0404) {Key_Process(); //按键处理
03FB DD86 RCALL _Key_Process
(0405) Read_Nbyte(SD2303,0x00,Set_Time,7); //读取时间
03FC E087 LDI R24,7
03FD 838A STD Y+2,R24
03FE 2F8C MOV R24,R28
03FF 2F9D MOV R25,R29
0400 9643 ADIW R24,0x13
0401 8399 STD Y+1,R25
0402 8388 STD Y+0,R24
0403 2722 CLR R18
0404 E604 LDI R16,0x64
0405 DD43 RCALL _Read_Nbyte
(0406) time[2]=Set_Time[6]>>4; //年高位;
0406 8D89 LDD R24,Y+25
0407 9582 SWAP R24
0408 708F ANDI R24,0xF
0409 838D STD Y+5,R24
(0407) time[3]=Set_Time[6]&0x0f; //年低位;
040A 8D89 LDD R24,Y+25
040B 708F ANDI R24,0xF
040C 838E STD Y+6,R24
(0408) time[4]=Set_Time[5]>>4; //月高位;
040D 8D88 LDD R24,Y+24
040E 9582 SWAP R24
040F 708F ANDI R24,0xF
0410 838F STD Y+7,R24
(0409) time[5]=Set_Time[5]&0x0f; //月低位;
0411 8D88 LDD R24,Y+24
0412 708F ANDI R24,0xF
0413 8788 STD Y+8,R24
(0410) time[6]=Set_Time[4]>>4; //日高位;
0414 898F LDD R24,Y+23
0415 9582 SWAP R24
0416 708F ANDI R24,0xF
0417 8789 STD Y+9,R24
(0411) time[7]=Set_Time[4]&0x0f; //日低位;
0418 898F LDD R24,Y+23
0419 708F ANDI R24,0xF
041A 878A STD Y+10,R24
(0412) time[8]=Set_Time[3]; //星期;
041B 882E LDD R2,Y+22
041C 862B STD Y+11,R2
(0413) time[9]=Set_Time[2]>>4; //时高位;
041D 898D LDD R24,Y+21
041E 9582 SWAP R24
041F 708F ANDI R24,0xF
0420 878C STD Y+12,R24
(0414) time[10]=Set_Time[2]&0x0f; //时低位;
0421 898D LDD R24,Y+21
0422 708F ANDI R24,0xF
0423 878D STD Y+13,R24
(0415) time[11]=Set_Time[1]>>4; //分高位;
0424 898C LDD R24,Y+20
0425 9582 SWAP R24
0426 708F ANDI R24,0xF
0427 878E STD Y+14,R24
(0416) time[12]=Set_Time[1]&0x0f; //分低位;
0428 898C LDD R24,Y+20
0429 708F ANDI R24,0xF
042A 878F STD Y+15,R24
(0417) time[13]=Set_Time[0]>>4; //秒高位;
042B 898B LDD R24,Y+19
042C 9582 SWAP R24
042D 708F ANDI R24,0xF
042E 8B88 STD Y+16,R24
(0418) time[14]=Set_Time[0]&0x0f; //秒低位;
042F 898B LDD R24,Y+19
0430 708F ANDI R24,0xF
0431 8B89 STD Y+17,R24
(0419) Read_Nbyte(SD2303,0x0f,&SD,1); //读取中断标志位
0432 E081 LDI R24,1
0433 838A STD Y+2,R24
0434 2F8C MOV R24,R28
0435 2F9D MOV R25,R29
0436 964A ADIW R24,0x1A
0437 8399 STD Y+1,R25
0438 8388 STD Y+0,R24
0439 E02F LDI R18,0xF
043A E604 LDI R16,0x64
043B DD0D RCALL _Read_Nbyte
(0420) if(SD&0x02) PORTD=PORTD|0x80; //响铃1分钟
043C 8C2A LDD R2,Y+26
043D FE21 SBRS R2,1
043E C002 RJMP 0x0441
043F 9A97 SBI 0x12,7
0440 C003 RJMP 0x0444
(0421) else PORTD=PORTD&0x7F; //关闭闹铃
0441 B382 IN R24,0x12
0442 778F ANDI R24,0x7F
0443 BB82 OUT 0x12,R24
(0422) DS=DSRead_Byte(0x02); //读取温度值
0444 E002 LDI R16,2
0445 DF66 RCALL _DSRead_Byte
0446 2F40 MOV R20,R16
(0423) Convert(DS,time);
0447 2F2C MOV R18,R28
0448 2F3D MOV R19,R29
0449 5F2D SUBI R18,0xFD
044A 4F3F SBCI R19,0xFF
044B DF29 RCALL _Convert
(0424) Display(time); //时间显示
044C 2F0C MOV R16,R28
044D 2F1D MOV R17,R29
044E 5F0D SUBI R16,0xFD
044F 4F1F SBCI R17,0xFF
0450 DBFC RCALL _Display
0451 CFA9 RJMP 0x03FB
(0425) }
(0426) }
FILE: <library>
0452 966B ADIW R28,0x1B
0453 9508 RET
push_arg4:
0454 933A ST R19,-Y
0455 932A ST R18,-Y
push_arg2:
0456 931A ST R17,-Y
0457 930A ST R16,-Y
0458 9508 RET
mod8u:
0459 9468 BSET 6
045A C001 RJMP xdiv8u
div8u:
045B 94E8 BCLR 6
xdiv8u:
045C 932A ST R18,-Y
045D 92FA ST R15,-Y
045E 92EA ST R14,-Y
045F 24FF CLR R15
0460 24EE CLR R14
0461 E120 LDI R18,0x10
0462 0F00 LSL R16
0463 1CFF ROL R15
0464 1CEE ROL R14
0465 16E1 CP R14,R17
0466 F010 BCS 0x0469
0467 1AE1 SUB R14,R17
0468 9503 INC R16
0469 952A DEC R18
046A F7B9 BNE 0x0462
046B F40E BRTC 0x046D
046C 2D0E MOV R16,R14
046D 90E9 LD R14,Y+
046E 90F9 LD R15,Y+
046F 9129 LD R18,Y+
0470 9508 RET
pop_gset2:
0471 E0E2 LDI R30,2
0472 C00A RJMP pop
pop_gset3:
0473 E0E4 LDI R30,4
0474 C008 RJMP pop
pop_gset4:
0475 E0E8 LDI R30,0x8
0476 C006 RJMP pop
pop_gset5:
0477 27EE CLR R30
0478 C004 RJMP pop
push_gset1:
0479 935A ST R21,-Y
047A 934A ST R20,-Y
047B 9508 RET
pop_gset1:
047C E0E1 LDI R30,1
pop:
047D 9149 LD R20,Y+
047E 9159 LD R21,Y+
047F FDE0 SBRC R30,0
0480 9508 RET
0481 9169 LD R22,Y+
0482 9179 LD R23,Y+
0483 FDE1 SBRC R30,1
0484 9508 RET
0485 90A9 LD R10,Y+
0486 90B9 LD R11,Y+
0487 FDE2 SBRC R30,2
0488 9508 RET
0489 90C9 LD R12,Y+
048A 90D9 LD R13,Y+
048B FDE3 SBRC R30,3
048C 9508 RET
048D 90E9 LD R14,Y+
048E 90F9 LD R15,Y+
048F 9508 RET
push_gset2:
0490 937A ST R23,-Y
0491 936A ST R22,-Y
0492 CFE6 RJMP push_gset1
push_gset3:
0493 92BA ST R11,-Y
0494 92AA ST R10,-Y
0495 CFFA RJMP push_gset2
push_gset4:
0496 92DA ST R13,-Y
0497 92CA ST R12,-Y
0498 CFFA RJMP push_gset3
push_gset5:
0499 92FA ST R15,-Y
049A 92EA ST R14,-Y
049B CFFA RJMP push_gset4
mpy8s:
049C 920A ST R0,-Y
049D 2400 CLR R0
049E 2300 TST R16
049F F029 BEQ 0x04A5
04A0 9506 LSR R16
04A1 F408 BCC 0x04A3
04A2 0E01 ADD R0,R17
04A3 0F11 LSL R17
04A4 CFF9 RJMP 0x049E
04A5 2D00 MOV R16,R0
04A6 9009 LD R0,Y+
04A7 9508 RET
asgncblk:
04A8 93AA ST R26,-Y
04A9 93BA ST R27,-Y
04AA 93EA ST R30,-Y
04AB 93FA ST R31,-Y
04AC 920A ST R0,-Y
04AD 81AF LDD R26,Y+7
04AE 85B8 LDD R27,Y+8
04AF 81ED LDD R30,Y+5
04B0 81FE LDD R31,Y+6
04B1 3000 CPI R16,0
04B2 0701 CPC R16,R17
04B3 F031 BEQ 0x04BA
04B4 95C8 LPM
04B5 920D ST R0,X+
04B6 9631 ADIW R30,1
04B7 5001 SUBI R16,1
04B8 4010 SBCI R17,0
04B9 CFF7 RJMP 0x04B1
04BA 9009 LD R0,Y+
04BB 91F9 LD R31,Y+
04BC 91E9 LD R30,Y+
04BD 91B9 LD R27,Y+
04BE 91A9 LD R26,Y+
04BF 9624 ADIW R28,4
04C0 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -