找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2317|回复: 5
收起左侧

51单片机串口数据采集 收到的数据一直不变?(我要它实时显示)

[复制链接]
ID:1014767 发表于 2022-4-26 16:05 | 显示全部楼层 |阅读模式
有没有大佬帮忙看一下,我写的是传感器采集信号然后通过adc0809发给串口, 在循环里发送, 结果 串口收到的数据一直不变(我要它实时显示)  有没有大佬帮忙看看啥问题
单片机源程序如下:
#include<reg52.h>
#include <stdio.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
sbit STR=P1^0;  //ad0808的端口定义
sbit OE=P1^2;
sbit EOC=P1^1;
sbit CLK=P1^3;
sbit ADDA=P3^3; //通道选择
sbit ADDB=P3^4;
sbit ADDC=P3^5;
float ad_date1,ad_date2;
uchar ad_1,ad_2;

void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}

void uart()
{
                                     //?????
        SCON = 0x50;                //8位数据,可变波特率
        TMOD &= 0x0F;                //清除定时器1模式位
        TMOD |= 0x20;                //设定定时器1为8位自动重装方式
        TL1 = 0xFD;                //设定定时初值
        TH1 = 0xFD;                //设定定时器重装值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1
        TI=1;
        EA=1;
        ES=1;

}

void temr0()          //9600bps@11.0592MHz
{


        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x02;                //设置定时器模式
        TL0 = 0xFF;                //设置定时初值
        TH0 = 0xFF;                //设置定时重载值
        TF0 = 0;                //清除TF0标志
  ET0=1;
        TR0 = 1;                //定时器0开始计时
}
void temr_o() interrupt 1
{
                                CLK=~CLK;
}

void ad_date()
{
          ADDA=0;
                ADDB=0;
                ADDC=0;
          STR=0;
          STR=1;
        delayms(1);
          STR=0;
         while(EOC==0)
                 OE=1;
         ad_1=P2;
        ad_date1=(float)ad_1*5.0/256.0;
         delayms(10);
          ADDA=0;
                ADDB=0;
                ADDC=1;
          STR=0;
          STR=1;
          STR=0;
         while(EOC==0)
                 OE=1;
         ad_2=P2;
         ad_date2=(float)ad_2*5.0/256.0;
}
void main()
{
        uart();
        temr0();
        while(1)
        {
                        ad_date();
                printf("%2.2f\r",ad_date1);
                delayms(100);
                printf("%2.2f\n",ad_date2);
                delayms(100);
        }
               
      
}

回复

使用道具 举报

ID:123289 发表于 2022-4-26 16:58 | 显示全部楼层
1、先写一个程序SM,能从寄存器MM中取出数字显示。
2、将AD读到的数据,放到MM中,再调用SM。
这样做条理清晰,又方便调试。
按照这个方式重写程序吧。
回复

使用道具 举报

ID:390416 发表于 2022-4-27 08:09 | 显示全部楼层
这个帖子,里面有串口发送代码,你自己把数据赋值替换里面的参考数值就行了。
http://www.51hei.com/bbs/dpj-213898-1.html
回复

使用道具 举报

ID:161164 发表于 2022-4-27 09:18 | 显示全部楼层
CLK这样写可以和其他脚的信号同步吗?
2022-04-27_091716.png
回复

使用道具 举报

ID:1014767 发表于 2022-5-3 15:46 | 显示全部楼层
lkc8210 发表于 2022-4-27 09:18
CLK这样写可以和其他脚的信号同步吗?


啥意思a
回复

使用道具 举报

ID:1014767 发表于 2022-5-3 15:46 | 显示全部楼层
yzwzfyz 发表于 2022-4-26 16:58
1、先写一个程序SM,能从寄存器MM中取出数字显示。
2、将AD读到的数据,放到MM中,再调用SM。
这样做条理 ...

能将的清楚些吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表