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

標(biāo)題: STC12C5A60S2單片機(jī)驅(qū)動(dòng)18b20顯示整數(shù),12m晶振 串口全是00 [打印本頁(yè)]

作者: maizhi99    時(shí)間: 2021-8-13 14:26
標(biāo)題: STC12C5A60S2單片機(jī)驅(qū)動(dòng)18b20顯示整數(shù),12m晶振 串口全是00
STC12C5A60S2驅(qū)動(dòng)18b20顯示整數(shù)   12m晶振    串口全是00
請(qǐng)各位大佬指教
單片機(jī)源程序如下:
  1. #include "STC12C5A60S2.h"      //調(diào)用51單片機(jī)的頭文件
  2. #include <Intrins.h>

  3. sbit ds18b20=P3^2;


  4. //---------------------------------------         
  5. unsigned char temp1;
  6. unsigned int temp2;
  7. unsigned char xiaoshu1;//小數(shù)第一位
  8. unsigned char xiaoshu2;//小數(shù)第二位
  9. unsigned char xiaoshu;//兩位小數(shù)
  10. //---------------------------------------





  11. void Timer0Init(void)                //1微秒@12MHz
  12. {
  13.         AUXR |= 0x80;                //定時(shí)器時(shí)鐘1T模式
  14.         TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
  15.         TMOD |= 0x01;                //設(shè)置定時(shí)器模式
  16.         TL0 = 0xF4;                //設(shè)置定時(shí)初始值
  17.         TH0 = 0xFF;                //設(shè)置定時(shí)初始值
  18.         TF0 = 0;                //清除TF0標(biāo)志
  19.         TR0 = 1;                //定時(shí)器0開(kāi)始計(jì)時(shí)
  20. }



  21. /* 微秒延時(shí)函數(shù) 參數(shù)給幾 就延時(shí)幾微秒 */
  22. void delay_us(unsigned int us)
  23. {
  24.         while(us--)
  25.         {
  26.           Timer0Init();
  27.         }
  28. }


  29. //---------------------------------------
  30. //名稱:復(fù)位DS18B20函數(shù)

  31. bit Reset(void)
  32. {
  33.         
  34.    bit k;
  35.    ds18b20=1;
  36.    ds18b20=0;                             //拉低DQ總線開(kāi)始復(fù)位        
  37.    delay_us(870);                            //保持DQ低大約870uS,符合不低于48US的要求            
  38.    ds18b20=1;                             //拉高準(zhǔn)備接收數(shù)據(jù)   
  39.    delay_us(80);                        //大約80uS后
  40.    k=ds18b20;                               //讀出數(shù)據(jù)并保存   
  41.    delay_us(400);                     //維持約400US,符合總讀時(shí)隙不低于480US的要求
  42.    return k;               //k=0為復(fù)位成功,k=1為復(fù)位失敗
  43. }

  44. //---------------------------------------
  45. //名稱:讀一字節(jié)函數(shù)

  46. unsigned char ReadByte(void)
  47. {
  48.         
  49.    unsigned char j,buf=0;
  50.    for(j=0;j<8;j++)                        //接收8次還原一個(gè)字節(jié)數(shù)據(jù)
  51.    {
  52.         buf=buf>>1;                          //接收前,想將接收緩沖區(qū)右移
  53.         ds18b20=0;                                 //拉低      
  54.         delay_us(2);
  55.         ds18b20=1;                                  //拉高,為讀數(shù)據(jù)做準(zhǔn)備
  56.         delay_us(6);
  57.         if(ds18b20==1) buf|=0x80;  //讀出1位數(shù)據(jù)保存于buf中
  58.                                                          //維持約52US,符合總讀時(shí)隙不低于60US的要求
  59.         delay_us(52);
  60.         }
  61.    return buf;             //退出的同時(shí)將接收緩沖區(qū)參數(shù)返回
  62. }

  63. //---------------------------------------
  64. //名稱:寫(xiě)一字節(jié)函數(shù)

  65. void WriteByte(unsigned char dat)
  66. {
  67.         
  68.    unsigned char j;
  69.    for(j=0;j<8;j++)
  70.    {            
  71.          if(dat&0x01)                        //如果寫(xiě)1
  72.       {      
  73.          ds18b20=0;                         //拉低      
  74.         delay_us(2);
  75.         ds18b20=1;                          //拉高        
  76.         delay_us(63);
  77.                 }
  78.       else                                                //如果寫(xiě)0
  79.       {            
  80.         ds18b20=0;                         //拉低                 
  81.         delay_us(63);      
  82.         ds18b20=1;                         //拉高               
  83.         delay_us(2);
  84.       }
  85.        dat=dat>>1;                                //寫(xiě)入字節(jié)右移1位
  86.         }
  87. }

  88. //---------------------------------------
  89. //名稱:DS18B20溫度轉(zhuǎn)換函數(shù)

  90. bit Convert()
  91. {   
  92.         if(Reset()==0)          //復(fù)位DS18B20
  93.         {               
  94.       WriteByte(0xcc);                //寫(xiě)入跳過(guò)序列號(hào)命令字 Skip Rom
  95.       WriteByte(0x44);                //寫(xiě)入溫度轉(zhuǎn)換命令字 Convert T  
  96.                   return 1;            //啟動(dòng)溫度轉(zhuǎn)換成功
  97.         }
  98.         else
  99.         {         
  100.                   return 0;            //啟動(dòng)溫度轉(zhuǎn)換失敗
  101.         }
  102. }

  103. //---------------------------------------
  104. //名稱:轉(zhuǎn)換結(jié)束處理函數(shù)

  105. void ReadFlash(void)
  106. {   
  107.         unsigned char Lsb,Msb;        
  108.    if(Reset()==0)          //復(fù)位DS18B20
  109.         {
  110.       WriteByte(0xcc);                //寫(xiě)入跳過(guò)序列號(hào)命令字 Skip Rom
  111.       WriteByte(0xbe);                //寫(xiě)入讀取數(shù)據(jù)令字 Read Scratchpad
  112.       Lsb=ReadByte();                //讀出第一個(gè)字節(jié)暫存于LSB
  113.       Msb=ReadByte();                //讀出第二個(gè)字節(jié)暫存于MSB        
  114.       temp1=Lsb&0x0f;                //temp1內(nèi)裝溫度參數(shù)的小數(shù)部分
  115.       temp2=(Lsb>>4)|(Msb<<4);//temp2內(nèi)裝溫度參數(shù)的整數(shù)部分
  116.       xiaoshu1 = (temp1&0x0f)*10/16; //小數(shù)第一位
  117.       xiaoshu2 = (temp1&0x0f)*100/16%10;//小數(shù)第二位
  118.       xiaoshu=xiaoshu1*10+xiaoshu2; //小數(shù)兩位
  119.       temp2=((temp2/100)<<8)+(temp2/10%10)*16+(temp2%10);
  120.       
  121.         }        
  122.         else
  123.         {
  124.           temp1=0;                                        //如果復(fù)位失敗,溫度參數(shù)清零
  125.           temp2=0;                                        //如果復(fù)位失敗,溫度參數(shù)清零        
  126.         }
  127. }





  128. void main(void)            //主函數(shù),單片機(jī)開(kāi)機(jī)后就是從這個(gè)函數(shù)開(kāi)始運(yùn)行
  129. {
  130.         
  131.         
  132.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  133.         AUXR |= 0x40;                //定時(shí)器時(shí)鐘1T模式
  134.         AUXR &= 0xFE;                //串口1選擇定時(shí)器1為波特率發(fā)生器
  135.         TMOD &= 0x0F;                //設(shè)置定時(shí)器模式
  136.         TL1 = 0xC7;                //設(shè)置定時(shí)初始值
  137.         TH1 = 0xFE;                //設(shè)置定時(shí)初始值
  138.         ET1 = 0;                //禁止定時(shí)器%d中斷
  139.         TR1 = 1;                //定時(shí)器1開(kāi)始計(jì)時(shí)  
  140.    
  141.      while(1)               //死循環(huán),單片機(jī)初始化后,將一直運(yùn)行這個(gè)死循環(huán)
  142.    {
  143.                
  144.       if(Convert()==1)                                                 //啟動(dòng)轉(zhuǎn)換
  145.         {               
  146.             ReadFlash();                       //讀取溫度                           
  147.                
  148.         }
  149.            SBUF=temp2;
  150.         while(TI == 0);        //檢查發(fā)送中斷標(biāo)志位
  151.                 TI = 0;                //令發(fā)送中斷標(biāo)志位為0(軟件清零)
  152.    }
  153. }
