📄 ds18b20.lst
字号:
0120 E785 LDI R24,0x75
0121 E090 LDI R25,0
0122 91E00074 LDS R30,posit
0124 27FF CLR R31
0125 0FE8 ADD R30,R24
0126 1FF9 ADC R31,R25
0127 81E0 LDD R30,Z+0
0128 27FF CLR R31
0129 E680 LDI R24,0x60
012A E090 LDI R25,0
012B 0FE8 ADD R30,R24
012C 1FF9 ADC R31,R25
012D 8020 LDD R2,Z+0
012E BA25 OUT 0x15,R2
(0153) PORTD= position[posit];
012F E68C LDI R24,0x6C
0130 E090 LDI R25,0
0131 91E00074 LDS R30,posit
0133 27FF CLR R31
0134 0FE8 ADD R30,R24
0135 1FF9 ADC R31,R25
0136 8020 LDD R2,Z+0
0137 BA22 OUT 0x12,R2
(0154) if (++posit >=4 ) posit = 0;
0138 91800074 LDS R24,posit
013A 5F8F SUBI R24,0xFF
013B 2E28 MOV R2,R24
013C 92200074 STS posit,R2
013E 3084 CPI R24,4
013F F018 BCS 0x0143
0140 2422 CLR R2
0141 92200074 STS posit,R2
0143 9508 RET
_TIMER0_COMP:
0144 940E0255 CALL push_lset
(0155) }
(0156)
(0157) // Timer 0 比较匹配中断服务
(0158) #pragma interrupt_handler TIMER0_COMP:20
(0159) void TIMER0_COMP(void)
(0160) {
(0161) display();
0146 DFD7 RCALL _display
0147 940E026C CALL pop_lset
0149 9518 RETI
_main:
j --> Y+5
i --> R20
014A 9724 SBIW R28,4
(0162)
(0163) }
(0164)
(0165) void main(void)
(0166) {
(0167) int i,j;
(0168) PORTD=0xFF; // 显示控制I/O端口初始化
014B EF8F LDI R24,0xFF
014C BB82 OUT 0x12,R24
(0169) DDRD=0xFF;
014D BB81 OUT 0x11,R24
(0170) PORTC=0XfF;
014E BB85 OUT 0x15,R24
(0171) DDRC=0xFF;
014F BB84 OUT 0x14,R24
(0172)
(0173)
(0174) // T/C0 初始化
(0175)
(0176) TCCR0=0x0B; // 内部时钟,64分频(4M/64=62.5KHz),CTC模式
0150 E08B LDI R24,0xB
0151 BF83 OUT 0x33,R24
(0177) TCNT0=0x00;
0152 2422 CLR R2
0153 BE22 OUT 0x32,R2
(0178) OCR0=0x7C; // OCR0 = 0x7C(124),(124+1)/62.5=2ms
0154 E78C LDI R24,0x7C
0155 BF8C OUT 0x3C,R24
(0179) TIMSK=0x02; // 允许T/C0比较匹配中断
0156 E082 LDI R24,2
0157 BF89 OUT 0x39,R24
(0180) SEI(); //允许全局中断
0158 9478 BSET 7
0159 C08C RJMP 0x01E6
(0181)
(0182) while (1) {
(0183) ds1820_start(); /*启动一次转换*/
015A DF8C RCALL _ds1820_start
(0184) delay_nms(10); /*等待转换结束*/
015B E00A LDI R16,0xA
015C E010 LDI R17,0
015D DF12 RCALL _delay_nms
(0185) i=ds1820_read_temp(); /*读取温度数值*/
015E DF8E RCALL _ds1820_read_temp
015F 01A8 MOVW R20,R16
(0186) if(i>=0xf000)//判断是不是负数
0160 3000 CPI R16,0
0161 EFE0 LDI R30,0xF0
0162 071E CPC R17,R30
0163 F408 BCC 0x0165
0164 C042 RJMP 0x01A7
(0187) {
(0188) i=~i; //转换,先取反,在加1.
0165 9540 COM R20
0166 9550 COM R21
(0189) i+=1;
0167 5F4F SUBI R20,0xFF
0168 4F5F SBCI R21,0xFF
(0190) i = (i * 10) / 16; /*数值处理*/
0169 E00A LDI R16,0xA
016A E010 LDI R17,0
016B 019A MOVW R18,R20
016C 940E0223 CALL empy16s
016E E120 LDI R18,0x10
016F E030 LDI R19,0
0170 940E01ED CALL div16s
0172 01A8 MOVW R20,R16
(0191) led_buf[3] = i / 1000; /*将显示信息加载到显示缓存区*/
0173 EE28 LDI R18,0xE8
0174 E033 LDI R19,3
0175 940E01ED CALL div16s
0177 93000073 STS led_buf+3,R16
(0192) i = i % 1000;
0179 EE28 LDI R18,0xE8
017A E033 LDI R19,3
017B 018A MOVW R16,R20
017C 940E01E9 CALL mod16s
017E 01A8 MOVW R20,R16
(0193) led_buf[2] = i / 100;
017F E624 LDI R18,0x64
0180 E030 LDI R19,0
0181 940E01ED CALL div16s
0183 93000072 STS led_buf+2,R16
(0194) i = i % 100;
0185 E624 LDI R18,0x64
0186 E030 LDI R19,0
0187 018A MOVW R16,R20
0188 940E01E9 CALL mod16s
018A 01A8 MOVW R20,R16
(0195) led_buf[1] = i / 10;
018B E02A LDI R18,0xA
018C E030 LDI R19,0
018D 940E01ED CALL div16s
018F 93000071 STS led_buf+1,R16
(0196) led_buf[0] = i % 10;
0191 E02A LDI R18,0xA
0192 E030 LDI R19,0
0193 018A MOVW R16,R20
0194 940E01E9 CALL mod16s
0196 93000070 STS led_buf,R16
(0197) time_to_disbuffer(led_buf[1],led_buf[2],10,11);
0198 E08B LDI R24,0xB
0199 E090 LDI R25,0
019A 839B STD Y+3,R25
019B 838A STD Y+2,R24
019C E08A LDI R24,0xA
019D 8399 STD Y+1,R25
019E 8388 STD Y+0,R24
019F 91200072 LDS R18,led_buf+2
01A1 2733 CLR R19
01A2 91000071 LDS R16,led_buf+1
01A4 2711 CLR R17
01A5 DF6B RCALL _time_to_disbuffer
(0198) }
01A6 C03F RJMP 0x01E6
(0199) else
(0200) {
(0201) i = (i * 10) / 16; /*数值处理*/
01A7 E00A LDI R16,0xA
01A8 E010 LDI R17,0
01A9 019A MOVW R18,R20
01AA 940E0223 CALL empy16s
01AC E120 LDI R18,0x10
01AD E030 LDI R19,0
01AE 940E01ED CALL div16s
01B0 01A8 MOVW R20,R16
(0202) led_buf[3] = i / 1000; /*将显示信息加载到显示缓存区*/
01B1 EE28 LDI R18,0xE8
01B2 E033 LDI R19,3
01B3 940E01ED CALL div16s
01B5 93000073 STS led_buf+3,R16
(0203) i = i % 1000;
01B7 EE28 LDI R18,0xE8
01B8 E033 LDI R19,3
01B9 018A MOVW R16,R20
01BA 940E01E9 CALL mod16s
01BC 01A8 MOVW R20,R16
(0204) led_buf[2] = i / 100;
01BD E624 LDI R18,0x64
01BE E030 LDI R19,0
01BF 940E01ED CALL div16s
01C1 93000072 STS led_buf+2,R16
(0205) i = i % 100;
01C3 E624 LDI R18,0x64
01C4 E030 LDI R19,0
01C5 018A MOVW R16,R20
01C6 940E01E9 CALL mod16s
01C8 01A8 MOVW R20,R16
(0206) led_buf[1] = i / 10;
01C9 E02A LDI R18,0xA
01CA E030 LDI R19,0
01CB 940E01ED CALL div16s
01CD 93000071 STS led_buf+1,R16
(0207) led_buf[0] = i % 10;
01CF E02A LDI R18,0xA
01D0 E030 LDI R19,0
01D1 018A MOVW R16,R20
01D2 940E01E9 CALL mod16s
01D4 93000070 STS led_buf,R16
(0208) time_to_disbuffer(led_buf[1],led_buf[2],led_buf[3],led_buf[0]);
FILE: <library>
01D6 2E20 MOV R2,R16
01D7 2433 CLR R3
01D8 823B STD Y+3,R3
01D9 822A STD Y+2,R2
01DA 90200073 LDS R2,led_buf+3
01DC 2433 CLR R3
01DD 8239 STD Y+1,R3
01DE 8228 STD Y+0,R2
01DF 91200072 LDS R18,led_buf+2
01E1 2733 CLR R19
01E2 91000071 LDS R16,led_buf+1
01E4 2711 CLR R17
01E5 DF2B RCALL _time_to_disbuffer
01E6 CF73 RJMP 0x015A
01E7 9624 ADIW R28,4
01E8 9508 RET
mod16s:
01E9 9468 BSET 6
01EA 92DA ST R13,-Y
01EB 2ED1 MOV R13,R17
01EC C004 RJMP 0x01F1
div16s:
01ED 94E8 BCLR 6
01EE 92DA ST R13,-Y
01EF 2ED1 MOV R13,R17
01F0 26D3 EOR R13,R19
01F1 FF17 SBRS R17,7
01F2 C004 RJMP 0x01F7
01F3 9510 COM R17
01F4 9500 COM R16
01F5 5F0F SUBI R16,0xFF
01F6 4F1F SBCI R17,0xFF
01F7 FF37 SBRS R19,7
01F8 C004 RJMP 0x01FD
01F9 9530 COM R19
01FA 9520 COM R18
01FB 5F2F SUBI R18,0xFF
01FC 4F3F SBCI R19,0xFF
01FD 940E020A CALL xdiv16u
01FF FED7 SBRS R13,7
0200 C004 RJMP 0x0205
0201 9510 COM R17
0202 9500 COM R16
0203 5F0F SUBI R16,0xFF
0204 4F1F SBCI R17,0xFF
0205 90D9 LD R13,Y+
0206 9508 RET
mod16u:
0207 9468 BSET 6
0208 C001 RJMP xdiv16u
div16u:
0209 94E8 BCLR 6
xdiv16u:
020A 92EA ST R14,-Y
020B 92FA ST R15,-Y
020C 938A ST R24,-Y
020D 24EE CLR R14
020E 24FF CLR R15
020F E180 LDI R24,0x10
0210 0F00 LSL R16
0211 1F11 ROL R17
0212 1CEE ROL R14
0213 1CFF ROL R15
0214 16E2 CP R14,R18
0215 06F3 CPC R15,R19
0216 F018 BCS 0x021A
0217 1AE2 SUB R14,R18
0218 0AF3 SBC R15,R19
0219 9503 INC R16
021A 958A DEC R24
021B F7A1 BNE 0x0210
021C F416 BRTC 0x021F
021D 2D0E MOV R16,R14
021E 2D1F MOV R17,R15
021F 9189 LD R24,Y+
0220 90F9 LD R15,Y+
0221 90E9 LD R14,Y+
0222 9508 RET
empy16s:
0223 920A ST R0,-Y
0224 921A ST R1,-Y
0225 938A ST R24,-Y
0226 939A ST R25,-Y
0227 9F02 MUL R16,R18
0228 01C0 MOVW R24,R0
0229 9F12 MUL R17,R18
022A 0D90 ADD R25,R0
022B 9F03 MUL R16,R19
022C 0D90 ADD R25,R0
022D 018C MOVW R16,R24
022E 9199 LD R25,Y+
022F 9189 LD R24,Y+
0230 9019 LD R1,Y+
0231 9009 LD R0,Y+
0232 9508 RET
pop_gset2:
0233 E0E2 LDI R30,2
0234 940C0242 JMP pop
push_gset5:
0236 92FA ST R15,-Y
0237 92EA ST R14,-Y
push_gset4:
0238 92DA ST R13,-Y
0239 92CA ST R12,-Y
push_gset3:
023A 92BA ST R11,-Y
023B 92AA ST R10,-Y
push_gset2:
023C 937A ST R23,-Y
023D 936A ST R22,-Y
push_gset1:
023E 935A ST R21,-Y
023F 934A ST R20,-Y
0240 9508 RET
pop_gset1:
0241 E0E1 LDI R30,1
pop:
0242 9149 LD R20,Y+
0243 9159 LD R21,Y+
0244 FDE0 SBRC R30,0
0245 9508 RET
0246 9169 LD R22,Y+
0247 9179 LD R23,Y+
0248 FDE1 SBRC R30,1
0249 9508 RET
024A 90A9 LD R10,Y+
024B 90B9 LD R11,Y+
024C FDE2 SBRC R30,2
024D 9508 RET
024E 90C9 LD R12,Y+
024F 90D9 LD R13,Y+
0250 FDE3 SBRC R30,3
0251 9508 RET
0252 90E9 LD R14,Y+
0253 90F9 LD R15,Y+
0254 9508 RET
push_lset:
0255 93FA ST R31,-Y
0256 93EA ST R30,-Y
0257 93BA ST R27,-Y
0258 93AA ST R26,-Y
0259 939A ST R25,-Y
025A 938A ST R24,-Y
025B 933A ST R19,-Y
025C 932A ST R18,-Y
025D 931A ST R17,-Y
025E 930A ST R16,-Y
025F 929A ST R9,-Y
0260 928A ST R8,-Y
0261 927A ST R7,-Y
0262 926A ST R6,-Y
0263 925A ST R5,-Y
0264 924A ST R4,-Y
0265 923A ST R3,-Y
0266 922A ST R2,-Y
0267 921A ST R1,-Y
0268 920A ST R0,-Y
0269 B60F IN R0,0x3F
026A 920A ST R0,-Y
026B 9508 RET
pop_lset:
026C 9009 LD R0,Y+
026D BE0F OUT 0x3F,R0
026E 9009 LD R0,Y+
026F 9019 LD R1,Y+
0270 9029 LD R2,Y+
0271 9039 LD R3,Y+
0272 9049 LD R4,Y+
0273 9059 LD R5,Y+
0274 9069 LD R6,Y+
0275 9079 LD R7,Y+
0276 9089 LD R8,Y+
0277 9099 LD R9,Y+
0278 9109 LD R16,Y+
0279 9119 LD R17,Y+
027A 9129 LD R18,Y+
027B 9139 LD R19,Y+
027C 9189 LD R24,Y+
027D 9199 LD R25,Y+
027E 91A9 LD R26,Y+
027F 91B9 LD R27,Y+
0280 91E9 LD R30,Y+
0281 91F9 LD R31,Y+
0282 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -