我的一个uart中断接收的程序,使用环形buffer,问题是总是不能接收数据,通过串口调试助手发送数据没用,对uart中断接收很是迷茫,不知道uart什么时候产生接收中断啊,板子是C8051F340
//UART
//-----------------------------------------
// Includes
//-----------------------------------------
#include <C8051F340.h> // SFR declarations
#include <stdio.h> // printf is declared here
//-----------------------------------------
// 16-bit SFR Definitions for the 'F34x
//-----------------------------------------
sfr16 TMR2 = 0xCC; // Timer2 low and high bytes together
//-----------------------------------------
// User-defined types, structures, unions etc
//-----------------------------------------
#ifndef BYTE
#define BYTE unsigned char
#endif
#ifndef UINT
#define UINT unsigned int
#endif
//-----------------------------------------
// Global Constants
//-----------------------------------------
#define BAUDRATE 115200 // Baud rate of UART in bps
#define SYSCLK 24000000 // Internal oscillator frequency in Hz
sbit LED_1 = P3^4; // LED='1' means ON
sbit LED_2 = P3^5;
#define IN_LEN 16
unsigned char in_buffer[IN_LEN];
unsigned int inhead,intail;
bit infull;
bit readflag;
//-----------------------------------------
// Function Prototypes
//-----------------------------------------
void PCA0_Init (void);
void OSCILLATOR_Init (void);
void PORT_Init (void);
void TIMER2_Init (void);
void UART0_Init (void);
int test_rx(char* str,int len);
void Init_Device (void);
void UART_interrupt( void );
void UART0_Send_data(unsigned char Send_data)
{
SBUF0=Send_data;
while(!TI0);
TI0=0;
}
void UART0_Send_Longdata(unsigned char *str, unsigned int Stringlen)
{
unsigned int i = 0 ;
do {
UART0_Send_data(*(str+i));
i++;
} while (i<Stringlen);
}
void UART_interrupt(void) interrupt 4
{
if (RI0)
{
in_buffer[intail] = SBUF0; // 从串口接收一个字符