当前位置: 代码迷 >> 单片机 >> !uart中断有关问题
  详细解决方案

!uart中断有关问题

热度:106   发布时间:2016-04-28 15:39:38.0
求助!!uart中断问题
我的一个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; // 从串口接收一个字符