本帖最后由 lizexi486 于 2010-8-5 11:28 编辑
我用PC向单片机发送一组数据,单片机在接收完数据后,再向PC发回一组数据以表示接收到数据,现在我通过串口助手调试没反应,不知道问题出在哪,不知道串口初始化寄存器设置对不对,请各位帮忙看看啊。
#define UART6_DATA_LENGTH_8 0x04 /* character length of data =8 bits*/
#define UART6_STOP_BIT_1 0x00 /* stop bits = 1 */
#define UART6_PARITY_NONE 0x00 /* transfer without parity */
#define UART6_ASICL6_INITIALVALUE 0x14
#define UART6_FIRST_BIT_LSB 0x02 /* LSB */
#define UART6_FIRST_BIT_MSB 0x00 /* MSB */
#define UART6_TXD6_OUTPUT_NORMAL 0x00 /* TxD6 output normal*/
#define UART6_BASECLK_8 0x07 /* fxclk0=fprs/128*/
#define UART6_TX_BUF_SIZE 5
#define UART6_RX_BUF_SIZE 5
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
void UART6_Init( void )/*UART6串口初始化*/
{
TXE6 = 0; /* uart6 transmit disable*/
RXE6 = 0; /* uart6 receive disable*/
STMK6 =1; /* INTST6 disable */
SRMK6 =1; /* INTSR6 disable */
SREMK6 =1; /* INTSRE6 disable*/
STIF6 = 0; /* INTST6 IF clear*/
SRIF6 = 0; /* INTSR6 IF clear*/
SREIF6 =0; /* INTSRE6 IF clear*/
ASIM6 = UART6_ERR_INTSRE6|UART6_DATA_LENGTH_8|UART6_STOP_BIT_1|UART6_PARITY_NONE;
/*8位数据位,1位停止位,无奇偶校验位*/
ASICL6 = UART6_ASICL6_INITIALVALUE |UART6_FIRST_BIT_LSB|UART6_TXD6_OUTPUT_NORMAL;
/*SBF输出宽度13位,首位LSB,正常模式输出*/
CKSR6 = UART6_BASECLK_8;
/*128分频*/
BRGC6 = 6;/*使用外部晶振:14.745M,波特率:14.745M/6*2*128近似等于9600*/
/*INTST6 中断高优先级*/
STPR6 = 1;
/*INTSR6 中断高优先级*/
SRPR6 = 1;
/*INTSRE6中断高优先级*/
SREPR6 = 1;
/*TXD6 引脚设为输出*/
P1 |= 0x08;
PM1 &=~0x08;
/*RXD6 引脚设为输入*/
PM1 |=0x10;
}
//-----------------------------------------------------------------------------
void UART6_Start( void )
{
STMK6 = 0; /* INTST6 enable */
SRMK6 = 0; /* INTSR6 enable */
SREMK6 = 0; /* INTSRE6 enable */
POWER6 =1; /* uart6 enable */
TXE6 = 1; /* uart6 transmit enable */
RXE6 = 1; /* uart6 receive enable */
}
//-----------------------------------------------------------------------------
//Uart6_Tx_Buff[]:发送缓冲区
//UART6_TX_CNT:发送计数值
//UART6_TX_BUF_SIZE:发送缓冲区最大容量
//-----------------------------------------------------------------------------
void Uart6_SendData( void )/*发送数据*/
{
while(UART6_TX_CNT<=UART6_TX_BUF_SIZE-1)
{
TXB6=Uart6_Tx_Buff[UART6_TX_CNT];
while(ASIF6&0x02);//等待发送使能
UART6_TX_CNT++;
}
}
//----------------------------------------------------------------------------
//uart6_rx_buffer[]:接收缓冲区
//UART6_RX_BUF_SIZE:接收缓冲区最大接收容量
//uart6_rx_buf_cnt:接收缓冲区计数变量
//
//----------------------------------------------------------------------------
__interrupt void MD_INTSR6( void )/*接收中断*/
{
UCHAR err_type;
UCHAR rx_data;
err_type = ASIS6;
rx_data = RXB6;
if( err_type & 0x07 )/* status check */
{
return;
}
/* The interrut generated by receive end */
if(uart6_rx_buf_cnt < UART6_RX_BUF_SIZE)
{
uart6_rx_buffer[uart6_rx_buf_cnt++] =rx_data;
}
if(+uart6_rx_buf_cnt == UART6_RX_BUF_SIZE-1)/*接收满*/
{
RX_Finish=1;//置接收完成标志
uart6_rx_buf_cnt = 0;
}
}
}
//------------------------------------------------------------------------------
void main(void)
{
UART6_Init();
UART6_Start();
while(1)
{
if(RX_Finish) //接收完成后开始发送数据回PC
{
Uart6_SendData();
RX_Finish=0;//接收标志清零
}
}
}
|