tmp.s
来自「mega128平台下」· S 代码 · 共 611 行
S
611 行
.module tmp.c
.area text(rom, con, rel)
.even
_TOSH_READ_S_PIN::
; #include <iom128v.h>
; typedef unsigned char uint8_t;
; typedef unsigned int uint16_t;
; #define TOSH_MAKE_S_OUTPUT() { DDRC |= 1<<7;}
; #define TOSH_MAKE_S_INPUT() { DDRC &= ~(1<<7);}
; #define TOSH_CLR_S_PIN() { PORTC &= ~(1<<7);}
; #define TOSH_SET_S_PIN() { PORTC |= (1<<7);}
; //unsigned char TOSH_READ_S_PIN(){return ((PINC & (1 << 7)) != 0);}
; char TOSH_READ_S_PIN(void){return (* (volatile unsigned char *)(unsigned int )& * (volatile unsigned char *)(0x13 + 0x20) & (1 << 7)) != 0;}
sbis 0x13,7
rjmp L2
ldi R16,1
ldi R17,0
xjmp L3
L2:
clr R16
clr R17
L3:
L1:
.dbline 0 ; func end
ret
.area lit(rom, con, rel)
_table::
.byte 48,49,50,51,52,53,54,55,56,57,'A,'B,'C,'D,'E,'F
.byte 0
.area text(rom, con, rel)
; i -> R20
; count -> R16,R17
.even
_delay_18b20::
xcall push_gset1
;
; const unsigned char table[]="0123456789ABCDEF";
;
; void delay_18b20(uint16_t count)
; {
xjmp L6
L5:
; uint8_t i;
; while(count)
; {
; i=2;
ldi R20,2
xjmp L9
L8:
dec R20
L9:
clr R2
cp R2,R20
brlo L8
subi R16,1
sbci R17,0
L6:
cpi R16,0
cpc R16,R17
brne L5
X0:
L4:
xcall pop_gset1
.dbline 0 ; func end
ret
; acke -> R20
.even
_ack::
xcall push_gset1
; while(i>0) i--;
; count--;
; }
; }
;
;
; void ack()
; {
; uint8_t acke;
; TOSH_MAKE_S_OUTPUT();
sbi 0x14,7
; TOSH_CLR_S_PIN();
cbi 0x15,7
; delay_18b20(250);
ldi R16,250
ldi R17,0
xcall _delay_18b20
; TOSH_MAKE_S_OUTPUT();
sbi 0x14,7
; TOSH_SET_S_PIN();
sbi 0x15,7
; delay_18b20(10);
ldi R16,10
ldi R17,0
xcall _delay_18b20
;
; TOSH_MAKE_S_INPUT();
cbi 0x14,7
; //delay(10);
;
; acke=TOSH_READ_S_PIN();
xcall _TOSH_READ_S_PIN
mov R20,R16
L12:
;
;
; do{
;
; acke=TOSH_READ_S_PIN();
xcall _TOSH_READ_S_PIN
mov R20,R16
L13:
;
; }while(acke);
tst R20
brne L12
;
; delay_18b20(50);
ldi R16,50
ldi R17,0
xcall _delay_18b20
L11:
xcall pop_gset1
.dbline 0 ; func end
ret
; i -> R10
; j -> R20
; cmd -> R22
.even
_write::
xcall push_gset3
mov R22,R16
;
;
; // led0Toggle();
; }
;
; void write(unsigned char cmd)
; {
; unsigned char i,j;
; TOSH_MAKE_S_OUTPUT();
sbi 0x14,7
; for(j=0;j<=7;j++)
clr R20
xjmp L19
L16:
; {
; i=cmd&0x01;
mov R24,R22
andi R24,1
mov R10,R24
; if(i==0x01)
cpi R24,1
brne L20
; {
; TOSH_CLR_S_PIN();
cbi 0x15,7
; delay_18b20(1);
ldi R16,1
ldi R17,0
xcall _delay_18b20
; TOSH_SET_S_PIN();
sbi 0x15,7
; delay_18b20(20);
ldi R16,20
ldi R17,0
xcall _delay_18b20
; }
xjmp L21
L20:
; else
; {
; TOSH_CLR_S_PIN();
cbi 0x15,7
; delay_18b20(20);
ldi R16,20
ldi R17,0
xcall _delay_18b20
; TOSH_SET_S_PIN();
sbi 0x15,7
; delay_18b20(1);
ldi R16,1
ldi R17,0
xcall _delay_18b20
; }
L21:
lsr R22
L17:
inc R20
L19:
ldi R24,7
cp R24,R20
brsh L16
L15:
xcall pop_gset3
.dbline 0 ; func end
ret
; byte -> R20
; i -> R22
; temp -> R10
.even
_read::
xcall push_gset3
; cmd=cmd>>1;
; }
; }
;
; unsigned char read()
; {
; unsigned char i,byte,temp;
; byte=0x00;
clr R20
; for(i=0;i<8;i++)
clr R22
xjmp L26
L23:
; {
; TOSH_MAKE_S_OUTPUT();
sbi 0x14,7
; TOSH_CLR_S_PIN();
cbi 0x15,7
; delay_18b20(3);
ldi R16,3
ldi R17,0
xcall _delay_18b20
; TOSH_SET_S_PIN();
sbi 0x15,7
; TOSH_MAKE_S_INPUT();
cbi 0x14,7
; //delay(1);
; temp=TOSH_READ_S_PIN();//less than 500ns above 2.5V
xcall _TOSH_READ_S_PIN
mov R10,R16
; temp=temp&0x01;
mov R24,R10
andi R24,1
mov R10,R24
; if(temp!=0x00)
tst R24
breq L27
; byte|=0x80;
ori R20,128
L27:
; if(i<7)
cpi R22,7
brsh L29
; byte=byte>>1;
lsr R20
L29:
ldi R16,50
ldi R17,0
xcall _delay_18b20
sbi 0x14,7
ldi R16,5
ldi R17,0
xcall _delay_18b20
L24:
inc R22
L26:
cpi R22,8
brlo L23
; delay_18b20(50);
; TOSH_MAKE_S_OUTPUT();
; delay_18b20(5);
; }
; return byte;
mov R16,R20
L22:
xcall pop_gset3
.dbline 0 ; func end
ret
; i -> R20
; p -> R22,R23
.even
_match::
xcall push_gset2
movw R22,R16
; }
;
; void match(unsigned char *p)
; {
; unsigned char i;
; ack();
xcall _ack
; write(0x55);
ldi R16,85
xcall _write
; for(i=0;i<8;i++)
clr R20
xjmp L35
L32:
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R16,z+0
xcall _write
L33:
inc R20
L35:
cpi R20,8
brlo L32
L31:
xcall pop_gset2
.dbline 0 ; func end
ret
; j -> R20
; r -> R14
; cbit -> y+0
; bit0 -> R8
; i -> R10
; byte -> R12
; temp -> R22
; len -> R6
; p -> R4,R5
.even
_crccheck::
xcall push_gset5
mov R6,R18
movw R4,R16
sbiw R28,1
; write(p[i]);
; }
;
; unsigned char crccheck(unsigned char *p,unsigned char len)
; {
; unsigned char bit0,cbit,r,temp,i,j,byte;
; temp=0;
clr R22
; for(j=0;j<len;j++)
clr R20
xjmp L40
L37:
; {
; byte=p[j];
mov R30,R20
clr R31
add R30,R4
adc R31,R5
ldd R12,z+0
; for(i=0;i<8;i++)
clr R10
xjmp L44
L41:
; {
; cbit=temp&0x01;
mov R24,R22
andi R24,1
std y+0,R24
; bit0=byte&0x01;
mov R24,R12
andi R24,1
mov R8,R24
; temp=temp>>1;
lsr R22
; r=cbit^bit0;
ldd R14,y+0
eor R14,R24
; if(r==1)
mov R24,R14
cpi R24,1
brne L45
; temp=temp^0x8c;
ldi R24,140
ldi R25,0
mov R2,R22
clr R3
eor R2,R24
eor R3,R25
mov R22,R2
L45:
lsr R12
L42:
inc R10
L44:
mov R24,R10
cpi R24,8
brlo L41
L38:
inc R20
L40:
cp R20,R6
brlo L37
; byte=byte>>1;
; }
; }
; return temp;
mov R16,R22
L36:
adiw R28,1
xcall pop_gset5
.dbline 0 ; func end
ret
; check -> R10
; temp0 -> R12
; crc -> R20
; temp -> y+17
; asctop -> R14,R15
; romcode -> y+9
; ds -> y+0
; i -> R22
.even
_get_tmp::
xcall push_gset5
sbiw R28,18
; }
;
; /*void asctocon(unsigned char *p,unsigned char len)
; {
; unsigned char i,temp;
; for(i=0;i<len;i++)
; {
; temp=p[len-1-i]&0xf0;
; temp=temp>>4;
; lcd_putc(table[temp]);
; temp=p[len-1-i]&0x0f;
; lcd_putc(table[temp]);
; }
; }*/
;
; unsigned char get_tmp()
; {
; unsigned char i,crc,check;
; unsigned char ds[9];
; unsigned char romcode[8];
; unsigned char *asctop;
; unsigned char temp,temp0;
; //unsigned int temp;
;
; //MCUCR=0x00;
; //lcd_init();
; //lcd_clear();
; //lcd_gotoxy(0,0);
; //lcd_puts("SERIAL NUMBER IS");
;
; ack();
xcall _ack
;
; write(0x33);
ldi R16,51
xcall _write
; for(i=0;i<8;i++)
clr R22
xjmp L51
L48:
xcall _read
movw R24,R28
adiw R24,9
mov R30,R22
clr R31
add R30,R24
adc R31,R25
std z+0,R16
L49:
inc R22
L51:
cpi R22,8
brlo L48
; romcode[i]=read();
;
;
;
; //asctop=&romcod[0];
; //crc=crccheck(asctop,8);
; //if(crc==0x00)
; //{
; // lcd_gotoxy(0,1);
; // asctop=&romcode[0];
; // asctocon(asctop,8);
; //}
; //delay(2000);
; //while(1)
; //{
; asctop=&romcode[0];
movw R24,R28
adiw R24,9
; match(asctop);
movw R16,R24
xcall _match
; write(0x44);
ldi R16,68
xcall _write
; delay_18b20(400);
ldi R16,400
ldi R17,1
xcall _delay_18b20
; asctop=&romcode[0];
movw R24,R28
adiw R24,9
movw R14,R24
; match(asctop);
movw R16,R24
xcall _match
; write(0xbe);
ldi R16,190
xcall _write
; for(i=0;i<9;i++)
clr R22
xjmp L55
L52:
xcall _read
movw R24,R28
mov R30,R22
clr R31
add R30,R24
adc R31,R25
std z+0,R16
L53:
inc R22
L55:
cpi R22,9
brlo L52
; ds[i]=read();
; //lcd_clear();
; //lcd_puts("Thermometer");
; asctop=&ds[0];
movw R24,R28
movw R14,R24
; crc=crccheck(asctop,9);
ldi R18,9
movw R16,R24
xcall _crccheck
mov R20,R16
; if(crc==0x00)
tst R16
brne L56
; {
; temp0=ds[0];
ldd R12,y+0
; temp=ds[1];
ldd R2,y+1
std y+17,R2
; check=temp&0xf8;
mov R24,R2
andi R24,248
mov R10,R24
; if(check==0x00)
tst R24
brne L59
; {
; temp0=temp0&0xf8;
mov R24,R12
andi R24,248
mov R12,R24
; temp0=temp0>>3;
lsr R12
lsr R12
lsr R12
; temp=temp<<5;
mov R0,R2
lsl R0
lsl R0
lsl R0
lsl R0
lsl R0
std y+17,R0
; temp=temp|temp0;
or R0,R12
std y+17,R0
; //temp=temp-0x01;
; //temp=ds[0];
; }
xjmp L60
L59:
; else
; {
; temp=0x00;
clr R0
std y+17,R0
; }
L60:
; //asctop=&ds[0];
; //asctocon(asctop,2);
; }
L56:
; /*if(crc==0x00)
; {
; temp=ds[1];
; temp=temp<<8;
; temp+=ds[0];
; asctop=&ds[0];
; asctocon(asctop,2);
; }
; lcd_gotoxy(0,1);
; if((temp&0xf800)!=0)
; {
; temp=0-temp;
; lcd_puts("-");
; }
; else
; lcd_puts("+");
; crc=temp/16;
; for(i=0;i<3;i++)
; {
; ds[2-i]=table[crc%10];
; crc=crc/10;
; }
; ds[3]='.';
; crc=temp%16;
; crc=crc*10;
; ds[4]=table[crc/16];
; ds[5]=0xdf;
; ds[6]='C';*/
; //}
; return(temp);
ldd R16,y+17
L47:
adiw R28,18
xcall pop_gset5
.dbline 0 ; func end
ret
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?