lizexi486 发表于 2010-8-5 09:45:52

Uart6串口通信的问题

我用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_SIZE5
defineUART6_RX_BUF_SIZE5

//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
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;
         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 =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;//接收标志清零
            }
      }
}

coobakl 发表于 2010-8-5 11:30:35

1、首先察看一下你的与电脑连接的串口工具是否是正常的;
2、你的发送的中断屏蔽试试看,或直接放在发送中断里进行。
页: [1]
查看完整版本: Uart6串口通信的问题