復(fù)制代碼




作者: xuyaqi    時(shí)間: 2021-8-13 15:20
查18b20與串口硬件接線是否正確。
作者: lamcare    時(shí)間: 2024-3-17 10:46
你好,請(qǐng)問(wèn)解決了嗎





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美精品一区三区 | 国产一区二区成人 | 成在线人视频免费视频 | 成人在线观看网站 | 成人精品国产免费网站 | 成年人在线视频 | 夜夜爆操 | 国产香蕉视频在线播放 | 久久精品av | 午夜在线小视频 | 日韩一区中文字幕 | 免费特级黄毛片 | 久久久久无码国产精品一区 | 天天躁日日躁狠狠躁白人 | 成在线人视频免费视频 | 日韩一区二区三区视频 | 久久99深爱久久99精品 | 国产毛片毛片 | 免费午夜视频在线观看 | 人人爽人人爽 | 亚洲精品视频在线观看视频 | 久久99这里只有精品 | 国产精品久久久久久吹潮 | 欧美成人一区二区三区片免费 | 欧美一级在线免费观看 | 伦理二区 | 亚洲三级在线观看 | 国产精品网页 | 99国产精品视频免费观看一公开 | 激情欧美一区二区三区中文字幕 | 天天综合网91 | 免费国产一区 | 精品国产一区二区三区四区在线 | 成人二区| 日本中出视频 | 午夜国产一级 | 欧美日韩精品区 | 欧美日韩国产一区二区三区 | 午夜影院在线观看视频 | 免费在线视频a | av中文字幕在线播放 |