⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lss

📁 DS18B20最全驱动.包含CRC8算法.ROM Search等.主机采用AVR mega16或者mega32.原创作品.
💻 LSS
📖 第 1 页 / 共 5 页
字号:
 744:	10 92 d8 00 	sts	0x00D8, r1
			ReadTCounter=0;
 748:	10 92 d9 00 	sts	0x00D9, r1
			ProcessReadT=_ReadT;
 74c:	82 e0       	ldi	r24, 0x02	; 2
 74e:	80 93 cf 00 	sts	0x00CF, r24
 752:	05 c0       	rjmp	.+10     	; 0x75e <__vector_10+0x66>
		}
		else ReadTCounter++;
 754:	80 91 d9 00 	lds	r24, 0x00D9
 758:	8f 5f       	subi	r24, 0xFF	; 255
 75a:	80 93 d9 00 	sts	0x00D9, r24
	}
	if(EnableOneWireFlag)
 75e:	80 91 ca 00 	lds	r24, 0x00CA
 762:	88 23       	and	r24, r24
 764:	c1 f0       	breq	.+48     	; 0x796 <__vector_10+0x9e>
	{
		if(CheckDS18B20Counter>=CheckDS18B20Timeout)
 766:	80 91 dc 00 	lds	r24, 0x00DC
 76a:	90 91 dd 00 	lds	r25, 0x00DD
 76e:	88 5e       	subi	r24, 0xE8	; 232
 770:	93 40       	sbci	r25, 0x03	; 3
 772:	40 f0       	brcs	.+16     	; 0x784 <__vector_10+0x8c>
		{
			CheckDS18B20Counter=0;
 774:	10 92 dd 00 	sts	0x00DD, r1
 778:	10 92 dc 00 	sts	0x00DC, r1
			CheckDS18B20TimeoutFlag=1;
 77c:	81 e0       	ldi	r24, 0x01	; 1
 77e:	80 93 de 00 	sts	0x00DE, r24
 782:	09 c0       	rjmp	.+18     	; 0x796 <__vector_10+0x9e>
		}
		else CheckDS18B20Counter++;
 784:	80 91 dc 00 	lds	r24, 0x00DC
 788:	90 91 dd 00 	lds	r25, 0x00DD
 78c:	01 96       	adiw	r24, 0x01	; 1
 78e:	90 93 dd 00 	sts	0x00DD, r25
 792:	80 93 dc 00 	sts	0x00DC, r24
	}
}
 796:	9f 91       	pop	r25
 798:	8f 91       	pop	r24
 79a:	2f 91       	pop	r18
 79c:	0f 90       	pop	r0
 79e:	0f be       	out	0x3f, r0	; 63
 7a0:	0f 90       	pop	r0
 7a2:	1f 90       	pop	r1
 7a4:	18 95       	reti

000007a6 <UartInit>:
volatile unsigned char UartTimeoutFlag=0;				//接收超时计数器启动标志
volatile unsigned char WaitForUartCounter=0;			//接收超时计数器
volatile unsigned char UartDataReadyFlag=0;				//接收完成标志

void UartInit(void) 		//串口初始化 
{ 
 7a6:	80 b5       	in	r24, 0x20	; 32
 7a8:	8f 77       	andi	r24, 0x7F	; 127
 7aa:	80 bd       	out	0x20, r24	; 32
    UCSRC&=(~(1<<URSEL)); 
    UBRRH=(unsigned char)(UBRR>>8); 
 7ac:	10 bc       	out	0x20, r1	; 32
    UBRRL=(unsigned char)UBRR; 
 7ae:	87 e4       	ldi	r24, 0x47	; 71
 7b0:	89 b9       	out	0x09, r24	; 9
    UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN); //接收中断使能,发送中断使能,接收器与发送器使能                                  
 7b2:	88 ed       	ldi	r24, 0xD8	; 216
 7b4:	8a b9       	out	0x0a, r24	; 10
    UCSRC=(1<<URSEL)|(3<<UCSZ0);	//设置帧格式: 8 个数据位, 1 个停止位
 7b6:	86 e8       	ldi	r24, 0x86	; 134
 7b8:	80 bd       	out	0x20, r24	; 32
}
 7ba:	08 95       	ret

