|
#include
#include#define LOW_BYTE(WORD) *((unsigned char*)&WORD)
#define HIGH_BYTE(WORD) *((unsigned char*)&WORD+1)struct b_data
{
unsigned char counter;
unsigned char rd_index;
unsigned char wr_index;
char data[8];
}
;struct b_data tx_buffer;
union test
{
struct tt
{
int a;
int b;
char c;
} qt;
unsigned char qq[sizeof(tt)];
}
database;
void FlushBuffer(void);
void Init_Uart(void);void Init_Uart(void)
{
DDRB |= 0x02; //TxD - 0x02- out, RxD - in 0x01;
//38400
UBRRH = 0;
UBRRL = 25;
//8 bit 1 stop asyncronicus interrupts enable
UCSRC = (1<UCSRB = (1<< TXCIE) | (1< FlushBuffer();
}// USART Transmitter interrupt service routine
#pragma vector = USART_TXC_vect
__interrupt void USART_TXC(void)
{
if (tx_buffer.counter)
{
--tx_buffer.counter;
UDR = tx_buffer.data[tx_buffer.rd_index++];
if (tx_buffer.rd_index == 8)
tx_buffer.rd_index = 0;
}
}void putchar(unsigned char ch)
{
while (tx_buffer.counter == 8);
__disable_interrupt();
if (tx_buffer.counter || ((UCSRA & UDRE)==0))
{
tx_buffer.data[tx_buffer.wr_index++] = ch;
if (tx_buffer.wr_index == 8)
tx_buffer.wr_index = 0;
tx_buffer.counter++;
}
else
UDR=ch;
__enable_interrupt();
}void FlushBuffer(void)
{
tx_buffer.counter = 0;
tx_buffer.rd_index = 0;
tx_buffer.wr_index = 0;
}
void main (void)
{
unsigned char i;
unsigned char *pointer;
Init_Uart();
for (;;)
{
LOW_BYTE(tt.a) = PORTA;
HIGH_BYTE(tt.a) = PORTB;
tt.b = PORTC;
tt.c = PORTD;
pointer = &qq;
for (i = 0; i < sizeof(tt); i++)
{
putchar(*(pointer++));
}
}
}
E-mail: info@telesys.ru