Господа есть проблема, не хочет работать USART на
Atmega48.
Пробовал прогу на Atmega8, 16 всё прекрасно работает, естественно необходимо только настроить регистры под данные МК, а вот на 48 работать не хочет, почему-то не хочет уходить в прерывание, может, кто подскажет, в чём дело?
Пробовал писать данную прогу на AVR Studio, теже грабли.
/************************************************** ***
This program was produced by the
CodeWizardAVR V2.03.8a Evaluation
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : USART
Version : 0.1
Date : 22.10.2010
Author : vgtmaster
Company : vgtmaster
Comments: No comment
Chip type : ATmega48
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
************************************************** ***/
#include ‹mega48.h›
// Standard Input/Output functions
#include ‹stdio.h›
#include ‹m8_128.h›
#define RXC0 7
#define TXC0 6
#define UDRE0 5
#define FE0 4
#define DOR0 3
#define UPE0 2
#define U2X0 1
#define MPCM0 0
#define RXCIE0 7
#define TXCIE0 6
#define UDRIE0 5
#define RXEN0 4
#define TXEN0 3
#define UCSZ02 2
#define RXB80 1
#define TXB80 0
#define UMSEL01 7
#define UMSEL00 6
#define UPM01 5
#define UPM00 4
#define USBS0 3
#define UCSZ01 2
#define UCSZ00 1
#define UCPOL0 0
unsigned char bcounter=0;
char ReceiveString [32]="vgt ";
// Declare your global variables here
interrupt [USART_RXC]void USART_RX_interrupt (void)
{short i;
//UCSR0B = (1‹‹RXEN0)|(1‹‹TXEN0);
bcounter = 0;
ReceiveString[bcounter] = UDR0; /* Get and return received data from buffer */
bcounter+=1;
for ( i=0 ; i ‹ 3500 ; i++ )
{if (UCSR0A & 0x80)
{i=0;
ReceiveString[bcounter++] = UDR0;
}
}
}
////////Функция передачи данных///////////
void USART_Transmit(char count,char * buf) //count колличество передаваемых байт, buf массив.
{unsigned char i=0;
{for (i=0;i‹count;i++)
{while ( !( UCSR0A & (0‹‹RXC0|0‹‹TXC0|1‹‹UDRE0|0‹‹FE0|0‹‹DOR0|0‹‹UPE0|0 ‹‹U2X0|0‹‹MPCM0)) ){;}
UDR0 = buf[i];
}
}
}
//////////////////END/////////////////////
void USART_Init( unsigned int ubrr)
{/* Set baud rate */
UBRR0H = (unsigned char)(ubrr››

;
UBRR0L = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSR0B = (0‹‹RXCIE0)|(0‹‹TXCIE0)|(0‹‹UDRIE0)|(1‹‹RXEN0)|(1‹ ‹TXEN0)|(0‹‹UCSZ02)|(0‹‹RXB80)|(0‹‹TXB80);
/* Set frame format: 8data, 2stop bit */
UCSR0C = ((0‹‹UMSEL01)|(0‹‹UMSEL00)|(0‹‹UPM01)|(0‹‹UPM00)|( 1‹‹USBS0)|(0‹‹UCSZ01)|(3‹‹UCSZ00)|(0‹‹UCPOL0));
}
void main(void)
{
// Global enable interrupts
#asm("sei")
USART_Init( 0x33); //9600 на 8МГц
// USART_Transmit(ReceiveString);
while (1)
{if (bcounter)
{
bcounter=1;
USART_Transmit(bcounter,ReceiveString); //Передача количества байт (bcounter, массив ReceiveString)
bcounter=0;
ReceiveString[0]=0;
}
};
}