2016-11-12 1 views
-1

Я работаю в aurdino mega2560 в Atmel студии 7 с Arduino загрузчиком сначала я использовал Uart 0 (Tx0 и RX0) с прерыванием, и это работает хорошо , но, когда я использовал uart1 с прерыванием из u1_rx не работаАрдино USART1 прерывания

#include <avr/io.h> 
#include <util/delay.h> 
#include<avr/interrupt.h> 
#ifndef F_CPU 
#define F_CPU 16000000UL // 16 MHz clock speed 
#endif 

#define USART_BAUDRATE0 115200 
#define USART_BAUDRATE1 57600 
#define BAUD_PRESCALE (((F_CPU/(USART_BAUDRATE0 * 16UL))) - 1) 
volatile char ReceivedByte1; 
void initUART(int BRR) 
{//|(1 << TXCIE0) 
    UCSR0A=(0<<RXC0)|(0<<FE0)|(0<<DOR0)|(0<<UPE0)|(1<<U2X0)|(0<<MPCM0); 
    UCSR0B = (1 << RXCIE0) |(1 << UDRIE0)|(1 << RXEN0) | (1 << TXEN0)|(0<<UCSZ02)|(0<<RXB80)|(0<<TXB80); 
    UCSR0C =(0<<UMSEL01)|(0<<UMSEL00)|(0<<UPM00)|(0<<UPM01)|(0<<USBS0)|(1 << UCSZ00) | (1 << UCSZ01) ; 
    UBRR0H=(BRR >> 8); 
    UBRR0L=BRR; 
    sei() ; 
} 
void initUART1(int BRR) 
{//|(1 << TXCIE0) 
    UCSR1A=(0<<RXC1)|(0<<FE1)|(0<<DOR1)|(0<<UPE1)|(1<<U2X1)|(0<<MPCM1); 
    UCSR1B = (1 << RXCIE1) |(1 << UDRIE1)|(1 << RXEN1) | (1 << TXEN1)|(0<<UCSZ12)|(0<<RXB81)|(0<<TXB81); 
    UCSR1C =(0<<UMSEL11)|(0<<UMSEL10)|(0<<UPM10)|(0<<UPM11)|(0<<USBS1)|(1 << UCSZ10) | (1 << UCSZ11) ; 
    UBRR1H=(BRR >> 8); 
    UBRR1L=BRR; 
    sei() ; 
} 
ISR(USART0_RX_vect) 
{ 
    char ReceivedByte; 
    //ReceivedByte = UDR0; // Fetch the received byte value into the variable "ByteReceived" 
    //UDR0 = ReceivedByte; // Echo back the received byte back to the computer 
    while ((UCSR0A & (1 << RXC0)) == 1) {}; // Do nothing until data have been received and is ready to be read from UDR 
    ReceivedByte = UDR0; // Fetch the received byte value into the variable "ByteReceived" 
    while ((UCSR0A & (1 << UDRE0)) == 1) {}; // Do nothing until UDR is ready for more data to be written to it 
    UDR0 = ReceivedByte; // Echo back the received byte back to the computer 
} 
ISR(USART1_RX_vect) 
{ 
    //while ((UCSR1A & (1 << RXC1)) == 1) {}; // Do nothing until data have been received and is ready to be read from UDR 
    ReceivedByte1 = UDR1; // Fetch the received byte value into the variable "ByteReceived" 
    PORTB=0xff; 

// while ((UCSR0A & (1 << UDRE0)) == 1) {}; // Do nothing until UDR is ready for more data to be written to it 
    UDR0 = ReceivedByte1; // Echo back the received byte back to the computer 
} 
ISR(USART1_UDRE_vect) 
{ 

} 
ISR(USART0_UDRE_vect) 
{ 

} 
ISR(USART0_TX_vect) 
{ 
} 
int main(void) 
{ 
    initUART1(34); 
    initUART(16);//Boudratecalc); 
    DDRB = 0xFF; 
    PORTB=0x00; 

    while (1) 
    { 

    } 
} 
+0

УАПП 1 имеет работу, когда я только тогда, когда УАПП 0 отключен –

+0

Ваш код не симметричен. –

ответ

0

контроллер морозильную когда UDRIE0 это позволит и до сих пор стрельбы так будет не идти в UART1 и я использую прерывание TX и работают