📄 tmp.lis
字号:
011E ; r -> R14
011E ; cbit -> y+0
011E ; bit0 -> R8
011E ; i -> R10
011E ; byte -> R12
011E ; temp -> R22
011E ; len -> R6
011E ; p -> R4,R5
.even
011E _crccheck::
011E 0E940000 xcall push_gset5
0122 622E mov R6,R18
0124 2801 movw R4,R16
0126 2197 sbiw R28,1
0128 ; write(p[i]);
0128 ; }
0128 ;
0128 ; unsigned char crccheck(unsigned char *p,unsigned char len)
0128 ; {
0128 ; unsigned char bit0,cbit,r,temp,i,j,byte;
0128 ; temp=0;
0128 6627 clr R22
012A ; for(j=0;j<len;j++)
012A 4427 clr R20
012C 20C0 xjmp L40
012E L37:
012E ; {
012E ; byte=p[j];
012E E42F mov R30,R20
0130 FF27 clr R31
0132 E40D add R30,R4
0134 F51D adc R31,R5
0136 C080 ldd R12,z+0
0138 ; for(i=0;i<8;i++)
0138 AA24 clr R10
013A 15C0 xjmp L44
013C L41:
013C ; {
013C ; cbit=temp&0x01;
013C 862F mov R24,R22
013E 8170 andi R24,1
0140 8883 std y+0,R24
0142 ; bit0=byte&0x01;
0142 8C2D mov R24,R12
0144 8170 andi R24,1
0146 882E mov R8,R24
0148 ; temp=temp>>1;
0148 6695 lsr R22
014A ; r=cbit^bit0;
014A E880 ldd R14,y+0
014C E826 eor R14,R24
014E ; if(r==1)
014E 8E2D mov R24,R14
0150 8130 cpi R24,1
0152 39F4 brne L45
0154 ; temp=temp^0x8c;
0154 8CE8 ldi R24,140
0156 90E0 ldi R25,0
0158 262E mov R2,R22
015A 3324 clr R3
015C 2826 eor R2,R24
015E 3926 eor R3,R25
0160 622D mov R22,R2
0162 L45:
0162 C694 lsr R12
0164 L42:
0164 A394 inc R10
0166 L44:
0166 8A2D mov R24,R10
0168 8830 cpi R24,8
016A 40F3 brlo L41
016C L38:
016C 4395 inc R20
016E L40:
016E 4615 cp R20,R6
0170 F0F2 brlo L37
0172 ; byte=byte>>1;
0172 ; }
0172 ; }
0172 ; return temp;
0172 062F mov R16,R22
0174 L36:
0174 2196 adiw R28,1
0176 0E940000 xcall pop_gset5
017A .dbline 0 ; func end
017A 0895 ret
017C ; check -> R10
017C ; temp0 -> R12
017C ; crc -> R20
017C ; temp -> y+17
017C ; asctop -> R14,R15
017C ; romcode -> y+9
017C ; ds -> y+0
017C ; i -> R22
.even
017C _get_tmp::
017C 0E940000 xcall push_gset5
0180 6297 sbiw R28,18
0182 ; }
0182 ;
0182 ; /*void asctocon(unsigned char *p,unsigned char len)
0182 ; {
0182 ; unsigned char i,temp;
0182 ; for(i=0;i<len;i++)
0182 ; {
0182 ; temp=p[len-1-i]&0xf0;
0182 ; temp=temp>>4;
0182 ; lcd_putc(table[temp]);
0182 ; temp=p[len-1-i]&0x0f;
0182 ; lcd_putc(table[temp]);
0182 ; }
0182 ; }*/
0182 ;
0182 ; unsigned char get_tmp()
0182 ; {
0182 ; unsigned char i,crc,check;
0182 ; unsigned char ds[9];
0182 ; unsigned char romcode[8];
0182 ; unsigned char *asctop;
0182 ; unsigned char temp,temp0;
0182 ; //unsigned int temp;
0182 ;
0182 ; //MCUCR=0x00;
0182 ; //lcd_init();
0182 ; //lcd_clear();
0182 ; //lcd_gotoxy(0,0);
0182 ; //lcd_puts("SERIAL NUMBER IS");
0182 ;
0182 ; ack();
0182 57DF xcall _ack
0184 ;
0184 ; write(0x33);
0184 03E3 ldi R16,51
0186 6EDF xcall _write
0188 ; for(i=0;i<8;i++)
0188 6627 clr R22
018A 09C0 xjmp L51
018C L48:
018C 8FDF xcall _read
018E CE01 movw R24,R28
0190 0996 adiw R24,9
0192 E62F mov R30,R22
0194 FF27 clr R31
0196 E80F add R30,R24
0198 F91F adc R31,R25
019A 0083 std z+0,R16
019C L49:
019C 6395 inc R22
019E L51:
019E 6830 cpi R22,8
01A0 A8F3 brlo L48
01A2 ; romcode[i]=read();
01A2 ;
01A2 ;
01A2 ;
01A2 ; //asctop=&romcod[0];
01A2 ; //crc=crccheck(asctop,8);
01A2 ; //if(crc==0x00)
01A2 ; //{
01A2 ; // lcd_gotoxy(0,1);
01A2 ; // asctop=&romcode[0];
01A2 ; // asctocon(asctop,8);
01A2 ; //}
01A2 ; //delay(2000);
01A2 ; //while(1)
01A2 ; //{
01A2 ; asctop=&romcode[0];
01A2 CE01 movw R24,R28
01A4 0996 adiw R24,9
01A6 ; match(asctop);
01A6 8C01 movw R16,R24
01A8 A6DF xcall _match
01AA ; write(0x44);
01AA 04E4 ldi R16,68
01AC 5BDF xcall _write
01AE ; delay_18b20(400);
01AE 00E9 ldi R16,400
01B0 11E0 ldi R17,1
01B2 2EDF xcall _delay_18b20
01B4 ; asctop=&romcode[0];
01B4 CE01 movw R24,R28
01B6 0996 adiw R24,9
01B8 7C01 movw R14,R24
01BA ; match(asctop);
01BA 8C01 movw R16,R24
01BC 9CDF xcall _match
01BE ; write(0xbe);
01BE 0EEB ldi R16,190
01C0 51DF xcall _write
01C2 ; for(i=0;i<9;i++)
01C2 6627 clr R22
01C4 08C0 xjmp L55
01C6 L52:
01C6 72DF xcall _read
01C8 CE01 movw R24,R28
01CA E62F mov R30,R22
01CC FF27 clr R31
01CE E80F add R30,R24
01D0 F91F adc R31,R25
01D2 0083 std z+0,R16
01D4 L53:
01D4 6395 inc R22
01D6 L55:
01D6 6930 cpi R22,9
01D8 B0F3 brlo L52
01DA ; ds[i]=read();
01DA ; //lcd_clear();
01DA ; //lcd_puts("Thermometer");
01DA ; asctop=&ds[0];
01DA CE01 movw R24,R28
01DC 7C01 movw R14,R24
01DE ; crc=crccheck(asctop,9);
01DE 29E0 ldi R18,9
01E0 8C01 movw R16,R24
01E2 9DDF xcall _crccheck
01E4 402F mov R20,R16
01E6 ; if(crc==0x00)
01E6 0023 tst R16
01E8 D1F4 brne L56
01EA ; {
01EA ; temp0=ds[0];
01EA C880 ldd R12,y+0
01EC ; temp=ds[1];
01EC 2980 ldd R2,y+1
01EE 298A std y+17,R2
01F0 ; check=temp&0xf8;
01F0 822D mov R24,R2
01F2 887F andi R24,248
01F4 A82E mov R10,R24
01F6 ; if(check==0x00)
01F6 8823 tst R24
01F8 81F4 brne L59
01FA ; {
01FA ; temp0=temp0&0xf8;
01FA 8C2D mov R24,R12
01FC 887F andi R24,248
01FE C82E mov R12,R24
0200 ; temp0=temp0>>3;
0200 C694 lsr R12
0202 C694 lsr R12
0204 C694 lsr R12
0206 ; temp=temp<<5;
0206 022C mov R0,R2
0208 000C lsl R0
020A 000C lsl R0
020C 000C lsl R0
020E 000C lsl R0
0210 000C lsl R0
0212 098A std y+17,R0
0214 ; temp=temp|temp0;
0214 0C28 or R0,R12
0216 098A std y+17,R0
0218 ; //temp=temp-0x01;
0218 ; //temp=ds[0];
0218 ; }
0218 02C0 xjmp L60
021A L59:
021A ; else
021A ; {
021A ; temp=0x00;
021A 0024 clr R0
021C 098A std y+17,R0
021E ; }
021E L60:
021E ; //asctop=&ds[0];
021E ; //asctocon(asctop,2);
021E ; }
021E L56:
021E ; /*if(crc==0x00)
021E ; {
021E ; temp=ds[1];
021E ; temp=temp<<8;
021E ; temp+=ds[0];
021E ; asctop=&ds[0];
021E ; asctocon(asctop,2);
021E ; }
021E ; lcd_gotoxy(0,1);
021E ; if((temp&0xf800)!=0)
021E ; {
021E ; temp=0-temp;
021E ; lcd_puts("-");
021E ; }
021E ; else
021E ; lcd_puts("+");
021E ; crc=temp/16;
021E ; for(i=0;i<3;i++)
021E ; {
021E ; ds[2-i]=table[crc%10];
021E ; crc=crc/10;
021E ; }
021E ; ds[3]='.';
021E ; crc=temp%16;
021E ; crc=crc*10;
021E ; ds[4]=table[crc/16];
021E ; ds[5]=0xdf;
021E ; ds[6]='C';*/
021E ; //}
021E ; return(temp);
021E 0989 ldd R16,y+17
0220 L47:
0220 6296 adiw R28,18
0222 0E940000 xcall pop_gset5
0226 .dbline 0 ; func end
0226 0895 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -