打印

请教 dspic30f3014串口通信不正常

[复制链接]
1360|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xqkunkun|  楼主 | 2013-3-19 17:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用PC给单片机发送7个数据,单片机再传回前5个数据,用debugger是正常的,烧到片子里就接收不正常。我已经调了好多天了,数据手册也研究几遍了,实在是没找到端倪,请大侠们不吝指教。#include "p30f3014.h"
int failmemory[40];

unsigned    int                   receive[7]={0,0,0,0,0,0,0};               // 接收数据数组
unsigned        int           send[5]={0,0,0,0,0};                        // 发送数据数组
unsigned        int           receive_count=0;                // 接收数据个数计数
unsigned        int           send_count=0;                // 发送数据个数计数
unsigned        int           Receiveflag=0;                     // =1,接收到7个数据

void Uart_Initial()   
   {
    TRISFbits.TRISF4 =1;            //RC脚输入  
    TRISFbits.TRISF5 =0;            //TX脚输出
    IFS1bits.U2TXIF=0;             //复位发送中断标志位         
    IFS1bits.U2RXIF=0;             //复位接收中断标志位  
    IPC6bits.U2RXIP=1;             //收中断优先级:1级                 
    IPC6bits.U2TXIP=1;
        U2MODE=0x8000;  //使能UART,8,N,1
        U2STA=0x0000;   //发送使能
        U2BRG=0x31;     //9600pds                     
    }  

void __attribute__((__interrupt__)) _U2RXInterrupt()
   {   
         while(U2STAbits.URXDA==1)  
        {
          receive[receive_count]=U2RXREG;                // 接收数据并存储          
          receive_count++;                        // 接收计数器加1
         if(receive_count>6)                                    // 如果已经接收到5个数据
            {
                 receive_count=0;                        // 接收计数器清0
                 Receiveflag=1;
            }
       }
      IFS1bits.U2RXIF=0;   
  }

void __attribute__((__interrupt__)) _U2TXInterrupt()
{         
    while(U2STAbits.TRMT==0);
    IFS1bits.U2TXIF=0;    //复位发送中断标志位  
}

int main(void)
{
     
      unsigned int j=0;  
      receive_count=0;                // 接收数据个数计数
      send_count=0;                // 发送数据个数计数
      Receiveflag=0;                     // =1,接收到8个数据
      Uart_Initial();  
      for(j=0;j<5;j++){};
      IEC1bits.U2RXIE=1 ;                //UART1接收使能                                    
      IEC1bits.U2TXIE=1;                             //UART1发送使能
      U2STAbits.UTXEN=1;
                                            
                   while(1)
                    {
                              if(Receiveflag==1)
                                {
                                                                  
                                     if(U2STAbits.UTXBF==0)
                                     {
                                          if(send_count<5)                                    
                                         {
                                           U2TXREG=receive[send_count];                              
                                           send_count++;                                   
                                          }
                                          else
                                          {
                                            Receiveflag=0;
                                            send_count=0;       
                                          }

                                      }
                                  }
                    }
  }
沙发
jinhui2007| | 2013-3-19 23:33 | 只看该作者
你是哪的?我可以帮你调  qq:435719479

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