搜索
bottom↓
回复: 2

Uart6串口通信的问题

[复制链接]

出0入0汤圆

发表于 2010-8-5 09:45:52 | 显示全部楼层 |阅读模式
我用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;//接收标志清零
              }
        }
}

出0入0汤圆

发表于 2010-8-5 11:30:35 | 显示全部楼层
1、首先察看一下你的与电脑连接的串口工具是否是正常的;
2、你的发送的中断屏蔽试试看,或直接放在发送中断里进行。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 16:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表