📄 main.lss
字号:
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 + -