[an error occurred while processing this directive]
К спецам Си. Помогите новичку с УАРТОМ !!!!!!!!!! - что в программе не так?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено McLaud 11 апреля 2006 г. 10:42

//ICC-AVR application builder : 08.04.06 10:41:32
// Target : M162
// Crystal: 4.0000Mhz

#include
#include
void port_init(void)
{
PORTA = 0x00;
DDRA = 0xFF;
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0x00;
DDRC = 0xFF;
PORTD = 0x03;
DDRD = 0xFE;
PORTE = 0x00;
DDRE = 0x07;
}

#define UART_RX_BUFFER_SIZE1 128 /* 1,2,4,8,16,32,64,128 or 256 bytes */
#define UART_RX_BUFFER_MASK1 ( UART_RX_BUFFER_SIZE1 - 1 )
#define UART_TX_BUFFER_SIZE1 128 /* 1,2,4,8,16,32,64,128 or 256 bytes */
#define UART_TX_BUFFER_MASK1 ( UART_TX_BUFFER_SIZE1 - 1 )

#if ( UART_RX_BUFFER_SIZE1 & UART_RX_BUFFER_MASK1 )
#error RX buffer size is not a power of 2
#endif

static unsigned char UART_RxBuf1[UART_RX_BUFFER_SIZE1];
static volatile unsigned char UART_RxHead1;
static volatile unsigned char UART_RxTail1;
static unsigned char UART_TxBuf1[UART_TX_BUFFER_SIZE1];
static volatile unsigned char UART_TxHead1;
static volatile unsigned char UART_TxTail1;



void uart1_init(void)
{
unsigned char x;

UBRR1H = (unsigned char)(9600>>8);
UBRR1L = (unsigned char)9600;
UCSR1B = (1 << RXEN1) | (1 << TXEN1) | (1 << RXCIE1)| (1 << TXCIE1);
UCSR1C = 0x06;

x = 0; /* flush receive buffer */
UART_RxTail1 = x;
UART_RxHead1 = x;
UART_TxTail1 = x;
UART_TxHead1 = x;
}

#pragma interrupt_handler uart1_rx_isr:21
void uart1_rx_isr(void)
{
unsigned char data1;
unsigned char tmphead1;
data1 = UDR1; /* read the received data */
/* calculate buffer index */
tmphead1 = ( UART_RxHead1 + 1 ) & UART_RX_BUFFER_MASK1;
UART_RxHead1 = tmphead1; /* store new index */
if ( tmphead1 == UART_RxTail1 )
{
/* ERROR! Receive buffer overflow */
}
UART_RxBuf1[tmphead1] = data1; /* store received data in buffer */
}

#pragma interrupt_handler uart1_tx_isr:25
void uart1_tx_isr(void)
{
unsigned char tmptail1;
if ( UART_TxHead1 != UART_TxTail1 )
{
tmptail1 = ( UART_TxTail1 + 1 ) & UART_TX_BUFFER_MASK1;
UART_TxTail1 = tmptail1; /* store new index */
UART_TxBuf1[tmptail1]; /* start transmition */
}
else
{
UCSR1B &= ~(1< }
}


/* Read and write functions */
unsigned char ReceiveByte1( void )
{
unsigned char tmptail1;

while ( UART_RxHead1 == UART_RxTail1 ) /* wait for incomming data */
;
tmptail1 = ( UART_RxTail1 + 1 ) & UART_RX_BUFFER_MASK1;/* calculate buffer index */
UART_RxTail1 = tmptail1; /* store new index */
return UART_RxBuf1[tmptail1]; /* return data */
}

void TransmitByte1( unsigned char data1 )
{
unsigned char tmphead1;
/* calculate buffer index */
tmphead1 = ( UART_TxHead1 + 1 ) & UART_TX_BUFFER_MASK1;
while ( tmphead1 == UART_TxTail1 )
;
UART_TxBuf1[tmphead1] = data1; /* store data in buffer */
UART_TxHead1 = tmphead1; /* store new index */
UCSR1B |= (1< }

unsigned char DataInReceiveBuffer1( void )
{
return ( UART_RxHead1 != UART_RxTail1 );
/* return 0 (FALSE) if the receive buffer is empty */
}

void init_devices(void)
{

CLI();
port_init();
uart1_init();
MCUCR= 0x00;
EMCUCR = 0x00;
TIMSK= 0x10;
ETIMSK=0x00;
GICR= 0x00;
PCMSK0=0x00;
PCMSK1=0x00;
SEI();
}

void main(void)
{

init_devices();

while(1){
TransmitByte1(0x55);
};

}

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru