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 + -
显示快捷键?