000007bc <UartSendchar>:

void UartSendchar(unsigned char data)	//放入一个字节到发送缓冲区 
{ 
 7bc:	56 98       	cbi	0x0a, 6	; 10
	UCSRB&=~(1<<TXCIE); 					//暂停串行中断,以免数据比较时出错 
    //////////////////////////////////////////////////////////////////////////////
    while(abs(outlast-putlast)==2)
 7be:	a0 91 d3 00 	lds	r26, 0x00D3
 7c2:	b0 91 d4 00 	lds	r27, 0x00D4
 7c6:	20 91 d1 00 	lds	r18, 0x00D1
 7ca:	30 91 d2 00 	lds	r19, 0x00D2
 7ce:	2a 1b       	sub	r18, r26
 7d0:	3b 0b       	sbc	r19, r27
 7d2:	37 ff       	sbrs	r19, 7
 7d4:	03 c0       	rjmp	.+6      	; 0x7dc <UartSendchar+0x20>
 7d6:	30 95       	com	r19
 7d8:	21 95       	neg	r18
 7da:	3f 4f       	sbci	r19, 0xFF	; 255
 7dc:	22 30       	cpi	r18, 0x02	; 2
 7de:	31 05       	cpc	r19, r1
 7e0:	21 f4       	brne	.+8      	; 0x7ea <UartSendchar+0x2e>
 7e2:	e9 e9       	ldi	r30, 0x99	; 153
 7e4:	f5 e1       	ldi	r31, 0x15	; 21
 7e6:	31 97       	sbiw	r30, 0x01	; 1
 7e8:	f1 f7       	brne	.-4      	; 0x7e6 <UartSendchar+0x2a>
	{ 
		_delay_ms(2);
		break;
    } 
	/////////////////////////////////////////////////////////////////////////////
    *putlast=data;			//放字节进入缓冲区 
 7ea:	8c 93       	st	X, r24
    putlast++;          	//发送缓冲区指针加1 
 7ec:	80 91 d3 00 	lds	r24, 0x00D3
 7f0:	90 91 d4 00 	lds	r25, 0x00D4
 7f4:	01 96       	adiw	r24, 0x01	; 1
 7f6:	90 93 d4 00 	sts	0x00D4, r25
 7fa:	80 93 d3 00 	sts	0x00D3, r24
    if (putlast==UartSendBuffer+OutLEN) putlast=UartSendBuffer;  //指针到了顶部换到底部 
 7fe:	89 51       	subi	r24, 0x19	; 25
 800:	92 40       	sbci	r25, 0x02	; 2
 802:	31 f4       	brne	.+12     	; 0x810 <UartSendchar+0x54>
 804:	8a e1       	ldi	r24, 0x1A	; 26
 806:	91 e0       	ldi	r25, 0x01	; 1
 808:	90 93 d4 00 	sts	0x00D4, r25
 80c:	80 93 d3 00 	sts	0x00D3, r24
    UartSendBufferHaveDataFlag=1; 
 810:	81 e0       	ldi	r24, 0x01	; 1
 812:	80 93 df 00 	sts	0x00DF, r24
    if (UartSendBufferemptyFlag) 		//缓冲区无数据 
 816:	80 91 d5 00 	lds	r24, 0x00D5
 81a:	88 23       	and	r24, r24
 81c:	11 f1       	breq	.+68     	; 0x862 <__stack+0x3>
    { 
        UartSendBufferemptyFlag =0; 
 81e:	10 92 d5 00 	sts	0x00D5, r1
        UDR=*outlast;    	//未发送完继续发送 
 822:	e0 91 d1 00 	lds	r30, 0x00D1
 826:	f0 91 d2 00 	lds	r31, 0x00D2
 82a:	81 91       	ld	r24, Z+
 82c:	8c b9       	out	0x0c, r24	; 12
        outlast++;        	//最后传出去的字节位置加1 
 82e:	f0 93 d2 00 	sts	0x00D2, r31
 832:	e0 93 d1 00 	sts	0x00D1, r30
        if (outlast==UartSendBuffer+OutLEN) outlast=UartSendBuffer;//地址到顶部回到底部 
 836:	e9 51       	subi	r30, 0x19	; 25
 838:	f2 40       	sbci	r31, 0x02	; 2
 83a:	31 f4       	brne	.+12     	; 0x848 <UartSendchar+0x8c>
 83c:	8a e1       	ldi	r24, 0x1A	; 26
 83e:	91 e0       	ldi	r25, 0x01	; 1
 840:	90 93 d2 00 	sts	0x00D2, r25
 844:	80 93 d1 00 	sts	0x00D1, r24
        if (putlast==outlast) UartSendBufferHaveDataFlag=0;     //数据发送完置发送缓冲区空标志 
 848:	20 91 d3 00 	lds	r18, 0x00D3
 84c:	30 91 d4 00 	lds	r19, 0x00D4
 850:	80 91 d1 00 	lds	r24, 0x00D1
 854:	90 91 d2 00 	lds	r25, 0x00D2
 858:	28 17       	cp	r18, r24
 85a:	39 07       	cpc	r19, r25
 85c:	11 f4       	brne	.+4      	; 0x862 <__stack+0x3>
 85e:	10 92 df 00 	sts	0x00DF, r1
    }//缓冲区开始为空,置为有,启动发送 
	UCSRB|=(1<<TXCIE);
 862:	56 9a       	sbi	0x0a, 6	; 10
} 
 864:	08 95       	ret

