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

📄 main.lss

📁 Mega16 + MCP3208 12bit A/D >> C-source code >> AVRSTUDIO project >> WinAVR
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     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 + -