串口接收不到数据,但是接收数据个数在变化,求解释
时间: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--) ;
}
* 标题: ************* 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转串口线,更换串口调试软件。