В коде необходимо реализовать передачу 8 байт и получить их обратно. МК Silabs C8051f320. Однако, иногда приходят не все символы. В чем проблема?
(out) ff aa aa aa
(in) ff aa aa aa
(out) ff 11 aa aa
(in) 11 aa aa
Код программы:
#include "C8051F320.h"
sbit LED1=P2^2;
sbit LED2=P2^3;
unsigned char i;
unsigned char Buffer_RX[8];
int Counter = 0; //инициализация счетчика байтов
void PCA_Init()
{
PCA0MD &= ~0x40;
PCA0MD = 0x00;
}
void Timer_Init()
{
TCON = 0x40;
TMOD = 0x20;
CKCON = 0x08;
TH1 = 0xCC;
}
void UART_Init()
{
SCON0 = 0x90;
}
void Port_IO_Init()
{
P0MDOUT = 0x10;
P2MDOUT = 0x0C;
P0SKIP = 0xCF;
P1SKIP = 0xFF;
P2SKIP = 0x03;
XBR0 = 0x01;
XBR1 = 0x40;
}
void Oscillator_Init()
{
CLKSEL = 0x10;
OSCICN = 0x83;
}
void Interrupts_Init()
{
IE = 0x90;
}
void Init_Device(void)
{
Timer_Init();
UART_Init();
Port_IO_Init();
Oscillator_Init();
Interrupts_Init();
PCA_Init();
}
void main(void)
{
Init_Device();
while(1)
{
}
}
void UART0_Interrupt (void) interrupt 4
{
if (RI0==1)
{
RI0=0;
if (Counter<8)
{
Buffer_RX[Counter]=SBUF0;
SBUF0=Buffer_RX[Counter];
Counter++;
}
else
Counter = 0;
}
if (TI0==1)
{
TI0=0;
}
}
(out) ff aa aa aa
(in) ff aa aa aa
(out) ff 11 aa aa
(in) 11 aa aa
Код программы:
#include "C8051F320.h"
sbit LED1=P2^2;
sbit LED2=P2^3;
unsigned char i;
unsigned char Buffer_RX[8];
int Counter = 0; //инициализация счетчика байтов
void PCA_Init()
{
PCA0MD &= ~0x40;
PCA0MD = 0x00;
}
void Timer_Init()
{
TCON = 0x40;
TMOD = 0x20;
CKCON = 0x08;
TH1 = 0xCC;
}
void UART_Init()
{
SCON0 = 0x90;
}
void Port_IO_Init()
{
P0MDOUT = 0x10;
P2MDOUT = 0x0C;
P0SKIP = 0xCF;
P1SKIP = 0xFF;
P2SKIP = 0x03;
XBR0 = 0x01;
XBR1 = 0x40;
}
void Oscillator_Init()
{
CLKSEL = 0x10;
OSCICN = 0x83;
}
void Interrupts_Init()
{
IE = 0x90;
}
void Init_Device(void)
{
Timer_Init();
UART_Init();
Port_IO_Init();
Oscillator_Init();
Interrupts_Init();
PCA_Init();
}
void main(void)
{
Init_Device();
while(1)
{
}
}
void UART0_Interrupt (void) interrupt 4
{
if (RI0==1)
{
RI0=0;
if (Counter<8)
{
Buffer_RX[Counter]=SBUF0;
SBUF0=Buffer_RX[Counter];
Counter++;
}
else
Counter = 0;
}
if (TI0==1)
{
TI0=0;
}
}