📄 main.lis
字号:
009C .dbline 66
009C 4395 inc R20
009E L25:
009E .dbline 66
009E 4830 cpi R20,8
00A0 70F3 brlo L22
00A2 X5:
00A2 .dbline 76
00A2 ; SET_OP_1WIRE;
00A2 979A sbi 0x12,7
00A4 .dbline -2
00A4 L21:
00A4 .dbline 0 ; func end
00A4 4991 ld R20,y+
00A6 A990 ld R10,y+
00A8 0895 ret
00AA .dbsym r m 20 c
00AA .dbsym r x 10 c
00AA .dbend
00AA .dbfunc e read_1820 _read_1820 fc
00AA ; temp -> R10
00AA ; k -> R22
00AA ; n -> R20
.even
00AA _read_1820::
00AA 0E940000 xcall push_xgsetF00C
00AE .dbline -1
00AE .dbline 79
00AE ; }
00AE ; unsigned char read_1820()
00AE ; {
00AE .dbline 81
00AE ; unsigned char temp,k,n;
00AE ; temp=0;
00AE AA24 clr R10
00B0 .dbline 82
00B0 ; for(n=0;n<8;n++)
00B0 4427 clr R20
00B2 18C0 xjmp L32
00B4 L29:
00B4 .dbline 83
00B4 ; {
00B4 .dbline 84
00B4 ; CLR_OP_1WIRE;
00B4 9798 cbi 0x12,7
00B6 .dbline 85
00B6 ; SET_OP_1WIRE;
00B6 979A sbi 0x12,7
00B8 .dbline 86
00B8 ; CLR_DIR_1WIRE;
00B8 8F98 cbi 0x11,7
00BA .dbline 87
00BA ; k=(CHECK_IP_1WIRE); //读数据,从低位开始
00BA 60B3 in R22,0x10
00BC 6078 andi R22,128
00BE .dbline 88
00BE ; if(k)
00BE 31F0 breq L33
00C0 X6:
00C0 .dbline 89
00C0 ; temp|=(1<<n);
00C0 01E0 ldi R16,1
00C2 142F mov R17,R20
00C4 0E940000 xcall lsl8
00C8 A02A or R10,R16
00CA 07C0 xjmp L34
00CC L33:
00CC .dbline 91
00CC ; else
00CC ; temp&=~(1<<n);
00CC 01E0 ldi R16,1
00CE 142F mov R17,R20
00D0 0E940000 xcall lsl8
00D4 202E mov R2,R16
00D6 2094 com R2
00D8 A220 and R10,R2
00DA L34:
00DA .dbline 92
00DA ; delay_nus(50); //60~120us
00DA 02E3 ldi R16,50
00DC 10E0 ldi R17,0
00DE 92DF xcall _delay_nus
00E0 .dbline 93
00E0 ; SET_DIR_1WIRE;
00E0 8F9A sbi 0x11,7
00E2 .dbline 94
00E2 ; }
00E2 L30:
00E2 .dbline 82
00E2 4395 inc R20
00E4 L32:
00E4 .dbline 82
00E4 4830 cpi R20,8
00E6 30F3 brlo L29
00E8 X7:
00E8 .dbline 95
00E8 ; return (temp);
00E8 0A2D mov R16,R10
00EA .dbline -2
00EA L28:
00EA .dbline 0 ; func end
00EA 0C940000 xjmp pop_xgsetF00C
00EE .dbsym r temp 10 c
00EE .dbsym r k 22 c
00EE .dbsym r n 20 c
00EE .dbend
00EE .dbfunc e gettemp _gettemp fV
00EE ; wm3 -> R10
00EE ; wm1 -> R10
00EE ; wm0 -> R20
00EE ; teml -> R10
00EE ; temh -> R22
00EE ; wm2 -> R12
.even
00EE _gettemp::
00EE 0E940000 xcall push_xgsetF03C
00F2 .dbline -1
00F2 .dbline 99
00F2 ; }
00F2 ;
00F2 ; void gettemp() //读取温度值
00F2 ; {
00F2 .dbline 101
00F2 ; unsigned char temh,teml,wm0,wm1,wm2,wm3;
00F2 ; init_1820(); //复位18b20
00F2 AEDF xcall _init_1820
00F4 .dbline 102
00F4 ; write_1820(0xcc); // 发出转换命令
00F4 0CEC ldi R16,204
00F6 BEDF xcall _write_1820
00F8 .dbline 103
00F8 ; write_1820(0x44);
00F8 04E4 ldi R16,68
00FA BCDF xcall _write_1820
00FC .dbline 105
00FC ; // delay_nms(800); //不延时也好使,不知道怎么回事!
00FC ; init_1820();
00FC A9DF xcall _init_1820
00FE .dbline 106
00FE ; write_1820(0xcc); //发出读命令
00FE 0CEC ldi R16,204
0100 B9DF xcall _write_1820
0102 .dbline 107
0102 ; write_1820(0xbe);
0102 0EEB ldi R16,190
0104 B7DF xcall _write_1820
0106 .dbline 108
0106 ; teml=read_1820(); //读数据
0106 D1DF xcall _read_1820
0108 A02E mov R10,R16
010A .dbline 109
010A ; temh=read_1820();
010A CFDF xcall _read_1820
010C 602F mov R22,R16
010E .dbline 110
010E ; wm0=teml>>4; //只要高8位的低四位和低8位的高四位,温度范围0~99啦!
010E 4A2D mov R20,R10
0110 4295 swap R20
0112 4F70 andi R20,#0x0F
0114 .dbline 111
0114 ; wm1=temh<<4;
0114 862F mov R24,R22
0116 8F70 andi R24,#0x0F
0118 8295 swap R24
011A .dbline 112
011A ; wm2=wm1+wm0; //16进制转10进制
011A C82E mov R12,R24
011C C40E add R12,R20
011E .dbline 113
011E ; wm3=wm2/100;
011E 14E6 ldi R17,100
0120 0C2D mov R16,R12
0122 0E940000 xcall div8u
0126 A02E mov R10,R16
0128 .dbline 114
0128 ; wmh=(wm2%100)/10; //出口参数了!wmh是显示的高位,wml使显示的低位
0128 14E6 ldi R17,100
012A 0C2D mov R16,R12
012C 0E940000 xcall mod8u
0130 1AE0 ldi R17,10
0132 0E940000 xcall div8u
0136 00930100 sts _wmh,R16
013A .dbline 115
013A ; wml=(wm2%100)%10;
013A 14E6 ldi R17,100
013C 0C2D mov R16,R12
013E 0E940000 xcall mod8u
0142 1AE0 ldi R17,10
0144 0E940000 xcall mod8u
0148 00930000 sts _wml,R16
014C .dbline 116
014C ; show(wm3,2);
014C 22E0 ldi R18,2
014E 30E0 ldi R19,0
0150 0A2D mov R16,R10
0152 1127 clr R17
0154 0E940000 xcall _show
0158 .dbline 117
0158 ; show( wmh,1);
0158 21E0 ldi R18,1
015A 30E0 ldi R19,0
015C 00910100 lds R16,_wmh
0160 1127 clr R17
0162 0E940000 xcall _show
0166 .dbline 118
0166 ; show(wml,0);
0166 2227 clr R18
0168 3327 clr R19
016A 00910000 lds R16,_wml
016E 1127 clr R17
0170 0E940000 xcall _show
0174 .dbline -2
0174 L35:
0174 .dbline 0 ; func end
0174 0C940000 xjmp pop_xgsetF03C
0178 .dbsym r wm3 10 c
0178 .dbsym r wm1 10 c
0178 .dbsym r wm0 20 c
0178 .dbsym r teml 10 c
0178 .dbsym r temh 22 c
0178 .dbsym r wm2 12 c
0178 .dbend
0178 .dbfunc e main _main fV
.even
0178 _main::
0178 .dbline -1
0178 .dbline 126
0178 ; }
0178 ;
0178 ;
0178 ; //延时程序:
0178 ;
0178 ;
0178 ; void main()
0178 ; {smginit();
0178 .dbline 126
0178 0E940000 xcall _smginit
017C .dbline 127
017C ; DDRA=0XFF;
017C 8FEF ldi R24,255
017E 8ABB out 0x1a,R24
0180 .dbline 128
0180 ; DDRC=0XFF;
0180 84BB out 0x14,R24
0182 01C0 xjmp L38
0184 L37:
0184 .dbline 130
0184 ; while(1)
0184 ; {gettemp();}
0184 .dbline 130
0184 B4DF xcall _gettemp
0186 .dbline 130
0186 L38:
0186 .dbline 129
0186 FECF xjmp L37
0188 X8:
0188 .dbline -2
0188 L36:
0188 .dbline 0 ; func end
0188 0895 ret
018A .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\51&av配套光盘\51&avr配套程序\avr程序\24.DS18b20\main.c
0000 _wml::
0000 .blkb 1
0001 .dbsym e wml _wml c
0001 _wmh::
0001 .blkb 1
0002 .dbsym e wmh _wmh c
0002 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -