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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:435708 發(fā)表于 2019-3-19 22:13 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
如上所述:
在串口助手輸入任意指令后單片機(jī)接受到指令,向電腦一直發(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;                                            
                     









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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 麻豆精品久久久 | www视频在线观看 | 成人激情视频免费观看 | 欧美一级大片 | 精品视频一区二区三区四区 | 黄色福利 | 中文字幕 在线观看 | 亚洲欧美在线视频 | 亚洲天堂一区二区 | 亚洲视频在线看 | 国产一级视频在线 | 色天堂影院 | 成人高清在线视频 | 日韩一级 | 久久久久黄| 国产精品欧美一区喷水 | 国产一级网站 | 欧美一区二区三区在线观看 | avhd101在线成人播放 | 天天操天天射天天 | 亚欧精品一区 | 亚洲视频在线观看一区二区三区 | 一级全黄少妇性色生活免费看 | 国产精品一区在线观看你懂的 | 一级a性色生活片久久毛片 一级特黄a大片 | 国产日韩欧美 | 91欧美精品成人综合在线观看 | 亚洲欧美视频在线观看 | 99热视 | 国产 欧美 日韩 一区 | 亚洲精品视频免费观看 | 精品一二三区在线观看 | 国产精品久久久久久久久免费高清 | 久久久.com | 玖玖国产 | 在线视频 亚洲 | 亚洲福利 | 青青草av网站| 黄色一级片视频 | 黄色网址免费看 | 日本久久久一区二区三区 |