📄 main.lss
字号:
336: 8f 77 andi r24, 0x7F ; 127
USART_RxHead = tmphead; // Store new index
338: 80 93 f6 00 sts 0x00F6, r24
if ( tmphead == USART_RxTail )
33c: 20 91 f7 00 lds r18, 0x00F7
{
}
USART_RxBuf[tmphead] = data; // Store received data in buffer
340: e6 e7 ldi r30, 0x76 ; 118
342: f0 e0 ldi r31, 0x00 ; 0
344: e8 0f add r30, r24
346: f1 1d adc r31, r1
348: 90 83 st Z, r25
34a: ff 91 pop r31
34c: ef 91 pop r30
34e: 9f 91 pop r25
350: 8f 91 pop r24
352: 2f 91 pop r18
354: 0f 90 pop r0
356: 0f be out 0x3f, r0 ; 63
358: 0f 90 pop r0
35a: 1f 90 pop r1
35c: 18 95 reti
0000035e <__vector_12>:
}
SIGNAL(USART_TRANSMIT_INTERRUPT)
{
35e: 1f 92 push r1
360: 0f 92 push r0
362: 0f b6 in r0, 0x3f ; 63
364: 0f 92 push r0
366: 11 24 eor r1, r1
368: 8f 93 push r24
36a: 9f 93 push r25
36c: ef 93 push r30
36e: ff 93 push r31
unsigned char tmptail;
// Check if all data is transmitted
if ( USART_TxHead != USART_TxTail )
370: 90 91 78 01 lds r25, 0x0178
374: 80 91 79 01 lds r24, 0x0179
378: 98 17 cp r25, r24
37a: 61 f0 breq .+24 ; 0x394 <__vector_12+0x36>
{
// Calculate buffer index
tmptail = ( USART_TxTail + 1 ) & USART_TX_BUFFER_MASK;
37c: e0 91 79 01 lds r30, 0x0179
380: ef 5f subi r30, 0xFF ; 255
382: ef 77 andi r30, 0x7F ; 127
USART_TxTail = tmptail; // Store new index
384: e0 93 79 01 sts 0x0179, r30
UDR = USART_TxBuf[tmptail]; // Start transmition
388: ff 27 eor r31, r31
38a: e8 50 subi r30, 0x08 ; 8
38c: ff 4f sbci r31, 0xFF ; 255
38e: 80 81 ld r24, Z
390: 8c b9 out 0x0c, r24 ; 12
392: 01 c0 rjmp .+2 ; 0x396 <__vector_12+0x38>
}
else
{
UCSRB &= ~(1<<UDRIE); // Disable UDRE interrupt
394: 55 98 cbi 0x0a, 5 ; 10
396: ff 91 pop r31
398: ef 91 pop r30
39a: 9f 91 pop r25
39c: 8f 91 pop r24
39e: 0f 90 pop r0
3a0: 0f be out 0x3f, r0 ; 63
3a2: 0f 90 pop r0
3a4: 1f 90 pop r1
3a6: 18 95 reti
000003a8 <USART_Receive>:
}
}
// Read and write functions
unsigned char USART_Receive( void )
{
3a8: 90 91 f6 00 lds r25, 0x00F6
3ac: 80 91 f7 00 lds r24, 0x00F7
3b0: 98 17 cp r25, r24
3b2: d1 f3 breq .-12 ; 0x3a8 <USART_Receive>
unsigned char tmptail;
while ( USART_RxHead == USART_RxTail ) // Wait for incomming data
;
tmptail = ( USART_RxTail + 1 ) & USART_RX_BUFFER_MASK;// Calculate buffer index
3b4: e0 91 f7 00 lds r30, 0x00F7
3b8: ef 5f subi r30, 0xFF ; 255
3ba: ef 77 andi r30, 0x7F ; 127
USART_RxTail = tmptail; // Store new index
3bc: e0 93 f7 00 sts 0x00F7, r30
return USART_RxBuf[tmptail]; // Return data
3c0: ff 27 eor r31, r31
3c2: ea 58 subi r30, 0x8A ; 138
3c4: ff 4f sbci r31, 0xFF ; 255
3c6: 80 81 ld r24, Z
}
3c8: 99 27 eor r25, r25
3ca: 08 95 ret
000003cc <USART_Transmit>:
void USART_Transmit( unsigned char data )
{
3cc: 90 91 78 01 lds r25, 0x0178
3d0: 9f 5f subi r25, 0xFF ; 255
3d2: 9f 77 andi r25, 0x7F ; 127
unsigned char tmphead;
// Calculate buffer index
tmphead = ( USART_TxHead + 1 ) & USART_TX_BUFFER_MASK; // Wait for free space in buffer
USART_TxBuf[tmphead] = data; // Store data in buffer
3d4: e8 ef ldi r30, 0xF8 ; 248
3d6: f0 e0 ldi r31, 0x00 ; 0
3d8: e9 0f add r30, r25
3da: f1 1d adc r31, r1
3dc: 80 83 st Z, r24
USART_TxHead = tmphead; // Store new index
3de: 90 93 78 01 sts 0x0178, r25
UCSRB |= (1<<UDRIE); // Enable UDRE interrupt
3e2: 55 9a sbi 0x0a, 5 ; 10
3e4: 08 95 ret
000003e6 <usart_puts>:
}
void usart_puts(const char *s )
{
3e6: cf 93 push r28
3e8: df 93 push r29
3ea: ec 01 movw r28, r24
3ec: 03 c0 rjmp .+6 ; 0x3f4 <usart_puts+0xe>
while (*s)
USART_Transmit(*s++);
3ee: 21 96 adiw r28, 0x01 ; 1
3f0: 0e 94 e6 01 call 0x3cc ; 0x3cc <USART_Transmit>
3f4: 88 81 ld r24, Y
3f6: 88 23 and r24, r24
3f8: d1 f7 brne .-12 ; 0x3ee <usart_puts+0x8>
3fa: df 91 pop r29
3fc: cf 91 pop r28
3fe: 08 95 ret
00000400 <usart_getc>:
}
unsigned int usart_getc(void)
{
400: 90 91 f6 00 lds r25, 0x00F6
404: 80 91 f7 00 lds r24, 0x00F7
408: 98 17 cp r25, r24
40a: 19 f4 brne .+6 ; 0x412 <usart_getc+0x12>
unsigned char tmptail;
unsigned char data;
if ( USART_RxHead == USART_RxTail ) {
40c: 80 e0 ldi r24, 0x00 ; 0
40e: 91 e0 ldi r25, 0x01 ; 1
410: 08 95 ret
return USART_NO_DATA; // no data available
}
// calculate /store buffer index
tmptail = (USART_RxTail + 1) & USART_RX_BUFFER_MASK;
412: e0 91 f7 00 lds r30, 0x00F7
416: ef 5f subi r30, 0xFF ; 255
418: ef 77 andi r30, 0x7F ; 127
USART_RxTail = tmptail;
41a: e0 93 f7 00 sts 0x00F7, r30
// get data from receive buffer
data = USART_RxBuf[tmptail];
41e: ff 27 eor r31, r31
420: ea 58 subi r30, 0x8A ; 138
422: ff 4f sbci r31, 0xFF ; 255
424: 80 81 ld r24, Z
//return (UART1_LastRxError << 8) + data;
return data;
426: 99 27 eor r25, r25
}
428: 08 95 ret
0000042a <usart_putc>:
void usart_puts_p(const char *progmem_s )
{
register char c;
while ( (c = pgm_read_byte(progmem_s++)) )
usart_putc(c);
}
void usart_putc(unsigned char data)
{
42a: 28 2f mov r18, r24
unsigned char tmphead;
tmphead = (USART_TxHead + 1) & USART_TX_BUFFER_MASK;
42c: 90 91 78 01 lds r25, 0x0178
430: 9f 5f subi r25, 0xFF ; 255
432: 9f 77 andi r25, 0x7F ; 127
while ( tmphead == USART_TxTail ){
434: 80 91 79 01 lds r24, 0x0179
438: 98 17 cp r25, r24
43a: e1 f3 breq .-8 ; 0x434 <usart_putc+0xa>
;// wait for free space in buffer
}
USART_TxBuf[tmphead] = data;
43c: e9 2f mov r30, r25
43e: ff 27 eor r31, r31
440: e8 50 subi r30, 0x08 ; 8
442: ff 4f sbci r31, 0xFF ; 255
444: 20 83 st Z, r18
USART_TxHead = tmphead;
446: 90 93 78 01 sts 0x0178, r25
// enable UDRE interrupt
USART_CONTROL |= _BV(USART_UDRIE);
44a: 55 9a sbi 0x0a, 5 ; 10
44c: 08 95 ret
0000044e <usart_puts_p>:
44e: cf 93 push r28
450: df 93 push r29
452: ec 01 movw r28, r24
454: 02 c0 rjmp .+4 ; 0x45a <usart_puts_p+0xc>
456: 0e 94 15 02 call 0x42a ; 0x42a <usart_putc>
45a: fe 01 movw r30, r28
45c: 21 96 adiw r28, 0x01 ; 1
45e: 84 91 lpm r24, Z
460: 88 23 and r24, r24
462: c9 f7 brne .-14 ; 0x456 <usart_puts_p+0x8>
464: df 91 pop r29
466: cf 91 pop r28
468: 08 95 ret
0000046a <DataInReceiveBuffer>:
}
int DataInReceiveBuffer( void )
{
46a: 90 91 f6 00 lds r25, 0x00F6
46e: 80 91 f7 00 lds r24, 0x00F7
472: 20 e0 ldi r18, 0x00 ; 0
474: 30 e0 ldi r19, 0x00 ; 0
476: 98 17 cp r25, r24
478: 11 f0 breq .+4 ; 0x47e <DataInReceiveBuffer+0x14>
return ( USART_RxHead != USART_RxTail ); // Return 0 (FALSE) if the receive buffer is empty
47a: 21 e0 ldi r18, 0x01 ; 1
47c: 30 e0 ldi r19, 0x00 ; 0
}
47e: c9 01 movw r24, r18
480: 08 95 ret
00000482 <usart_ready>:
unsigned int usart_ready(void)
{
482: 90 91 f6 00 lds r25, 0x00F6
486: 80 91 f7 00 lds r24, 0x00F7
48a: 20 e0 ldi r18, 0x00 ; 0
48c: 98 17 cp r25, r24
48e: 09 f4 brne .+2 ; 0x492 <usart_ready+0x10>
if ( USART_RxHead == USART_RxTail )
490: 21 e0 ldi r18, 0x01 ; 1
492: 81 e0 ldi r24, 0x01 ; 1
494: 28 27 eor r18, r24
return(FALSE);
else
return(TRUE);
}
496: 82 2f mov r24, r18
498: 99 27 eor r25, r25
49a: 08 95 ret
0000049c <usart_SendBcd>:
void usart_SendBcd(unsigned char hexIn)
{
49c: 1f 93 push r17
unsigned char MSB_byte,LSB_byte;
MSB_byte = usarthexDigits(hexIn >> 4);
49e: 98 2f mov r25, r24
4a0: 92 95 swap r25
4a2: 9f 70 andi r25, 0x0F ; 15
4a4: 22 ea ldi r18, 0xA2 ; 162
4a6: 31 e0 ldi r19, 0x01 ; 1
4a8: f9 01 movw r30, r18
4aa: e9 0f add r30, r25
4ac: f1 1d adc r31, r1
4ae: 94 91 lpm r25, Z
LSB_byte = usarthexDigits(hexIn & 0xF);
4b0: 8f 70 andi r24, 0x0F ; 15
4b2: 28 0f add r18, r24
4b4: 31 1d adc r19, r1
4b6: f9 01 movw r30, r18
4b8: 14 91 lpm r17, Z
usart_putc(MSB_byte);
4ba: 89 2f mov r24, r25
4bc: 0e 94 15 02 call 0x42a ; 0x42a <usart_putc>
usart_putc(LSB_byte);
4c0: 81 2f mov r24, r17
4c2: 0e 94 15 02 call 0x42a ; 0x42a <usart_putc>
4c6: 1f 91 pop r17
4c8: 08 95 ret
000004ca <usart_16bitHex>:
}
void usart_16bitHex(unsigned int hexIn)
{
4ca: ff 92 push r15
4cc: 0f 93 push r16
4ce: 1f 93 push r17
unsigned char B1,B2,B3,B4;
B1 = usarthexDigits((hexIn & 0xF000) >> 12);
4d0: fc 01 movw r30, r24
4d2: ef 2f mov r30, r31
4d4: ff 27 eor r31, r31
4d6: e2 95 swap r30
4d8: ef 70 andi r30, 0x0F ; 15
4da: 42 ea ldi r20, 0xA2 ; 162
4dc: 51 e0 ldi r21, 0x01 ; 1
4de: e4 0f add r30, r20
4e0: f5 1f adc r31, r21
4e2: 64 91 lpm r22, Z
B2 = usarthexDigits((hexIn & 0x0F00) >> 8);
4e4: 9c 01 movw r18, r24
4e6: 20 70 andi r18, 0x00 ; 0
4e8: 3f 70 andi r19, 0x0F ; 15
4ea: 23 2f mov r18, r19
4ec: 33 27 eor r19, r19
4ee: 24 0f add r18, r20
4f0: 35 1f adc r19, r21
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -