找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2389|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

51單片機串口數(shù)據(jù)采集 收到的數(shù)據(jù)一直不變?(我要它實時顯示)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1014767 發(fā)表于 2022-4-26 16:05 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
有沒有大佬幫忙看一下,我寫的是傳感器采集信號然后通過adc0809發(fā)給串口, 在循環(huán)里發(fā)送, 結(jié)果 串口收到的數(shù)據(jù)一直不變(我要它實時顯示)  有沒有大佬幫忙看看啥問題
單片機源程序如下:
#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位數(shù)據(jù),可變波特率
        TMOD &= 0x0F;                //清除定時器1模式位
        TMOD |= 0x20;                //設(shè)定定時器1為8位自動重裝方式
        TL1 = 0xFD;                //設(shè)定定時初值
        TH1 = 0xFD;                //設(shè)定定時器重裝值
        ET1 = 0;                //禁止定時器1中斷
        TR1 = 1;                //啟動定時器1
        TI=1;
        EA=1;
        ES=1;

}

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


        TMOD &= 0xF0;                //設(shè)置定時器模式
        TMOD |= 0x02;                //設(shè)置定時器模式
        TL0 = 0xFF;                //設(shè)置定時初值
        TH0 = 0xFF;                //設(shè)置定時重載值
        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);
        }
               
      
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:123289 發(fā)表于 2022-4-26 16:58 | 只看該作者
1、先寫一個程序SM,能從寄存器MM中取出數(shù)字顯示。
2、將AD讀到的數(shù)據(jù),放到MM中,再調(diào)用SM。
這樣做條理清晰,又方便調(diào)試。
按照這個方式重寫程序吧。
回復(fù)

使用道具 舉報

板凳
ID:390416 發(fā)表于 2022-4-27 08:09 | 只看該作者
這個帖子,里面有串口發(fā)送代碼,你自己把數(shù)據(jù)賦值替換里面的參考數(shù)值就行了。
http://www.torrancerestoration.com/bbs/dpj-213898-1.html
回復(fù)

使用道具 舉報

地板
ID:161164 發(fā)表于 2022-4-27 09:18 | 只看該作者
CLK這樣寫可以和其他腳的信號同步嗎?
回復(fù)

使用道具 舉報

5#
ID:1014767 發(fā)表于 2022-5-3 15:46 | 只看該作者
lkc8210 發(fā)表于 2022-4-27 09:18
CLK這樣寫可以和其他腳的信號同步嗎?


啥意思a
回復(fù)

使用道具 舉報

6#
ID:1014767 發(fā)表于 2022-5-3 15:46 | 只看該作者
yzwzfyz 發(fā)表于 2022-4-26 16:58
1、先寫一個程序SM,能從寄存器MM中取出數(shù)字顯示。
2、將AD讀到的數(shù)據(jù),放到MM中,再調(diào)用SM。
這樣做條理 ...

能將的清楚些嗎
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表