📄 shiyan.lis
字号:
011E .dbsym r ack 20 c
011E .dbend
011E .dbfunc e ds1820rd _ds1820rd fc
011E ; byte -> R20
011E ; temp -> R10
011E ; i -> R22
.even
011E _ds1820rd::
011E 0E940000 xcall push_xgsetF00C
0122 .dbline -1
0122 .dbline 89
0122 ; }
0122 ;
0122 ; unsigned char ds1820rd()/*读数据*/
0122 ; {
0122 .dbline 91
0122 ; unsigned char i,byte,temp;
0122 ; byte=0x00;
0122 4427 clr R20
0124 .dbline 92
0124 ; for (i=0;i<8;i++)
0124 6627 clr R22
0126 1FC0 xjmp L26
0128 L23:
0128 .dbline 93
0128 ; {
0128 .dbline 94
0128 ; DDRA|=0x01;
0128 D09A sbi 0x1a,0
012A .dbline 95
012A ; PORTA&=0xfe;//给脉冲信号
012A 8BB3 in R24,0x1b
012C 8E7F andi R24,254
012E 8BBB out 0x1b,R24
0130 .dbline 96
0130 ; delay_18B20(3);
0130 03E0 ldi R16,3
0132 10E0 ldi R17,0
0134 D5DF xcall _delay_18B20
0136 .dbline 97
0136 ; PORTA|=0x01;
0136 D89A sbi 0x1b,0
0138 .dbline 98
0138 ; DDRA&=0xfe;
0138 8AB3 in R24,0x1a
013A 8E7F andi R24,254
013C 8ABB out 0x1a,R24
013E .dbline 99
013E ; delay_18B20(10);
013E 0AE0 ldi R16,10
0140 10E0 ldi R17,0
0142 CEDF xcall _delay_18B20
0144 .dbline 100
0144 ; temp=(PINA&0x01);
0144 89B3 in R24,0x19
0146 8170 andi R24,1
0148 A82E mov R10,R24
014A .dbline 101
014A ; if(temp!=0x00)
014A 8823 tst R24
014C 09F0 breq L27
014E X4:
014E .dbline 102
014E ; byte|=0x80;
014E 4068 ori R20,128
0150 L27:
0150 .dbline 103
0150 ; if(i<7)
0150 6730 cpi R22,7
0152 08F4 brsh L29
0154 X5:
0154 .dbline 104
0154 ; byte=byte>>1;
0154 4695 lsr R20
0156 L29:
0156 .dbline 105
0156 ; delay_18B20(100);
0156 04E6 ldi R16,100
0158 10E0 ldi R17,0
015A C2DF xcall _delay_18B20
015C .dbline 106
015C ; DDRA|=0x01;
015C D09A sbi 0x1a,0
015E .dbline 107
015E ; delay_18B20(5);
015E 05E0 ldi R16,5
0160 10E0 ldi R17,0
0162 BEDF xcall _delay_18B20
0164 .dbline 108
0164 ; }
0164 L24:
0164 .dbline 92
0164 6395 inc R22
0166 L26:
0166 .dbline 92
0166 6830 cpi R22,8
0168 F8F2 brlo L23
016A X6:
016A .dbline 109
016A ; return byte;
016A 042F mov R16,R20
016C .dbline -2
016C L22:
016C .dbline 0 ; func end
016C 0C940000 xjmp pop_xgsetF00C
0170 .dbsym r byte 20 c
0170 .dbsym r temp 10 c
0170 .dbsym r i 22 c
0170 .dbend
0170 .dbfunc e ds1820wr _ds1820wr fV
0170 ; i -> R22
0170 ; j -> R10
0170 ; wdata -> R20
.even
0170 _ds1820wr::
0170 0E940000 xcall push_xgsetF00C
0174 402F mov R20,R16
0176 .dbline -1
0176 .dbline 113
0176 ; }
0176 ;
0176 ; void ds1820wr(uchar wdata)/*写数据*/
0176 ; {
0176 .dbline 115
0176 ; unsigned char i,j;
0176 ; DDRA|=0x01;
0176 D09A sbi 0x1a,0
0178 .dbline 116
0178 ; for (j=0;j<=7;j++)
0178 AA24 clr R10
017A 1BC0 xjmp L35
017C L32:
017C .dbline 117
017C ; {
017C .dbline 118
017C ; i=wdata&0x01;
017C 642F mov R22,R20
017E 6170 andi R22,1
0180 .dbline 119
0180 ; if(i==0x01)
0180 6130 cpi R22,1
0182 59F4 brne L36
0184 X7:
0184 .dbline 120
0184 ; {
0184 .dbline 121
0184 ; PORTA&=0xfe;
0184 8BB3 in R24,0x1b
0186 8E7F andi R24,254
0188 8BBB out 0x1b,R24
018A .dbline 122
018A ; delay_18B20(10);
018A 0AE0 ldi R16,10
018C 10E0 ldi R17,0
018E A8DF xcall _delay_18B20
0190 .dbline 123
0190 ; PORTA|=0x01;
0190 D89A sbi 0x1b,0
0192 .dbline 124
0192 ; delay_18B20(100);
0192 04E6 ldi R16,100
0194 10E0 ldi R17,0
0196 A4DF xcall _delay_18B20
0198 .dbline 125
0198 ; }
0198 0AC0 xjmp L37
019A L36:
019A .dbline 127
019A ; else
019A ; {
019A .dbline 128
019A ; PORTA&=0xfe;
019A 8BB3 in R24,0x1b
019C 8E7F andi R24,254
019E 8BBB out 0x1b,R24
01A0 .dbline 129
01A0 ; delay_18B20(100);
01A0 04E6 ldi R16,100
01A2 10E0 ldi R17,0
01A4 9DDF xcall _delay_18B20
01A6 .dbline 130
01A6 ; PORTA|=0x01;
01A6 D89A sbi 0x1b,0
01A8 .dbline 131
01A8 ; delay_18B20(10);
01A8 0AE0 ldi R16,10
01AA 10E0 ldi R17,0
01AC 99DF xcall _delay_18B20
01AE .dbline 132
01AE ; }
01AE L37:
01AE .dbline 133
01AE ; wdata=wdata>>1;
01AE 4695 lsr R20
01B0 .dbline 134
01B0 ; }
01B0 L33:
01B0 .dbline 116
01B0 A394 inc R10
01B2 L35:
01B2 .dbline 116
01B2 87E0 ldi R24,7
01B4 8A15 cp R24,R10
01B6 10F7 brsh L32
01B8 X8:
01B8 .dbline -2
01B8 L31:
01B8 .dbline 0 ; func end
01B8 0C940000 xjmp pop_xgsetF00C
01BC .dbsym r i 22 c
01BC .dbsym r j 10 c
01BC .dbsym r wdata 20 c
01BC .dbend
01BC .dbfunc e asc2con _asc2con fV
01BC ; i -> R10
01BC ; temp -> R20
01BC ; len -> R12
01BC ; q -> R14,R15
.even
01BC _asc2con::
01BC 0E940000 xcall push_xgset30FC
01C0 C22E mov R12,R18
01C2 7801 movw R14,R16
01C4 .dbline -1
01C4 .dbline 138
01C4 ; }
01C4 ; /************将十六进制转换成ASCII码,并送LCD显示****************/
01C4 ; void asc2con(unsigned char *q,unsigned char len)
01C4 ; {
01C4 .dbline 140
01C4 ; unsigned char temp,i;
01C4 ; wr_com(0xc0);
01C4 00EC ldi R16,192
01C6 30DF xcall _wr_com
01C8 .dbline 141
01C8 ; for(i=0;i<len;i++)
01C8 AA24 clr R10
01CA 2BC0 xjmp L42
01CC L39:
01CC .dbline 142
01CC ; {
01CC .dbline 143
01CC ; temp=q[len-1-i]&0xf0;
01CC 2A2C mov R2,R10
01CE 3324 clr R3
01D0 EC2D mov R30,R12
01D2 FF27 clr R31
01D4 3197 sbiw R30,1
01D6 E219 sub R30,R2
01D8 F309 sbc R31,R3
01DA EE0D add R30,R14
01DC FF1D adc R31,R15
01DE 4081 ldd R20,z+0
01E0 407F andi R20,240
01E2 .dbline 144
01E2 ; temp=temp>>4;
01E2 842F mov R24,R20
01E4 8295 swap R24
01E6 8F70 andi R24,#0x0F
01E8 482F mov R20,R24
01EA .dbline 145
01EA ; wr_dat(dispcode[temp]);
01EA 80E0 ldi R24,<_dispcode
01EC 90E0 ldi R25,>_dispcode
01EE E42F mov R30,R20
01F0 FF27 clr R31
01F2 E80F add R30,R24
01F4 F91F adc R31,R25
01F6 0081 ldd R16,z+0
01F8 2ADF xcall _wr_dat
01FA .dbline 146
01FA ; temp=q[len-1-i]&0x0f;
01FA 2A2C mov R2,R10
01FC 3324 clr R3
01FE EC2D mov R30,R12
0200 FF27 clr R31
0202 3197 sbiw R30,1
0204 E219 sub R30,R2
0206 F309 sbc R31,R3
0208 EE0D add R30,R14
020A FF1D adc R31,R15
020C 4081 ldd R20,z+0
020E 4F70 andi R20,15
0210 .dbline 147
0210 ; wr_dat(dispcode[temp]);
0210 80E0 ldi R24,<_dispcode
0212 90E0 ldi R25,>_dispcode
0214 E42F mov R30,R20
0216 FF27 clr R31
0218 E80F add R30,R24
021A F91F adc R31,R25
021C 0081 ldd R16,z+0
021E 17DF xcall _wr_dat
0220 .dbline 148
0220 ; }
0220 L40:
0220 .dbline 141
0220 A394 inc R10
0222 L42:
0222 .dbline 141
0222 AC14 cp R10,R12
0224 08F4 brsh X10
0226 D2CF xjmp L39
0228 X10:
0228 X9:
0228 .dbline -2
0228 L38:
0228 .dbline 0 ; func end
0228 0C940000 xjmp pop_xgset30FC
022C .dbsym r i 10 c
022C .dbsym r temp 20 c
022C .dbsym r len 12 c
022C .dbsym r q 14 pc
022C .dbend
022C .dbfunc e main _main fV
022C ; a -> y+0
022C ; i -> R20
.even
022C _main::
022C 2897 sbiw R28,8
022E .dbline -1
022E .dbline 152
022E ; }
022E ; /********************主程序***********************************/
022E ; void main()
022E ; {
022E .dbline 154
022E ; unsigned char a[8],i;
022E ; lcd_init();
022E 22DF xcall _lcd_init
0230 .dbline 155
0230 ; display(str1);
0230 00E0 ldi R16,<_str1
0232 10E0 ldi R17,>_str1
0234 42DF xcall _display
0236 .dbline 156
0236 ; ds1820rst();
0236 5CDF xcall _ds1820rst
0238 .dbline 157
0238 ; delay1ms(1);
0238 01E0 ldi R16,1
023A 10E0 ldi R17,0
023C E1DE xcall _delay1ms
023E .dbline 158
023E ; ds1820wr(0x33);
023E 03E3 ldi R16,51
0240 97DF xcall _ds1820wr
0242 .dbline 159
0242 ; for(i=0;i<8;i++)
0242 4427 clr R20
0244 08C0 xjmp L47
0246 L44:
0246 .dbline 160
0246 ; {
0246 .dbline 161
0246 ; a[i]=ds1820rd();
0246 6BDF xcall _ds1820rd
0248 CE01 movw R24,R28
024A E42F mov R30,R20
024C FF27 clr R31
024E E80F add R30,R24
0250 F91F adc R31,R25
0252 0083 std z+0,R16
0254 .dbline 162
0254 ; }
0254 L45:
0254 .dbline 159
0254 4395 inc R20
0256 L47:
0256 .dbline 159
0256 4830 cpi R20,8
0258 B0F3 brlo L44
025A X11:
025A .dbline 163
025A ; asc2con(a,8);
025A 28E0 ldi R18,8
025C 8E01 movw R16,R28
025E AEDF xcall _asc2con
0260 L48:
0260 .dbline 164
0260 ; while(1);
0260 L49:
0260 .dbline 164
0260 FFCF xjmp L48
0262 X12:
0262 .dbline -2
0262 L43:
0262 .dbline 0 ; func end
0262 2896 adiw R28,8
0264 0895 ret
0266 .dbsym l a 0 A[8:8]c
0266 .dbsym r i 20 c
0266 .dbend
0266 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -