|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2005-11-10 14:54:02
|
显示全部楼层
难道初始化的程序有错啊,
实在找不到什么原因来了,
//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9600 (0.0%)
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
//UCSR0B[RXCIE0,TXCIE0,UDRIE0,RXEN0,TXEN0,UCSZ20,RXB80,TXB80]
//Bit 7 – RXCIE0: RX Complete Interrupt Enable
UCSR0A = 0x00;
//UCSR0A[RXC0,TXC0,UDRE0,FE0,DOR0,PE0,U2X0,MPCM0]
UBRR0H = 0x00; //set baud rate high
UBRR0L = 47; //set baud rate low
UCSR0C = (BIT(UCSZ01)|BIT(UCSZ00));//设置成8位;
//UBRR0 = 47; // set the baud rate
UCSR0B = ((1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0));
//本文件用的全局变量作初始化
UART_RxHead = 0;
UART_RxTail = 0;
UART_Rx_Main_Ptr = 0;
}
/***************************************************************************
* 函数名 : uart0_rx_isr
* 入口 : void
* 出口 : void
* 目的 :
* 描述 : 接收采用中断接收的方式(只负责接收)
UART_Rx_Main_Ptr是让主程序来查接收数据的多少,,进而解包,处理
***************************************************************************/
#pragma interrupt_handler uart0_rx_isr:19
void uart0_rx_isr(void)
{
unsigned char data;
unsigned char tmphead;
data = UDR0; // read the received data
// calculate buffer index
tmphead = ( UART_RxHead + 1 ) & UART_RX_BUFFER_MASK;//0x7f
UART_RxHead = tmphead; // store new index
if ( tmphead == UART_RxTail )
{
// ERROR! Receive buffer overflow
}
UART_RxBuf[tmphead] = data; // store received data in buffer
UART_Rx_Main_Ptr++; //主指针加1
} |
|