00000866 <UartSendString>:

void UartSendString(unsigned char *str) //发送字符串到串口 
{ 
 866:	cf 93       	push	r28
 868:	df 93       	push	r29
 86a:	ec 01       	movw	r28, r24
 86c:	03 c0       	rjmp	.+6      	; 0x874 <UartSendString+0xe>
	while(*str)				//遇到停止符0结束 
	{
		UartSendchar(*str++);   
 86e:	21 96       	adiw	r28, 0x01	; 1
 870:	0e 94 de 03 	call	0x7bc	; 0x7bc <UartSendchar>
	UCSRB|=(1<<TXCIE);
} 

void UartSendString(unsigned char *str) //发送字符串到串口 
{ 
	while(*str)				//遇到停止符0结束 
 874:	88 81       	ld	r24, Y
 876:	88 23       	and	r24, r24
 878:	d1 f7       	brne	.-12     	; 0x86e <UartSendString+0x8>
	{
		UartSendchar(*str++);   
	}
} 
 87a:	df 91       	pop	r29
 87c:	cf 91       	pop	r28
 87e:	08 95       	ret

00000880 <UartSendByte>:

void UartSendByte(unsigned char *Startaddr,unsigned char SendByte) //发送一串数据
{   
 880:	1f 93       	push	r17
 882:	cf 93       	push	r28
 884:	df 93       	push	r29
 886:	ec 01       	movw	r28, r24
 888:	16 2f       	mov	r17, r22
 88a:	04 c0       	rjmp	.+8      	; 0x894 <UartSendByte+0x14>
	while(SendByte--)
	{
		UartSendchar(*Startaddr++); 
 88c:	89 91       	ld	r24, Y+
 88e:	0e 94 de 03 	call	0x7bc	; 0x7bc <UartSendchar>
 892:	11 50       	subi	r17, 0x01	; 1
	}
} 

void UartSendByte(unsigned char *Startaddr,unsigned char SendByte) //发送一串数据
{   
	while(SendByte--)
 894:	11 23       	and	r17, r17
 896:	d1 f7       	brne	.-12     	; 0x88c <UartSendByte+0xc>
	{
		UartSendchar(*Startaddr++); 
	}
}
 898:	df 91       	pop	r29
 89a:	cf 91       	pop	r28
 89c:	1f 91       	pop	r17
 89e:	08 95       	ret

000008a0 <__vector_15>:

ISR(USART_TXC_vect)			//串口发送中断处理 
{ 
 8a0:	1f 92       	push	r1
 8a2:	0f 92       	push	r0
 8a4:	0f b6       	in	r0, 0x3f	; 63
 8a6:	0f 92       	push	r0
 8a8:	11 24       	eor	r1, r1
 8aa:	2f 93       	push	r18
 8ac:	3f 93       	push	r19
 8ae:	8f 93       	push	r24
 8b0:	9f 93       	push	r25
 8b2:	ef 93       	push	r30
 8b4:	ff 93       	push	r31
	UCSRA|=(1<<TXC); 		//清发送中断标志 
 8b6:	5e 9a       	sbi	0x0b, 6	; 11
	if (UartSendBufferHaveDataFlag) 
 8b8:	80 91 df 00 	lds	r24, 0x00DF
 8bc:	88 23       	and	r24, r24
 8be:	09 f1       	breq	.+66     	; 0x902 <__vector_15+0x62>
	{ 
		UDR=*outlast; 		//未发送完继续发送 
 8c0:	e0 91 d1 00 	lds	r30, 0x00D1
 8c4:	f0 91 d2 00 	lds	r31, 0x00D2
 8c8:	81 91       	ld	r24, Z+
 8ca:	8c b9       	out	0x0c, r24	; 12
		outlast++; 			//最后传出去的字节位置加1 
 8cc:	f0 93 d2 00 	sts	0x00D2, r31
 8d0:	e0 93 d1 00 	sts	0x00D1, r30
		if (outlast==UartSendBuffer+OutLEN) outlast=UartSendBuffer;	//地址到顶部回到底部 
 8d4:	e9 51       	subi	r30, 0x19	; 25
 8d6:	f2 40       	sbci	r31, 0x02	; 2
 8d8:	31 f4       	brne	.+12     	; 0x8e6 <__vector_15+0x46>
 8da:	8a e1       	ldi	r24, 0x1A	; 26
 8dc:	91 e0       	ldi	r25, 0x01	; 1
 8de:	90 93 d2 00 	sts	0x00D2, r25
 8e2:	80 93 d1 00 	sts	0x00D1, r24
		if (putlast==outlast) UartSendBufferHaveDataFlag=0;		//数据发送完置发送缓冲区空标志 
 8e6:	20 91 d3 00 	lds	r18, 0x00D3
 8ea:	30 91 d4 00 	lds	r19, 0x00D4
 8ee:	80 91 d1 00 	lds	r24, 0x00D1
 8f2:	90 91 d2 00 	lds	r25, 0x00D2
 8f6:	28 17       	cp	r18, r24
 8f8:	39 07       	cpc	r19, r25
 8fa:	31 f4       	brne	.+12     	; 0x908 <__vector_15+0x68>
 8fc:	10 92 df 00 	sts	0x00DF, r1
 900:	03 c0       	rjmp	.+6      	; 0x908 <__vector_15+0x68>
	} 
	else UartSendBufferemptyFlag =1; 
 902:	81 e0       	ldi	r24, 0x01	; 1
 904:	80 93 d5 00 	sts	0x00D5, r24
} 
 908:	ff 91       	pop	r31
 90a:	ef 91       	pop	r30
 90c:	9f 91       	pop	r25
 90e:	8f 91       	pop	r24
 910:	3f 91       	pop	r19
 912:	2f 91       	pop	r18
 914:	0f 90       	pop	r0
 916:	0f be       	out	0x3f, r0	; 63
 918:	0f 90       	pop	r0
 91a:	1f 90       	pop	r1
 91c:	18 95       	reti

0000091e <__vector_13>:

ISR(USART_RXC_vect)			//串口接收中断处理 
{ 
 91e:	1f 92       	push	r1
 920:	0f 92       	push	r0
 922:	0f b6       	in	r0, 0x3f	; 63
 924:	0f 92       	push	r0
 926:	11 24       	eor	r1, r1
 928:	8f 93       	push	r24
 92a:	9f 93       	push	r25
 92c:	ef 93       	push	r30
 92e:	ff 93       	push	r31
	UartReceiveBuffer[UartReceiveCounter]=UDR;	//存入数据
 930:	e0 91 e0 00 	lds	r30, 0x00E0
 934:	f0 e0       	ldi	r31, 0x00	; 0
 936:	8c b1       	in	r24, 0x0c	; 12
 938:	ee 50       	subi	r30, 0x0E	; 14
 93a:	ff 4f       	sbci	r31, 0xFF	; 255
 93c:	80 83       	st	Z, r24
	UartTimeoutFlag=1;							//启动超时计数器
 93e:	91 e0       	ldi	r25, 0x01	; 1
 940:	90 93 e1 00 	sts	0x00E1, r25
	WaitForUartCounter=0;						//清超时计数器	//5ms
 944:	10 92 e2 00 	sts	0x00E2, r1
	UartReceiveCounter++;
 948:	80 91 e0 00 	lds	r24, 0x00E0
 94c:	8f 5f       	subi	r24, 0xFF	; 255
 94e:	80 93 e0 00 	sts	0x00E0, r24
	if(UartReceiveCounter>=InLEN) 
 952:	80 91 e0 00 	lds	r24, 0x00E0
 956:	88 32       	cpi	r24, 0x28	; 40
 958:	18 f0       	brcs	.+6      	; 0x960 <__vector_13+0x42>
	{
		UartDataReadyFlag=1;
 95a:	90 93 e3 00 	sts	0x00E3, r25
		UCSRB&=~(1<<RXCIE);						//禁止接收
 95e:	57 98       	cbi	0x0a, 7	; 10
	}
}
 960:	ff 91       	pop	r31
 962:	ef 91       	pop	r30
 964:	9f 91       	pop	r25
 966:	8f 91       	pop	r24
 968:	0f 90       	pop	r0
 96a:	0f be       	out	0x3f, r0	; 63
 96c:	0f 90       	pop	r0
 96e:	1f 90       	pop	r1
 970:	18 95       	reti

00000972 <UARTProcessing>:

void UARTProcessing(void)
{
 972:	80 91 e3 00 	lds	r24, 0x00E3
 976:	88 23       	and	r24, r24
 978:	79 f0       	breq	.+30     	; 0x998 <UARTProcessing+0x26>
	if(UartDataReadyFlag)
	{
		UartDataReadyFlag=0;
 97a:	10 92 e3 00 	sts	0x00E3, r1
		if((UartReceiveBuffer[0]=='t')|(UartReceiveBuffer[0]=='T'))
 97e:	80 91 f2 00 	lds	r24, 0x00F2
 982:	90 91 f2 00 	lds	r25, 0x00F2
 986:	84 37       	cpi	r24, 0x74	; 116
 988:	11 f0       	breq	.+4      	; 0x98e <UARTProcessing+0x1c>
 98a:	94 35       	cpi	r25, 0x54	; 84
 98c:	11 f4       	brne	.+4      	; 0x992 <UARTProcessing+0x20>
		{
			DS18B20Processing();
 98e:	0e 94 5b 03 	call	0x6b6	; 0x6b6 <DS18B20Processing>
		}
		UartReceiveCounter=0;
 992:	10 92 e0 00 	sts	0x00E0, r1
		UCSRB|=1<<RXCIE;		//使能接收

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -