久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

RS485溫濕度變送器(導軌式)stm32串口解析代碼+相關資料

查看數: 10297 | 評論數: 26 | 收藏 12
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2020-11-11 19:04

正文摘要:

最近做設計用到了這個溫濕度變送器,自己寫的代碼以及網上搜集的一些資料進行了統一整理。 代碼評論后可見,資料齊全! 本貼為原創,轉載請注明出處!時間:2020/11/ 祝好!

回復

ID:30165 發表于 2024-12-22 10:09
最近剛好在學習這個  非常感謝給了一條思路
ID:1067504 發表于 2024-10-25 22:11
先收藏,有幣再來下
ID:543424 發表于 2023-10-14 12:13
用過這個模塊,485觸摸屏通訊。做實驗這個模塊好像只能顯示溫度,沒有開關量控制協議
ID:1094506 發表于 2023-9-25 16:06
好東西,看看是不是完整的資料!!!!!。。。。。!
ID:1066371 發表于 2023-3-13 16:28
求源碼
ID:929006 發表于 2021-11-9 20:35
這個程序好像不完整啊,讀取的溫度,濕度沒有經過處理,沒有顯示啊
ID:929006 發表于 2021-11-8 00:03
wbaisen 發表于 2021-11-7 14:14
好久沒看論壇了,你是用485模塊?

是的。我用MAX485模塊,不知道你的程序里,方向引腳是接單片機的哪個管腳哦?急!
ID:929006 發表于 2021-11-7 23:45
wbaisen 發表于 2021-11-7 14:14
好久沒看論壇了,你是用485模塊?

MAX485模塊
ID:721056 發表于 2021-11-7 14:14
wsh123456789 發表于 2021-8-14 23:20
看貼的人不能說下嗎?MAX485的方向引腳接哪里?

好久沒看論壇了,你是用485模塊?
ID:929006 發表于 2021-8-16 19:38
MAX485的方向引腳接哪里?程序未定義啊
ID:929006 發表于 2021-8-14 23:20
本帖最后由 wsh123456789 于 2021-8-16 18:28 編輯

看貼的人不能說下嗎?MAX485的方向引腳接哪里?
ID:929006 發表于 2021-7-22 21:10
大佬看下我的程序,用51單片機讀溫濕度數據
/*****************************main.c 文件程序源代碼*****************************/
#include <reg52.h>
#include <intrins.h>


/* 數碼管顯示配置,可以不看 */
typedef unsigned char u8;
u8 code smgduan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

unsigned int wendu_H=0x00;                 //溫度值高4位字節
unsigned int wendu_L=0x00;                 //溫度值低4位字節
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

/* 485通信 */
unsigned char len;
unsigned char pdata buf[40]={0x01,0x03,0x02,0x00,0x00,0x03,0x04,0x73};

sbit RS485_DIR=P1^7;
bit flagFrame = 0;  //幀接收完成標志,即接收到一幀新數據
bit flagTxd = 0; //單字節發送完成標志,用來替代 TXD 中斷標志位
unsigned char cntRxd = 0;   //接收字節計數器
unsigned char pdata bufRxd[64];  //接收字節緩沖區
unsigned char TORH=0;
unsigned char TORL=0;

/* 延遲函數,數碼管顯示調用 */
void delay(unsigned int t,unsigned int u)
{
        unsigned int i,j;
    for(i=0;i<t;i++)
        for(j=0;j<u;j++);
}


/* 串口配置函數,baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
        SCON = 0x50; //配置串口為模式 1
        TMOD &= 0x0F; //清零 T1 的控制位
        TMOD |= 0x20; //配置 T1 為模式 2
        TH1 = 256 - (12000000/12/32)/baud; //計算T1重載值,12M晶振
        TL1 = TH1;     //初值等于重載值
        ET1 = 0; //禁止 T1 中斷
        ES  = 1;       //使能串口中斷
        TR1 = 1; //啟動 T1
}

void DelayX10us(unsigned char t)
{
do{
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  }while(--t);
}

/* 串口數據寫入,即串口發送函數,buf-待發送數據的指針,len-指定的發送長度 */

void UartWrite(unsigned char *buf, unsigned char len)
{
        RS485_DIR=1;
    while (len--)  //循環發送所有字節
    {
        flagTxd = 0;       //清零發送標志
        SBUF = *buf++;     //發送一個字節數據
        while (!flagTxd); //等待該字節發送完成
    }
        DelayX10us(5);
        RS485_DIR=0;
}

/* 串口數據讀取函數,buf-接收指針,len-指定的讀取長度,返回值-實際讀到的長度 */
unsigned char UartRead(unsigned char *buf, unsigned char len)
{
    unsigned char i;
     
    if (len > cntRxd)  //指定讀取長度大于實際接收到的數據長度時,
   {                     //讀取長度設置為實際接收到的數據長度
       len = cntRxd;
   }
   for (i=0; i<len; i++)  //拷貝接收到的數據到接收指針上
   {
       *buf++ = bufRxd[i];
   }
   cntRxd = 0;  //接收計數器清零
   return len;  //返回實際讀取長度
}

/* 串口接收監控,由空閑時間判定幀結束,需在定時中斷中調用,ms-定時間隔 */
void UartRxMonitor(unsigned char ms)
{
    static unsigned char cntbkp = 0;
    static unsigned char idletmr = 0;

    if (cntRxd > 0)  //接收計數器大于零時,監控總線空閑時間
    {
        if (cntbkp != cntRxd)  //接收計數器改變,即剛接收到數據時,清零空閑計時
        {
            cntbkp = cntRxd;
            idletmr = 0;
        }
        else                      //接收計數器未改變,即總線空閑時,累積空閑時間
        {
            if (idletmr < 30) //空閑計時小于 30ms 時,持續累加
            {
                idletmr += ms;
                if (idletmr >= 30) //空閑時間達到 30ms 時,即判定為一幀接收完畢
                {
                    flagFrame = 1;  //設置幀接收完成標志
                }
            }
        }
    }
    else
    {
        cntbkp = 0;
    }
}

