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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC89C52單片機串口通信發(fā)送DS18B20的數(shù)據(jù)給串口助手

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:435708 發(fā)表于 2019-3-19 22:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
如上所述:
在串口助手輸入任意指令后單片機接受到指令,向電腦一直發(fā)送DS18B20的溫度


代碼如下:
#include<reg52.h>

#include<intrins.h>
#include<absacc.h>
#include<stdio.h>

void Delay1000ms()                //@11.0592MHz
{
        unsigned char i, j, k;

        _nop_();
        i = 8;
        j = 1;
        k = 243;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}



sbit DQ=P1^3;
unsigned char x=0;                                      
signed char m;                                    
unsigned char n;                                             
unsigned int z;
unsigned int c;
unsigned char a;
unsigned char i;                                            
                     









/*****延時子程序*****/
void Delay_DS18B20(int num)
{
        while(num--) ;
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
        unsigned char x=0;
        DQ = 1;                 //DQ復(fù)位
        Delay_DS18B20(8);   //稍做延時
        DQ = 0;                           //單片機將DQ拉低
        Delay_DS18B20(80);  //精確延時,大于480us
        DQ = 1;                 //拉高總線
        Delay_DS18B20(14);
        x = DQ;                   //稍做延時后,如果x=0則初始化成功,x=1則初始化失敗
        Delay_DS18B20(20);
}
/*****讀一個字節(jié)*****/
unsigned char ReadOneChar(void)
{
        unsigned char i=0;
        unsigned char dat = 0;
        for (i=8;i>0;i--)
          {
            DQ = 0;                         //給脈沖信號
            dat>>=1;
            DQ = 1;                     //給脈沖信號
            if(DQ)
            dat|=0x80;
            Delay_DS18B20(4);
          }
          return(dat);
}
/*****寫一個字節(jié)*****/
void WriteOneChar(unsigned char dat)
{
        unsigned char i=0;
          for (i=8; i>0; i--)
          {
            DQ = 0;
            DQ = dat&0x01;
            Delay_DS18B20(5);
            DQ = 1;
            dat>>=1;
          }
}
/*****讀取溫度*****/
unsigned int ReadTemperature(void)
{
        unsigned char a=0;
          unsigned char b=0;
          unsigned int t=0;
          float tt=0;
          Init_DS18B20();
          WriteOneChar(0xCC);  //跳過讀序號列號的操作
          WriteOneChar(0x44);  //啟動溫度轉(zhuǎn)換
          Init_DS18B20();
          WriteOneChar(0xCC);  //跳過讀序號列號的操作
          WriteOneChar(0xBE);  //讀取溫度寄存器
          a=ReadOneChar();     //讀低8位
          b=ReadOneChar();         //讀高8位
          t=b;                                 //高8位轉(zhuǎn)移到t
          t<<=8;                             //t數(shù)據(jù)左移8位
          t=t|a;                             //將t和a按位或,得到一個16位的數(shù)
          tt=t*0.0625;                 //將t乘以0.0625得到實際溫度值
                                             //(溫度傳感器設(shè)置12位精度,最小分辨率是0.0625)
          t= tt*10+0.5;        //放大10倍(將小數(shù)點后一位顯示出來)輸出并四舍五入
          return(t);                     //返回溫度值
}
/*****延時子程序*****/
void Delay1(unsigned int num)
{
        while( --num );
}                        
/*****讀取溫度*****/
void check_wendu(void)
{
        unsigned int a,b;
        c=ReadTemperature();                  //獲取溫度值
        a=c/100;                                     //計算得到十位數(shù)字
        b=c/10-a*10;                            //計算得到個位數(shù)字
        m=c/10;                                      //計算得到整數(shù)位
        if(m<=0)                                    //如果溫度小于0,限制顯示為0
        {
                m=0;
        }
        n=c-a*100-b*10;                            //計算得到小數(shù)位
}





unsigned char flag_uart;
unsigned char ge,shi,KeyValue,j,b;
unsigned char temp,temp1;
unsigned char flag=0;



/*****初始化函數(shù)*****/
void InitUART(void)
{
   TMOD=0x20;
   SCON=0x50;
   TH1=0xFD;
   TL1=TH1;
   PCON=0x00;  
   EA=1;  
   ES=1;   
   TR1=1;
   SM0=0;
   SM1=1;
   REN=1;  
}  

/*****串口通信中斷*****/
void send(unsigned char x)
{
       SBUF=x;  
       while(TI==0);   
       TI=0;      
}

/*****顯示函數(shù)*****/
void xianshi()   
{
   ge=m%10;  
   shi=m/10;



          send(shi+48);
                  

             Delay1(200);   

          send(ge+48);
                  

              Delay1(200);            



}
void ser() interrupt 4
{RI=0;
a=SBUF;


flag=1;


}


/*****主函數(shù)*******/
void main()
{
   InitUART();
   Delay1000ms();        
   while(1)
   {if(flag==1)
   {ES=0;

   while(1)
   {  check_wendu();
      xianshi();
         

   }
   SBUF=a;
   while(!TI);
   TI=0;
   ES=1;
   flag=0;
   }
   }

         
}

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

使用道具 舉報

沙發(fā)
ID:435708 發(fā)表于 2019-3-20 16:17 | 只看該作者

剛琢磨的,一開始的85是應(yīng)該DS18B20初始化自帶的,現(xiàn)在準(zhǔn)備琢磨如何發(fā)送停止指令讓單片機停止傳輸溫度
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 98久久| 亚洲国产精品久久久久 | a级性视频 | 午夜国产精品视频 | 一区二区三区在线电影 | 精品丝袜在线 | 欧洲精品码一区二区三区免费看 | 91精品国产综合久久福利软件 | 午夜精品久久久久久不卡欧美一级 | 欧美午夜一区二区三区免费大片 | 91aiai| 日韩电影在线 | 久久久久成人精品 | 一级免费a | 激情视频一区 | 黄色国产区| 久久精品日产第一区二区三区 | www久久| 久久久国产精品视频 | 日韩中文字幕在线播放 | 91麻豆精品国产91久久久更新资源速度超快 | 精品久久久久久国产 | 久久精品中文 | 国产女人叫床高潮大片免费 | 亚洲精品欧美 | 亚洲一区二区三区四区五区午夜 | 中文字幕一区二区三区在线视频 | 精久久 | 国产成人精品一区二区三区在线观看 | 日韩精品亚洲专区在线观看 | 最新中文字幕 | 99久久婷婷国产综合精品首页 | 91高清视频在线观看 | 日韩国产一区二区三区 | 亚洲高清在线观看 | 中文字幕在线视频一区二区三区 | 夜久久 | 欧美日韩高清免费 | 天堂一区二区三区四区 | 99久久婷婷国产综合精品电影 | 欧美视频三区 |