📄 1302-162.lst
字号:
(0005) void delayb(uint x) //1.5us左右
(0006) {
_delayb:
x --> R16
049C C002 RJMP 0x049F
(0007) while(x)
(0008) {
(0009) x--;
049D 5001 SUBI R16,1
049E 4010 SBCI R17,0
049F 3000 CPI R16,0
04A0 0701 CPC R16,R17
04A1 F7D9 BNE 0x049D
04A2 9508 RET
_init_1820:
ack --> R20
04A3 D0BD RCALL push_gset1
(0010) }
(0011) }
(0012) //18b20初始化
(0013) uchar init_1820()
(0014) { uchar ack;
(0015) B20_DATA_DDR|=B20_DATA_IO ; //输出
04A4 9AA0 SBI 0x14,0
(0016) B20_DATA_PORT&=~B20_DATA_IO ;
04A5 98A8 CBI 0x15,0
(0017) delayb(600); //复位低电平480us~960us
04A6 E508 LDI R16,0x58
04A7 E012 LDI R17,2
04A8 DFF3 RCALL _delayb
(0018) B20_DATA_PORT|=B20_DATA_IO ; //电平拉高
04A9 9AA8 SBI 0x15,0
(0019) B20_DATA_DDR&=~B20_DATA_IO ; //输入
04AA 98A0 CBI 0x14,0
(0020) delayb(90); //延时60us~240us
04AB E50A LDI R16,0x5A
04AC E010 LDI R17,0
04AD DFEE RCALL _delayb
(0021) ack=B20_DATA_PIN; //读出ack的值
04AE B343 IN R20,0x13
(0022) ack&=B20_DATA_IO;
04AF 7041 ANDI R20,1
(0023) delayb(200); //等待480us以上
04B0 EC08 LDI R16,0xC8
04B1 E010 LDI R17,0
04B2 DFE9 RCALL _delayb
(0024) B20_DATA_DDR|=B20_DATA_IO ; //输出
04B3 9AA0 SBI 0x14,0
(0025) return(ack);
04B4 2F04 MOV R16,R20
04B5 D0AE RCALL pop_gset1
04B6 9508 RET
_write_1820:
m --> R20
i --> R22
x --> R10
04B7 D0A5 RCALL push_gset3
04B8 2EA0 MOV R10,R16
(0026) }
(0027) //写一个字节
(0028) void write_1820(uchar x)
(0029) {
(0030) uchar i,m;
(0031) B20_DATA_DDR|=B20_DATA_IO; //输出
04B9 9AA0 SBI 0x14,0
(0032) for(i=0;i<8;i++)
04BA 2766 CLR R22
04BB C01A RJMP 0x04D6
(0033) {
(0034) m=x&0x01;
04BC 2D4A MOV R20,R10
04BD 7041 ANDI R20,1
(0035) if(m==0x01)
04BE 3041 CPI R20,1
04BF F461 BNE 0x04CC
(0036) {
(0037) delayb(1); //延时>1us
04C0 E001 LDI R16,1
04C1 E010 LDI R17,0
04C2 DFD9 RCALL _delayb
(0038) B20_DATA_PORT&=~B20_DATA_IO; //产生写起始信号
04C3 98A8 CBI 0x15,0
(0039) delayb(3); //延时1us~15us 8us
04C4 E003 LDI R16,3
04C5 E010 LDI R17,0
04C6 DFD5 RCALL _delayb
(0040) B20_DATA_PORT|=B20_DATA_IO; //数据线电平拉高
04C7 9AA8 SBI 0x15,0
(0041) delayb(55); //延时60us~120us 85us
04C8 E307 LDI R16,0x37
04C9 E010 LDI R17,0
04CA DFD1 RCALL _delayb
(0042) }
04CB C008 RJMP 0x04D4
(0043) else
(0044) {
(0045) delayb(1); //延时>1us
04CC E001 LDI R16,1
04CD E010 LDI R17,0
04CE DFCD RCALL _delayb
(0046) B20_DATA_PORT&=~B20_DATA_IO; //产生写起始信号
04CF 98A8 CBI 0x15,0
(0047) delayb(55); //B20采样要60us到120us 85us
04D0 E307 LDI R16,0x37
04D1 E010 LDI R17,0
04D2 DFC9 RCALL _delayb
(0048) B20_DATA_PORT|=B20_DATA_IO; //数据线电平拉高
04D3 9AA8 SBI 0x15,0
(0049) }
(0050) x=x>>1; //右移一位
04D4 94A6 LSR R10
04D5 9563 INC R22
04D6 3068 CPI R22,0x8
04D7 F320 BCS 0x04BC
04D8 D07C RCALL pop_gset3
04D9 9508 RET
_read_1820:
temp --> R20
k --> R22
n --> R10
04DA D082 RCALL push_gset3
(0051) }
(0052) }
(0053) //读一个字节
(0054) uchar read_1820()
(0055) {
(0056) uchar temp,k,n;
(0057) temp=0;
04DB 2744 CLR R20
(0058) for(n=0;n<8;n++)
04DC 24AA CLR R10
04DD C01E RJMP 0x04FC
(0059) {
(0060) B20_DATA_DDR|=B20_DATA_IO; //输出
04DE 9AA0 SBI 0x14,0
(0061) B20_DATA_PORT&=~B20_DATA_IO; //产生读起始信号
04DF 98A8 CBI 0x15,0
(0062) asm("nop");
04E0 0000 NOP
(0063) asm("nop");
04E1 0000 NOP
(0064) asm("nop");
04E2 0000 NOP
(0065) asm("nop"); //延时1us~15us 2us
04E3 0000 NOP
(0066) B20_DATA_PORT|=B20_DATA_IO; //电平拉高
04E4 9AA8 SBI 0x15,0
(0067) B20_DATA_DDR&=~B20_DATA_IO; //接收数据
04E5 98A0 CBI 0x14,0
(0068) asm("nop"); //要在15us内完成读数
04E6 0000 NOP
(0069) asm("nop");
04E7 0000 NOP
(0070) k=B20_DATA_PIN; //读数据,从低位开始
04E8 B363 IN R22,0x13
(0071) k&=0x01;
04E9 7061 ANDI R22,1
(0072) if(k)
04EA F029 BEQ 0x04F0
(0073) temp|=(1<<n);
04EB E001 LDI R16,1
04EC 2D1A MOV R17,R10
04ED D0BF RCALL lsl8
04EE 2B40 OR R20,R16
04EF C006 RJMP 0x04F6
(0074) else
(0075) temp&=~(1<<n);
04F0 E001 LDI R16,1
04F1 2D1A MOV R17,R10
04F2 D0BA RCALL lsl8
04F3 2E20 MOV R2,R16
04F4 9420 COM R2
04F5 2142 AND R20,R2
(0076) delayb(40); //60~120us
04F6 E208 LDI R16,0x28
04F7 E010 LDI R17,0
04F8 DFA3 RCALL _delayb
(0077) B20_DATA_DDR|=B20_DATA_IO; //输出
04F9 9AA0 SBI 0x14,0
(0078) B20_DATA_PORT|=B20_DATA_IO;
04FA 9AA8 SBI 0x15,0
04FB 94A3 INC R10
04FC 2D8A MOV R24,R10
04FD 3088 CPI R24,0x8
04FE F2F8 BCS 0x04DE
(0079) }
(0080) return temp;
FILE: <library>
04FF 2F04 MOV R16,R20
0500 D054 RCALL pop_gset3
0501 9508 RET
mod16s:
0502 9468 BSET 6
0503 92DA ST R13,-Y
0504 2ED1 MOV R13,R17
0505 C004 RJMP 0x050A
div16s:
0506 94E8 BCLR 6
0507 92DA ST R13,-Y
0508 2ED1 MOV R13,R17
0509 26D3 EOR R13,R19
050A FF17 SBRS R17,7
050B C004 RJMP 0x0510
050C 9510 COM R17
050D 9500 COM R16
050E 5F0F SUBI R16,0xFF
050F 4F1F SBCI R17,0xFF
0510 FF37 SBRS R19,7
0511 C004 RJMP 0x0516
0512 9530 COM R19
0513 9520 COM R18
0514 5F2F SUBI R18,0xFF
0515 4F3F SBCI R19,0xFF
0516 D00B RCALL xdiv16u
0517 FED7 SBRS R13,7
0518 C004 RJMP 0x051D
0519 9510 COM R17
051A 9500 COM R16
051B 5F0F SUBI R16,0xFF
051C 4F1F SBCI R17,0xFF
051D 90D9 LD R13,Y+
051E 9508 RET
mod16u:
051F 9468 BSET 6
0520 C001 RJMP xdiv16u
div16u:
0521 94E8 BCLR 6
xdiv16u:
0522 92EA ST R14,-Y
0523 92FA ST R15,-Y
0524 938A ST R24,-Y
0525 24EE CLR R14
0526 24FF CLR R15
0527 E180 LDI R24,0x10
0528 0F00 LSL R16
0529 1F11 ROL R17
052A 1CEE ROL R14
052B 1CFF ROL R15
052C 16E2 CP R14,R18
052D 06F3 CPC R15,R19
052E F018 BCS 0x0532
052F 1AE2 SUB R14,R18
0530 0AF3 SBC R15,R19
0531 9503 INC R16
0532 958A DEC R24
0533 F7A1 BNE 0x0528
0534 F416 BRTC 0x0537
0535 2D0E MOV R16,R14
0536 2D1F MOV R17,R15
0537 9189 LD R24,Y+
0538 90F9 LD R15,Y+
0539 90E9 LD R14,Y+
053A 9508 RET
mod8u:
053B 9468 BSET 6
053C C001 RJMP xdiv8u
div8u:
053D 94E8 BCLR 6
xdiv8u:
053E 932A ST R18,-Y
053F 92FA ST R15,-Y
0540 92EA ST R14,-Y
0541 24FF CLR R15
0542 24EE CLR R14
0543 E120 LDI R18,0x10
0544 0F00 LSL R16
0545 1CFF ROL R15
0546 1CEE ROL R14
0547 16E1 CP R14,R17
0548 F010 BCS 0x054B
0549 1AE1 SUB R14,R17
054A 9503 INC R16
054B 952A DEC R18
054C F7B9 BNE 0x0544
054D F40E BRTC 0x054F
054E 2D0E MOV R16,R14
054F 90E9 LD R14,Y+
0550 90F9 LD R15,Y+
0551 9129 LD R18,Y+
0552 9508 RET
pop_gset2:
0553 E0E2 LDI R30,2
0554 C010 RJMP pop
pop_gset3:
0555 E0E4 LDI R30,4
0556 C00E RJMP pop
pop_gset4:
0557 E0E8 LDI R30,0x8
0558 C00C RJMP pop
push_gset5:
0559 92FA ST R15,-Y
055A 92EA ST R14,-Y
push_gset4:
055B 92DA ST R13,-Y
055C 92CA ST R12,-Y
push_gset3:
055D 92BA ST R11,-Y
055E 92AA ST R10,-Y
push_gset2:
055F 937A ST R23,-Y
0560 936A ST R22,-Y
push_gset1:
0561 935A ST R21,-Y
0562 934A ST R20,-Y
0563 9508 RET
pop_gset1:
0564 E0E1 LDI R30,1
pop:
0565 9149 LD R20,Y+
0566 9159 LD R21,Y+
0567 FDE0 SBRC R30,0
0568 9508 RET
0569 9169 LD R22,Y+
056A 9179 LD R23,Y+
056B FDE1 SBRC R30,1
056C 9508 RET
056D 90A9 LD R10,Y+
056E 90B9 LD R11,Y+
056F FDE2 SBRC R30,2
0570 9508 RET
0571 90C9 LD R12,Y+
0572 90D9 LD R13,Y+
0573 FDE3 SBRC R30,3
0574 9508 RET
0575 90E9 LD R14,Y+
0576 90F9 LD R15,Y+
0577 9508 RET
push_lset:
0578 93FA ST R31,-Y
0579 93EA ST R30,-Y
057A 93BA ST R27,-Y
057B 93AA ST R26,-Y
057C 939A ST R25,-Y
057D 938A ST R24,-Y
057E 933A ST R19,-Y
057F 932A ST R18,-Y
0580 931A ST R17,-Y
0581 930A ST R16,-Y
0582 929A ST R9,-Y
0583 928A ST R8,-Y
0584 927A ST R7,-Y
0585 926A ST R6,-Y
0586 925A ST R5,-Y
0587 924A ST R4,-Y
0588 923A ST R3,-Y
0589 922A ST R2,-Y
058A 921A ST R1,-Y
058B 920A ST R0,-Y
058C B60F IN R0,0x3F
058D 920A ST R0,-Y
058E 9508 RET
pop_lset:
058F 9009 LD R0,Y+
0590 BE0F OUT 0x3F,R0
0591 9009 LD R0,Y+
0592 9019 LD R1,Y+
0593 9029 LD R2,Y+
0594 9039 LD R3,Y+
0595 9049 LD R4,Y+
0596 9059 LD R5,Y+
0597 9069 LD R6,Y+
0598 9079 LD R7,Y+
0599 9089 LD R8,Y+
059A 9099 LD R9,Y+
059B 9109 LD R16,Y+
059C 9119 LD R17,Y+
059D 9129 LD R18,Y+
059E 9139 LD R19,Y+
059F 9189 LD R24,Y+
05A0 9199 LD R25,Y+
05A1 91A9 LD R26,Y+
05A2 91B9 LD R27,Y+
05A3 91E9 LD R30,Y+
05A4 91F9 LD R31,Y+
05A5 9508 RET
lsl16:
05A6 2322 TST R18
05A7 F021 BEQ 0x05AC
05A8 0F00 LSL R16
05A9 1F11 ROL R17
05AA 952A DEC R18
05AB CFFA RJMP lsl16
05AC 9508 RET
lsl8:
05AD 2311 TST R17
05AE F019 BEQ 0x05B2
05AF 0F00 LSL R16
05B0 951A DEC R17
05B1 CFFB RJMP lsl8
05B2 9508 RET
mpy16s:
05B3 920A ST R0,-Y
05B4 921A ST R1,-Y
05B5 2400 CLR R0
05B6 2411 CLR R1
05B7 3000 CPI R16,0
05B8 0701 CPC R16,R17
05B9 F041 BEQ 0x05C2
05BA 9516 LSR R17
05BB 9507 ROR R16
05BC F410 BCC 0x05BF
05BD 0E02 ADD R0,R18
05BE 1E13 ADC R1,R19
05BF 0F22 LSL R18
05C0 1F33 ROL R19
05C1 CFF5 RJMP 0x05B7
05C2 2D00 MOV R16,R0
05C3 2D11 MOV R17,R1
05C4 9019 LD R1,Y+
05C5 9009 LD R0,Y+
05C6 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -