📄 温度测量.lis
字号:
02CE .dbline 196
02CE ; wr_com(0xc3);
02CE 03EC ldi R16,195
02D0 ABDE xcall _wr_com
02D2 .dbline 197
02D2 ; wr_dat(adata[2]);//显示个位
02D2 00910600 lds R16,_adata+2
02D6 BBDE xcall _wr_dat
02D8 .dbline 198
02D8 ; wr_com(0xc4);
02D8 04EC ldi R16,196
02DA A6DE xcall _wr_com
02DC .dbline 199
02DC ; wr_dat(0x2e);//显示小数点
02DC 0EE2 ldi R16,46
02DE B7DE xcall _wr_dat
02E0 .dbline 200
02E0 ; wr_com(0xc5);
02E0 05EC ldi R16,197
02E2 A2DE xcall _wr_com
02E4 .dbline 201
02E4 ; wr_dat(adata[3]);//显示小数位
02E4 00910700 lds R16,_adata+3
02E8 B2DE xcall _wr_dat
02EA .dbline -2
02EA L38:
02EA .dbline 0 ; func end
02EA 4991 ld R20,y+
02EC 0895 ret
02EE .dbsym r flagdat 20 c
02EE .dbend
02EE .dbfunc e readandisp_temp _readandisp_temp fV
02EE ; b -> R12
02EE ; a -> R10
02EE ; i -> R20
.even
02EE _readandisp_temp::
02EE 0E940000 xcall push_xgset303C
02F2 .dbline -1
02F2 .dbline 205
02F2 ; }
02F2 ; /*******************读取温度值并转换********************************/
02F2 ; void readandisp_temp()
02F2 ; {
02F2 .dbline 207
02F2 ; unsigned char a,b,i;
02F2 ; DDRB|=0xFF;
02F2 87B3 in R24,0x17
02F4 8F6F ori R24,255
02F6 87BB out 0x17,R24
02F8 .dbline 208
02F8 ; DDRA|=(1<<3)|(1<<4)|(1<<5);
02F8 8AB3 in R24,0x1a
02FA 8863 ori R24,56
02FC 8ABB out 0x1a,R24
02FE .dbline 209
02FE ; lcd_init();
02FE BADE xcall _lcd_init
0300 .dbline 210
0300 ; for(n=0;n<4;n++)
0300 2224 clr R2
0302 20920300 sts _n,R2
0306 82C0 xjmp L65
0308 L62:
0308 .dbline 211
0308 ; {
0308 L66:
0308 .dbline 213
0308 ; do
0308 ; i=ds1820rst();
0308 F3DE xcall _ds1820rst
030A 402F mov R20,R16
030C L67:
030C .dbline 214
030C ; while(i==0x01);
030C 4130 cpi R20,1
030E E1F3 breq L66
0310 X16:
0310 .dbline 215
0310 ; ds1820wr(0xCC);
0310 0CEC ldi R16,204
0312 2EDF xcall _ds1820wr
0314 .dbline 216
0314 ; ds1820wr(0x44);
0314 04E4 ldi R16,68
0316 2CDF xcall _ds1820wr
0318 .dbline 217
0318 ; delay_18B20(600);
0318 08E5 ldi R16,600
031A 12E0 ldi R17,2
031C E1DE xcall _delay_18B20
031E L69:
031E .dbline 219
031E ; do
031E ; i=ds1820rst();
031E E8DE xcall _ds1820rst
0320 402F mov R20,R16
0322 L70:
0322 .dbline 220
0322 ; while(i==0x01);
0322 4130 cpi R20,1
0324 E1F3 breq L69
0326 X17:
0326 .dbline 221
0326 ; ds1820wr(0x55);//匹配
0326 05E5 ldi R16,85
0328 23DF xcall _ds1820wr
032A .dbline 222
032A ; for(i=0;i<8;i++)
032A 4427 clr R20
032C 14C0 xjmp L75
032E L72:
032E .dbline 223
032E ; {
032E .dbline 224
032E ; ds1820wr(str5[n][i]);
032E 80E0 ldi R24,<_str5
0330 90E0 ldi R25,>_str5
0332 20900300 lds R2,_n
0336 3324 clr R3
0338 220C lsl R2
033A 331C rol R3
033C 220C lsl R2
033E 331C rol R3
0340 220C lsl R2
0342 331C rol R3
0344 280E add R2,R24
0346 391E adc R3,R25
0348 E42F mov R30,R20
034A FF27 clr R31
034C E20D add R30,R2
034E F31D adc R31,R3
0350 0081 ldd R16,z+0
0352 0EDF xcall _ds1820wr
0354 .dbline 225
0354 ; }
0354 L73:
0354 .dbline 222
0354 4395 inc R20
0356 L75:
0356 .dbline 222
0356 4830 cpi R20,8
0358 50F3 brlo L72
035A X18:
035A .dbline 226
035A ; ds1820wr(0xbe);
035A 0EEB ldi R16,190
035C 09DF xcall _ds1820wr
035E .dbline 227
035E ; a=ds1820rd();
035E DFDE xcall _ds1820rd
0360 A02E mov R10,R16
0362 .dbline 228
0362 ; b=ds1820rd();
0362 DDDE xcall _ds1820rd
0364 C02E mov R12,R16
0366 .dbline 229
0366 ; ds1820rst();
0366 C4DE xcall _ds1820rst
0368 .dbline 230
0368 ; tvalue=b;
0368 2C2C mov R2,R12
036A 3324 clr R3
036C 30920200 sts _tvalue+1,R3
0370 20920100 sts _tvalue,R2
0374 .dbline 231
0374 ; tvalue<<=8;
0374 322C mov R3,R2
0376 2224 clr R2
0378 30920200 sts _tvalue+1,R3
037C 20920100 sts _tvalue,R2
0380 .dbline 232
0380 ; tvalue=tvalue|a;
0380 2A2C mov R2,R10
0382 3324 clr R3
0384 40900100 lds R4,_tvalue
0388 50900200 lds R5,_tvalue+1
038C 4228 or R4,R2
038E 5328 or R5,R3
0390 50920200 sts _tvalue+1,R5
0394 40920100 sts _tvalue,R4
0398 .dbline 233
0398 ; if(tvalue<0x0fff)
0398 C201 movw R24,R4
039A 8F3F cpi R24,255
039C EFE0 ldi R30,15
039E 9E07 cpc R25,R30
03A0 20F4 brsh L76
03A2 X19:
03A2 .dbline 234
03A2 ; tflag=0;
03A2 2224 clr R2
03A4 20920000 sts _tflag,R2
03A8 0EC0 xjmp L77
03AA L76:
03AA .dbline 236
03AA ; else
03AA ; {
03AA .dbline 237
03AA ; tvalue=~tvalue+1;
03AA 80910100 lds R24,_tvalue
03AE 90910200 lds R25,_tvalue+1
03B2 8095 com R24
03B4 9095 com R25
03B6 0196 adiw R24,1
03B8 90930200 sts _tvalue+1,R25
03BC 80930100 sts _tvalue,R24
03C0 .dbline 238
03C0 ; tflag=1;
03C0 81E0 ldi R24,1
03C2 80930000 sts _tflag,R24
03C6 .dbline 239
03C6 ; }
03C6 L77:
03C6 .dbline 240
03C6 ; tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
03C6 00E0 ldi R16,<L78
03C8 10E0 ldi R17,>L78
03CA 0E940000 xcall lpm32
03CE 1801 movw R2,R16
03D0 2901 movw R4,R18
03D2 00910100 lds R16,_tvalue
03D6 10910200 lds R17,_tvalue+1
03DA 0E940000 xcall uint2fp
03DE 3A93 st -y,R19
03E0 2A93 st -y,R18
03E2 1A93 st -y,R17
03E4 0A93 st -y,R16
03E6 8101 movw R16,R2
03E8 9201 movw R18,R4
03EA 0E940000 xcall fpmule2
03EE 0E940000 xcall fpint
03F2 10930200 sts _tvalue+1,R17
03F6 00930100 sts _tvalue,R16
03FA .dbline 241
03FA ; ds1820disp();
03FA E0DE xcall _ds1820disp
03FC .dbline 242
03FC ; delay1ms(1000);
03FC 08EE ldi R16,1000
03FE 13E0 ldi R17,3
0400 FFDD xcall _delay1ms
0402 .dbline 243
0402 ; }
0402 L63:
0402 .dbline 210
0402 80910300 lds R24,_n
0406 8F5F subi R24,255 ; addi 1
0408 80930300 sts _n,R24
040C L65:
040C .dbline 210
040C 80910300 lds R24,_n
0410 8430 cpi R24,4
0412 08F4 brsh X21
0414 79CF xjmp L62
0416 X21:
0416 X20:
0416 .dbline -2
0416 L61:
0416 .dbline 0 ; func end
0416 0C940000 xjmp pop_xgset303C
041A .dbsym r b 12 c
041A .dbsym r a 10 c
041A .dbsym r i 20 c
041A .dbend
041A .dbfunc e main _main fV
.even
041A _main::
041A .dbline -1
041A .dbline 247
041A ; }
041A ; /********************主程序***********************************/
041A ; void main()
041A ; {
041A 01C0 xjmp L81
041C L80:
041C .dbline 249
041C ; while(1)
041C ; {
041C .dbline 250
041C ; readandisp_temp();//读取和显示温度
041C 68DF xcall _readandisp_temp
041E .dbline 251
041E ; }
041E L81:
041E .dbline 248
041E FECF xjmp L80
0420 X22:
0420 .dbline -2
0420 L79:
0420 .dbline 0 ; func end
0420 0895 ret
0422 .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\徐胜辉\桌面\新建文件夹\温度测量.c
0000 _tflag::
0000 .blkb 1
0001 .dbsym e tflag _tflag c
0001 _tvalue::
0001 .blkb 2
0003 .dbsym e tvalue _tvalue i
0003 _n::
0003 .blkb 1
0004 .dbsym e n _n c
0004 _adata::
0004 .blkb 5
0009 .dbsym e adata _adata A[5:5]c
.area lit(rom, con, rel)
0000 L78:
0000 0000203F .word 0x0,0x3f20
0004 ;
0004 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -