微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > PIC18F25K22串口发送问题

PIC18F25K22串口发送问题

时间:10-02 整理:3721RD 点击:
/中断响应
void interrupt ISR(void)
{
  
  if(RC2IF) //串口2中断处理
{
       recv_buff[recv_pt++]=RCREG2;    //所有数据接收下来
    recv_cnt=0;                 //超时计数器清0
    if(recv_pt>=USART_RECV_MAX)recv_pt=0;       //防止溢出
    }
  if(TMR0IF)          //定时器溢出中断
    {
        TMR0IF = 0;                          //清除T0IF      
  TMR0=0xF3; //20ms
  asm("nop");
  asm("nop");
  time_us++;
    }
}
void senddata1(uchar byte)
{
while(!TRMT2)   //串口2的发送中断标记      
  continue;
TXREG2 = byte;
}
void comm_recv(uint time)
{
uint crc_num;
static uchar cnter=0;   
uchar send_arr[50],i;
if(cnter!=time)  //20ms
{
cnter=time;
//通过时间超时 判断串口2接收完毕
if(recv_ok==0)
  {
  if(recv_pt>0)
   {
   recv_cnt++;
   if(recv_cnt>=USART_OVER_TIME)   //100ms  超时 表面接收完成
    {
    recv_cnt=0;
    recv_ok=1;    //接收完成标记
    }
   }
  }
if(OERR2==1)  //溢出错误
  {
  CREN2=0;Delay(10);CREN2=1;  //清除溢出错误
  }
if(recv_ok==1)
  {
         
      crc_num=crc16(recv_buff,recv_pt-2);   //计算CRC16值
   if(recv_buff[0]==0xAA)//开头正确  AA
    {
    if(recv_buff[1]==0xBB)         
     {
                    senddata1(13);//发送温度
                    senddata1(13);//发送土壤湿度
                    
     if(recv_buff[2]==0xCC)         
      {
                         senddata1(real_light/256);//发送光照
                         senddata1(real_light%256);
      }
     if(recv_buff[3]==0xDD)        
      {
      senddata1(real_CO2/256);//发送CO2浓度
                        senddata1(real_CO2%256);
      }
     if(recv_buff[4]==0XEE)       //发送小时、分钟、秒
      {
      senddata1(13);      
                        senddata1(nowtime.minute);
                        senddata1(nowtime.second);
      }
     }
    }
   
  recv_ok=0;
  recv_pt=0;
  }
}
}
这是中断接收和发送程序,上位机发送指令后,收到指令发送对应的数据,可是senddata1(13);时上位机接收到的确实0A也就十,发送其他数据都好的,就是唯独13,求解啊。

?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top