微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 串口接收不到数据,但是接收数据个数在变化,求解释

串口接收不到数据,但是接收数据个数在变化,求解释

时间:10-02 整理:3721RD 点击:
**********************************************************************************
*  标题:       ************* AD*******************                         *
一路AD脉搏波转换,通过串口发送到上位机
***********************************************************************************/
#include<reg51.h>
#include <I2C.H>
#include<stdio.h>
#define  PCF8591 0x90    //PCF8591 地址
void delay(unsigned int i);//函数声明
unsigned char AD_CHANNEL;
//unsigned char  D[20];
unsigned int a;   
/*******************************************************************
ADC发送字节[命令]数据函数               
*******************************************************************/
bit ISendByte(unsigned char sla,unsigned char c)
{
   Start_I2c();              //启动总线
   SendByte(sla);            //发送器件地址
   if(ack==0)return(0);
   SendByte(c);              //发送数据
   if(ack==0)return(0);
   Stop_I2c();               //结束总线
   return(1);
}
/*******************************************************************
ADC读字节数据函数               
*******************************************************************/
unsigned char IRcvByte(unsigned char sla)
{  unsigned char c;
   Start_I2c();          //启动总线
   SendByte(sla+1);      //发送器件地址
   if(ack==0)return(0);
   c=RcvByte();          //读取数据0
   Ack_I2c(1);           //发送非就答位
   Stop_I2c();           //结束总线
   return(c);
}
//******************************************************************/
main()
{  
        SCON = 0x50;       //REN=1允许串行接受状态,串口工作模式2         
     TMOD|= 0x20;      //定时器工作方式2                       
  PCON|= 0x80;      //波特率提高一倍                                                     
     TH1 = 0xF3;     // //baud*2  /*  波特率4800、数据位8、停止位1。效验位无 (12M)
     TL1 = 0xF3;
  TR1  = 1;        //开启定时器1                                                      
  ES   = 1;        //开串口中断                  
  EA   = 1;        // 开总中断
  
        while(1)
   {/********以下AD处理*************/  
             ISendByte(PCF8591,0x40);
    for(a=0;a<20;a++)
    {
                SBUF=IRcvByte(PCF8591);  //ADC0 模数转换1
       while(!TI);    // 等特数据传送 (TI发送中断标志)
          TI = 0;
    }
       delay(1000);  
   }
   
}
  
/**************************************************
                     
    延时处理程序            
              
**************************************************/
void delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--)
  for(j = 200; j > 0; j--) ;
}

上位机以为收到的是ASCII码

用的什么接收,有串口助手试一下,改成十六进制显示

就用的串口调试器,16进制也不行呀

建议检查串口连接线,特别是usb转串口线,更换串口调试软件。

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

网站地图

Top