?? ds18b20.lst
字號:
21C E081 LDI R24,1
21D E090 LDI R25,0
21E 015C MOVW R10,R24
21F C002 RJMP 0x0222
220 24AA CLR R10
221 24BB CLR R11
222 E089 LDI R24,0x9
223 E090 LDI R25,0
224 1784 CP R24,R20
225 0795 CPC R25,R21
226 F418 BCC 0x022A
227 E061 LDI R22,1
228 E070 LDI R23,0
229 C002 RJMP 0x022C
22A 2766 CLR R22
22B 2777 CLR R23
22C 0115 MOVW R2,R10
22D 2A26 OR R2,R22
22E 2A37 OR R3,R23
22F 2022 TST R2
230 F411 BNE 0x0233
231 2033 TST R3
232 F019 BEQ 0x0236
233 E340 LDI R20,0x30
234 E050 LDI R21,0
235 C002 RJMP 0x0238
(0195) else num = 0x30 + num;
236 5D40 SUBI R20,0xD0
237 4F5F SBCI R21,0xFF
(0196)
(0197) PORTA|=(1<<RS);
238 9ADD SBI 0x1B,5
(0198) s_ms(500);
239 EF04 LDI R16,0xF4
23A E011 LDI R17,1
23B DEBA RCALL _s_ms
(0199) PORTA&=~(1<<RW);
23C 98DE CBI 0x1B,6
(0200) s_ms(500);
23D EF04 LDI R16,0xF4
23E E011 LDI R17,1
23F DEB6 RCALL _s_ms
(0201) PORTD = num;
240 BB42 OUT 0x12,R20
(0202) s_ms(500);
241 EF04 LDI R16,0xF4
242 E011 LDI R17,1
243 DEB2 RCALL _s_ms
(0203) PORTA|=(1<<EN);
244 9ADF SBI 0x1B,7
(0204) s_ms(500);
245 EF04 LDI R16,0xF4
246 E011 LDI R17,1
247 DEAE RCALL _s_ms
(0205) PORTA&=~(1<<EN);
248 98DF CBI 0x1B,7
(0206) s_ms(500);
249 EF04 LDI R16,0xF4
24A E011 LDI R17,1
24B DEAA RCALL _s_ms
24C 940C 032C JMP pop_xgsetF00C
_WriteChar:
t --> R12
i --> R10
pBuffer --> R20
num --> Y,+8
col --> R10
row --> R22
24E 940E 0333 CALL push_xgsetF03C
250 2EA2 MOV R10,R18
251 2F60 MOV R22,R16
252 854A LDD R20,Y+10
253 855B LDD R21,Y+11
(0207) }
(0208) //================================================================
(0209) // 描述:在任意位置寫任意多個字符
(0210) // 入口:’row‘要寫的字符所在的行,只能為1或2;
(0211) // ‘col’要寫的字符所在的列,只能為0---15
(0212) // ‘num’要寫字符的個數
(0213) // ‘pbuffer’要寫字符的首地址
(0214) //==================================================================
(0215) void WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
(0216) {
(0217) uchar i,t;
(0218) if (row == 1) row = 0x80 + col;
254 3061 CPI R22,1
255 F419 BNE 0x0259
256 2D6A MOV R22,R10
257 5860 SUBI R22,0x80
258 C002 RJMP 0x025B
(0219) else row = 0xC0 + col;
259 2D6A MOV R22,R10
25A 5460 SUBI R22,0x40
(0220) writecom(row);
25B 2F06 MOV R16,R22
25C DECD RCALL _writecom
(0221) //if (num<=0 | num>9) num =0x30;
(0222) //else num = 0x30 + num;
(0223)
(0224) PORTA|=(1<<RS);
25D 9ADD SBI 0x1B,5
(0225) s_ms(500);
25E EF04 LDI R16,0xF4
25F E011 LDI R17,1
260 DE95 RCALL _s_ms
(0226) PORTA&=~(1<<RW);
261 98DE CBI 0x1B,6
(0227) s_ms(500);
262 EF04 LDI R16,0xF4
263 E011 LDI R17,1
264 DE91 RCALL _s_ms
(0228) for(i=num;i!=0;i--)
265 84A8 LDD R10,Y+8
266 84B9 LDD R11,Y+9
267 C014 RJMP 0x027C
(0229) {
(0230) t = *pBuffer;
268 01FA MOVW R30,R20
269 80C0 LDD R12,Z+0
(0231) s_ms(500);
26A EF04 LDI R16,0xF4
26B E011 LDI R17,1
26C DE89 RCALL _s_ms
(0232) PORTD = t;
26D BAC2 OUT 0x12,R12
(0233) s_ms(500);
26E EF04 LDI R16,0xF4
26F E011 LDI R17,1
270 DE85 RCALL _s_ms
(0234) PORTA|=(1<<EN);
271 9ADF SBI 0x1B,7
(0235) s_ms(500);
272 EF04 LDI R16,0xF4
273 E011 LDI R17,1
274 DE81 RCALL _s_ms
(0236) PORTA&=~(1<<EN);
275 98DF CBI 0x1B,7
(0237) s_ms(500);
276 EF04 LDI R16,0xF4
277 E011 LDI R17,1
278 DE7D RCALL _s_ms
(0238) pBuffer++;
279 5F4F SUBI R20,0xFF
27A 4F5F SBCI R21,0xFF
27B 94AA DEC R10
27C 20AA TST R10
27D F751 BNE 0x0268
27E 940C 033C JMP pop_xgsetF03C
_s_1ms:
aa --> R20
ms --> R16
280 934A ST R20,-Y
281 935A ST R21,-Y
FILE: E:\單片機\16實驗程序\DS18B20\DS18B20\DS18B20_main.c
(0001) //溫度傳感器DS18B20試驗
(0002) //間隔2s采集一次溫度值
(0003) //使用1602的液晶作為顯示
(0004) #include <iom16v.h>
(0005) #include <macros.h>
(0006) #include "18B20.h"
(0007) #include "1602.h"
(0008)
(0009) uchar adc_0[]={"Temperature:"};
(0010) uchar adc_1[]={0xdf,0x43}; //溫度ascii代碼
(0011)
(0012) //延時函數在16M時延時1ms
(0013) void s_1ms(unsigned int ms)
(0014) {
(0015) unsigned int aa;
(0016) for(;ms>=1;ms--)
282 C00C RJMP 0x028F
(0017) {
(0018) for(aa=0;aa<=2000;aa++)
283 2744 CLR R20
284 2755 CLR R21
285 C002 RJMP 0x0288
286 5F4F SUBI R20,0xFF
287 4F5F SBCI R21,0xFF
288 ED80 LDI R24,0xD0
289 E097 LDI R25,7
28A 1784 CP R24,R20
28B 0795 CPC R25,R21
28C F7C8 BCC 0x0286
28D 5001 SUBI R16,1
28E 4010 SBCI R17,0
28F 3001 CPI R16,1
290 E0E0 LDI R30,0
291 071E CPC R17,R30
292 F780 BCC 0x0283
293 9159 LD R21,Y+
294 9149 LD R20,Y+
295 9508 RET
_main:
tem3 --> Y,+5
tem1 --> R10
tem2 --> R12
i --> R10
296 9724 SBIW R28,4
(0019) {;}
(0020) }
(0021) }
(0022)
(0023)
(0024) void main()
(0025) {
(0026) unsigned int i,tem3,tem2,tem1;
(0027) //端口初始化
(0028) DDRA = 0xff;
297 EF8F LDI R24,0xFF
298 BB8A OUT 0x1A,R24
(0029) PORTA = 0x00;
299 2422 CLR R2
29A BA2B OUT 0x1B,R2
(0030) DDRB = 0xFF;
29B BB87 OUT 0x17,R24
(0031) PORTB = 0xF0;
29C EF80 LDI R24,0xF0
29D BB88 OUT 0x18,R24
(0032) DDRC = 0x00;
29E BA24 OUT 0x14,R2
(0033) PORTC = 0xFF;
29F EF8F LDI R24,0xFF
2A0 BB85 OUT 0x15,R24
(0034) DDRD = 0xff;
2A1 BB81 OUT 0x11,R24
(0035) PORTD = 0xff;
2A2 BB82 OUT 0x12,R24
(0036)
(0037) //延時200ms
(0038) s_1ms(200);
2A3 EC08 LDI R16,0xC8
2A4 E010 LDI R17,0
2A5 DFDA RCALL _s_1ms
(0039) //DS18B20復位
(0040) ds1820_reset();
2A6 DDC4 RCALL _ds1820_reset
(0041) //1602 初始化
(0042) LcdInit();
2A7 DE9E RCALL _LcdInit
(0043) WriteChar(1,0,12,adc_0);
2A8 E680 LDI R24,0x60
2A9 E090 LDI R25,0
2AA 839B STD Y+3,R25
2AB 838A STD Y+2,R24
2AC E08C LDI R24,0xC
2AD E090 LDI R25,0
2AE 8399 STD Y+1,R25
2AF 8388 STD Y+0,R24
2B0 2722 CLR R18
2B1 E001 LDI R16,1
2B2 DF9B RCALL _WriteChar
(0044) WriteChar(1,14,2,adc_1);
2B3 E68D LDI R24,0x6D
2B4 E090 LDI R25,0
2B5 839B STD Y+3,R25
2B6 838A STD Y+2,R24
2B7 E082 LDI R24,2
2B8 E090 LDI R25,0
2B9 8399 STD Y+1,R25
2BA 8388 STD Y+0,R24
2BB E02E LDI R18,0xE
2BC E001 LDI R16,1
2BD DF90 RCALL _WriteChar
2BE C037 RJMP 0x02F6
(0045)
(0046) while (1)
(0047) {
(0048) //進行一次轉換
(0049) ds1820_start();
2BF DE0D RCALL _ds1820_start
(0050) s_1ms(1000);
2C0 EE08 LDI R16,0xE8
2C1 E013 LDI R17,3
2C2 DFBD RCALL _s_1ms
(0051) i = ds1820_read_temp(); //讀取溫度數值
2C3 DE0E RCALL _ds1820_read_temp
2C4 0158 MOVW R10,R16
(0052) i = (i * 10) / 16; //數值處理 數值*0.625
2C5 E00A LDI R16,0xA
2C6 E010 LDI R17,0
2C7 0195 MOVW R18,R10
2C8 940E 0315 CALL empy16s
2CA 0158 MOVW R10,R16
2CB 94B6 LSR R11
2CC 94A7 ROR R10
2CD 94B6 LSR R11
2CE 94A7 ROR R10
2CF 94B6 LSR R11
2D0 94A7 ROR R10
2D1 94B6 LSR R11
2D2 94A7 ROR R10
(0053) //第3位沒有顯示
(0054) i = i % 1000;
2D3 EE28 LDI R18,0xE8
2D4 E033 LDI R19,3
2D5 0185 MOVW R16,R10
2D6 940E 02F9 CALL mod16u
2D8 0158 MOVW R10,R16
(0055) //顯示第2位
(0056) tem2= i / 100;
2D9 E624 LDI R18,0x64
2DA E030 LDI R19,0
2DB 940E 02FB CALL div16u
2DD 0168 MOVW R12,R16
(0057) WriteNum(1,12,tem2);
2DE 82D9 STD Y+1,R13
2DF 82C8 STD Y+0,R12
2E0 E02C LDI R18,0xC
2E1 E030 LDI R19,0
2E2 E001 LDI R16,1
2E3 E010 LDI R17,0
2E4 DF21 RCALL _WriteNum
(0058) i = i % 100;
2E5 E624 LDI R18,0x64
2E6 E030 LDI R19,0
2E7 0185 MOVW R16,R10
2E8 940E 02F9 CALL mod16u
(0059) //顯示第1位
(0060) tem1= i / 10;
2EA E02A LDI R18,0xA
2EB E030 LDI R19,0
2EC 940E 02FB CALL div16u
2EE 0158 MOVW R10,R16
(0061) WriteNum(1,13,tem1);
FILE: <library>
2EF 82B9 STD Y+1,R11
2F0 82A8 STD Y+0,R10
2F1 E02D LDI R18,0xD
2F2 E030 LDI R19,0
2F3 E001 LDI R16,1
2F4 E010 LDI R17,0
2F5 DF10 RCALL _WriteNum
2F6 CFC8 RJMP 0x02BF
2F7 9624 ADIW R28,4
2F8 9508 RET
mod16u:
2F9 9468 BSET 6
2FA C001 RJMP xdiv16u
div16u:
2FB 94E8 BCLR 6
xdiv16u:
2FC 92EA ST R14,-Y
2FD 92FA ST R15,-Y
2FE 938A ST R24,-Y
2FF 24EE CLR R14
300 24FF CLR R15
301 E180 LDI R24,0x10
302 0F00 LSL R16
303 1F11 ROL R17
304 1CEE ROL R14
305 1CFF ROL R15
306 16E2 CP R14,R18
307 06F3 CPC R15,R19
308 F018 BCS 0x030C
309 1AE2 SUB R14,R18
30A 0AF3 SBC R15,R19
30B 9503 INC R16
30C 958A DEC R24
30D F7A1 BNE 0x0302
30E F416 BRTC 0x0311
30F 2D0E MOV R16,R14
310 2D1F MOV R17,R15
311 9189 LD R24,Y+
312 90F9 LD R15,Y+
313 90E9 LD R14,Y+
314 9508 RET
empy16s:
315 920A ST R0,-Y
316 921A ST R1,-Y
317 938A ST R24,-Y
318 939A ST R25,-Y
319 9F02 MUL R16,R18
31A 01C0 MOVW R24,R0
31B 9F12 MUL R17,R18
31C 0D90 ADD R25,R0
31D 9F03 MUL R16,R19
31E 0D90 ADD R25,R0
31F 018C MOVW R16,R24
320 9199 LD R25,Y+
321 9189 LD R24,Y+
322 9019 LD R1,Y+
323 9009 LD R0,Y+
324 9508 RET
push_xgsetF00C:
325 937A ST R23,-Y
326 936A ST R22,-Y
327 935A ST R21,-Y
328 934A ST R20,-Y
329 92BA ST R11,-Y
32A 92AA ST R10,-Y
32B 9508 RET
pop_xgsetF00C:
32C 90A9 LD R10,Y+
32D 90B9 LD R11,Y+
32E 9149 LD R20,Y+
32F 9159 LD R21,Y+
330 9169 LD R22,Y+
331 9179 LD R23,Y+
332 9508 RET
push_xgsetF03C:
333 937A ST R23,-Y
334 936A ST R22,-Y
335 935A ST R21,-Y
336 934A ST R20,-Y
337 92DA ST R13,-Y
338 92CA ST R12,-Y
339 92BA ST R11,-Y
33A 92AA ST R10,-Y
33B 9508 RET
pop_xgsetF03C:
33C 90A9 LD R10,Y+
33D 90B9 LD R11,Y+
33E 90C9 LD R12,Y+
33F 90D9 LD R13,Y+
340 9149 LD R20,Y+
341 9159 LD R21,Y+
342 9169 LD R22,Y+
343 9179 LD R23,Y+
344 9508 RET
?? 快捷鍵說明
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -