草明&草明 2019-08-21 10:06 采纳率: 66.7%
浏览 458
已采纳

急!!!用串口助手采集传感器的数据,为什么只有一列有数据而其他的都是0???

通过51单片机采集传感器的数据,然后再发送到PC端。不知道是不是代码哪里写错了,求大佬告知!!!
图片说明

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"

typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
#define SIZE 28

u8 AD_Value[SIZE];
//---定义使用的IO口---//
sbit DOUT = P3^7; //输出
sbit CLK = P3^6; //时钟
sbit DIN = P3^4; //输入
sbit CS = P3^5; //片选

/****************************************************************************
函数名:SPI_Start
*输 入:无
*输 出:无
*功 能:初始化触摸SPI
*
**************************************************************************/

void SPI_Start(void)
{
CLK = 0;
CS = 1;
DIN = 1;
CLK = 1;
CS = 0;

}
/****************************************************************************
函数名:SPI_Write
*输 入:dat:写入数据
*输 出:无
*功 能:使用SPI写入数据
*
**************************************************************************/

void SPI_Write(u8 dat)
{
u8 i;
CLK = 0;
for(i=0; i {
DIN = dat >> 7; //放置最高位
dat <<= 1;
CLK = 0; //上升沿放置数据

    CLK = 1;

}

}
/****************************************************************************
函数名:SPI_Read
*输 入:无
*输 出:dat:读取 到的数据
*功 能:使用SPI读取数据
*
**************************************************************************/

u8 SPI_Read(void)
{
u16 i, dat=0;
CLK = 0;
for(i=0; i<12; i++) //接收12位数据
{
dat <<= 1;

    CLK = 1;
    CLK = 0;

    dat |= DOUT;

}
return (u8)(dat>>4);    

}

/****************************************************************************
函数名:Read_AD_Data
*输 入:cmd:读取的X或者Y
*输 出:endValue:最终信号处理后返回的值
*功 能:读取触摸数据
*
**************************************************************************/
void Read_AD_Data(u8 cmd)
{
u8 i,j;
CLK = 0;
CS = 0;
SPI_Write(cmd); //写入命令
for(i=6; i>0; i--); //延时等待转换结果
CLK = 1; //发送一个时钟周期,清除BUSY
nop();
nop();
CLK = 0;
nop();
nop();
for(j=0;j<SIZE;j++)
{
AD_Value[j]=SPI_Read();
}
CS = 1;
}

/*.....................串口初始化....................*/
void rs232_init()
{
TMOD=0x20; //定时器T1,工作在方式2
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
PCON=0X80; //波特率加倍

TR1=1; //启动定时器T1

     //SCON=0X50;
     SM0=0;
     SM1=1; //串口工作在方式1
     REN=1;    //先设定好工作方式,在打开允许接收
     //------
     ES=1;     //打开串口中断
     EA=1;      //打开总中断

}

void main()
{
rs232_init();

while(1)
{
u8 k;
Read_AD_Data(0xE4); //AIN3外部输入
for(k=0;k<SIZE;k++)
{
SBUF=AD_Value[k];
while(!TI);
TI=0;
//break;
}
break;

}

}


  • 写回答

1条回答 默认 最新

  • 关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 11月1日

悬赏问题

  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题