/* 串口中斷服務函數 */
void InterruptUART() interrupt 4
{
    if (RI)  //接收到新字節
    {
        RI = 0;  //清零接收中斷標志位
        if (cntRxd < sizeof(bufRxd)) //接收緩沖區尚未用完時,
        {                                 //保存接收字節,并遞增計數器
            bufRxd[cntRxd++] = SBUF;
        }
    }
    if (TI)  //字節發送完畢
    {
        TI = 0;   //清零發送中斷標志位
        flagTxd = 1;  //設置字節發送完成標志
    }
   
}

void ConfigTimer0(unsigned int ms)
{
    unsigned long tmp;
        tmp=12000000/12;          //12M晶振
        tmp=(tmp*ms)/1000;
        tmp=65536-tmp;
        tmp=tmp+33;
        TORH=(unsigned char)(tmp>>8);
        TORL=(unsigned char)tmp;
        TMOD&=0xF0;
        TMOD|=0x01;
        TH0=TORH;
        TL0=TORL;
        ET0=1;
        TR0=1;
}

void main()
{
EA=1;
ConfigTimer0(1);
ConfigUART(2400);         //設置波特率2400
delay(200,500);
UartWrite(buf,len);         //向傳感器發送命令,01 03 02 00 00 03 04 73
if (flagFrame) //有命令到達時,讀取處理該命令
    {
       flagFrame = 0;
       len = UartRead(buf, sizeof(buf));  //將接收到的命令讀取到緩沖區中
        }
wendu_H=bufRxd[3];                //數據幀第4字節是溫度值高位,
wendu_L=bufRxd[4];                //數據幀第5字節是溫度值低位。
while (1)                                //以下為數碼管顯示溫度值,16進制表示
{
        LSA=0;
    LSB=1;
    LSC=1;
        P0=smgduan[wendu_H%16];
        delay(10,5);
        LSA=1;
    LSB=1;
    LSC=1;
        P0=smgduan[wendu_H/16];
        delay(10,5);
        LSA=0;
    LSB=0;
    LSC=1;
        P0=smgduan[wendu_L%16];
        delay(10,5);
        LSA=1;
    LSB=0;
    LSC=1;
        P0=smgduan[wendu_L/16];
        delay(10,5);
}               
}

void InterruptTimer0() interrupt 1
{
    TH0 = TORH;  //重新加載重載值
    TL0 = TORL;
    UartRxMonitor(1);  //串口接收監控
}
ID:409674 發表于 2021-7-20 10:06
這個變送器買了也有一段時間,現在學習使用。
ID:890487 發表于 2021-7-11 21:14
正好需要 學習一下 謝謝樓主
ID:929006 發表于 2021-7-11 10:39
樓主,改造成STC89C52啊,IIC接口的OLED屏
ID:929006 發表于 2021-7-11 10:37
哪個附件是源碼。第一個嗎?
ID:929006 發表于 2021-7-11 10:34
好東西,正在學習485,一些東西不明白。
ID:721056 發表于 2020-12-1 08:50
zxianyu 發表于 2020-11-29 17:50
參考下,看是否能用51代替 。

配置下51的串口加幾個變量就可以
ID:409674 發表于 2020-11-29 17:50
參考下,看是否能用51代替 。
ID:59423 發表于 2020-11-29 15:17
多謝分享,正在使用溫度變送器
ID:733865 發表于 2020-11-21 20:08
好想法,求看源碼
ID:19198 發表于 2020-11-19 23:23
老規矩,先回后下!!!!!!!
ID:811405 發表于 2020-11-17 15:24
好東西,值得一看
ID:721056 發表于 2020-11-16 18:34
gpdt3209 發表于 2020-11-12 15:32
資料完整就好了。

資料齊全
ID:235691 發表于 2020-11-12 15:32
資料完整就好了。
ID:97678 發表于 2020-11-12 14:55
好東西,看看是不是完整的資料。。。。。。。。。。。

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 视频精品一区二区三区 | 人操人人| 欧美亚洲激情 | 国产91综合 | 综合色婷婷 | 久久毛片 | www性色| 欧美不卡一区二区三区 | 日韩一区二区三区在线 | 欧美成人精品欧美一级 | 激情国产 | 欧美日韩三级在线观看 | 久久国产精品久久久久 | 中文字幕一二三区 | 天天草天天干 | 99视频在线| 一区二区三区视频在线观看 | 亚州午夜精品 | 色综合天天综合网国产成人网 | 国产一区中文字幕 | 中文亚洲视频 | 69视频在线播放 | 一级a性色生活片久久毛片波多野 | 欧美日韩在线不卡 | 女人天堂av| 精品久久精品 | 亚洲欧美日韩系列 | 亚洲一区视频在线 | av国产在线观看 | 日本在线一区二区三区 | 免费视频二区 | 我要看黄色录像一级片 | 欧美黄页| 在线成人www免费观看视频 | 精品欧美一区二区三区久久久 | 久久午夜精品 | 激情视频中文字幕 | 美女网站视频免费黄 | 精品久久九 | 日韩国产免费 | 亚洲精品久久久一区二区三区 |