欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 我有一個4路18b20的程序,但是始終只有P口第一個口例如P2.0有溫度顯示,求大神幫忙 [打印本頁]

作者: erwin095    時間: 2019-3-25 09:38
標題: 我有一個4路18b20的程序,但是始終只有P口第一個口例如P2.0有溫度顯示,求大神幫忙
/********************************************************
* 文件名  :main.c
* 描述    :stc15系列采集ds18b20溫度數(shù)據(jù),并從串口輸出,采用的是11.0592M晶振,用P2口      
* 實驗平臺:IAP15w4k58S4
* 庫版本  :
* 連接方式: 見連接圖
* 注意    : 芯片上電后所有與PWM相關(guān)的IO口均為高阻態(tài)
             需將這些口設(shè)置為準雙向口或強推挽模式方可正常使用
             相關(guān)IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
             P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
             另外還有P1.0/P1.4兩個口在上電時為強推挽輸出,程序
             初始化時也需將這兩個口設(shè)置為弱上拉準雙向口模式
* 作者    :12345678
**********************************************************************************/

#include "config.h"
#include "delay.h"
#include "uart.h"
#include "18B20.h"
/************* 功能說明 **************
******************************************/
/************* 本地常量聲明 **************/

/************* 本地變量聲明 **************/
u16 a=0;//測試用
/************* 本地函數(shù)聲明 **************/

/*************  外部函數(shù)和變量聲明 *****************/

/******************** IO配置函數(shù) **************************/
void GPIO_config(void)
{
P5M0 = 0;   //設(shè)置準雙向口
P5M1 = 0;
P2M0 = 0;  //P2口全部設(shè)置為準雙向
P2M1 = 0;
}
/******************** 主函數(shù) **************************/
void main(void)
{
u8 i = 0;
GPIO_config();
UartInit();

while(1)
{
  SendString("4路18B20溫度 串口1測試!\r\n");
   for(i=0;i<4;i++)
  {
//  if(Ds18b20Init(i)){
     
                 a=Ds18b20ReadTemp(i);
  SendString("第 ");
  SendData(i+'1');
  SendString(" 路溫度 : ");
  if(a/10000 == 1)
  {                             //如果萬位為1,則表示溫度為負
                  SendData('-');    //輸出負號
  }                                
                 SendData(a%10000/1000+'0');               //十位
                 SendData(a%1000/100+'0');                 //個位
                 SendData('.');           //小數(shù)點
                 SendData(a%100/10+'0');                   //小數(shù)點后第一位
                 SendData(a%10+'0');                       //小數(shù)點后第二位
                 SendString("℃\r\n");
//  }else{         //想要不顯示直接去除else這部分
//  SendString("第 ");
//  SendData(i+'1');
//  SendString("路溫度  初始化失敗請檢測\r\n");
//    }
    }
  P55 = 0;
  delay_ms(250);
  delay_ms(250);
  delay_ms(250);
  delay_ms(250);
//  P55 = 1;
//  delay_ms(100);
//  P55 = 0;
//  delay_ms(100);
  P55 = 1;
  delay_ms(250);
  delay_ms(250);
  delay_ms(250);
  delay_ms(250);
  }
}
/**************************18B20*******************************/
#include "18B20.h"
#include<intrins.h>
#include "delay.h"
#define DS P2
#define set1(x) (0x01<<(x))
bit Ds18b20Init(u8 m)
{
    bit flag=1;
DS = 0;      
Delay600us();        
DS|=set1(m);      
Delay100us();        
flag=DS;
Delay600us();      
DS|=set1(m);
return (~flag);
}
void Ds18b20WriteByte(u8 dat,m)
{
u8 j;
    bit testb ;
for(j=0; j<8; j++)
{
  testb = dat&0x01;//取最低位   
  dat=dat>>1;   
  if(testb)     //置高 1   
  {   
   DS =0;        
   Delay1us();
   Delay1us();
   DS|=set1(m);
   Delay100us();   //>60us
  }
  else
  {
  DS =0;
  Delay100us(); //大于 60us 小于 120us
  DS|=set1(m);
  Delay1us();
  Delay1us();
  }
   }
}
u8 Ds18b20ReadByte(u8 m)
{
u8 byte, bi;
    u8 j;
for(j=8; j>0; j--)
{
  DS =0X00;
  Delay1us();
  DS|=set1(m);
  Delay6us();
  bi = DS;  
  byte = (byte >> 1) | (bi << 7);        
  Delay48us();   
}   
return byte;
}
void  Ds18b20ChangTemp(u8 m)
{
Ds18b20Init(m);
Delay1ms();
Ds18b20WriteByte(0xcc,m);     
Ds18b20WriteByte(0x44,m);     
Delay1ms();                     
   
}
void  Ds18b20ReadTempCom(u8 m)
{
Ds18b20Init(m);
Delay1ms();
Ds18b20WriteByte(0xcc,m);  
Ds18b20WriteByte(0xbe,m);  
}
int Ds18b20ReadTemp(u8 m)
{
int temp = 0;
u8 tmh, tml;
Ds18b20ChangTemp(m);   
Ds18b20ReadTempCom(m);   
tml = Ds18b20ReadByte(m);
tmh = Ds18b20ReadByte(m);  
if(tmh>0x7f)
    {
        tml=~tml;                    //補碼轉(zhuǎn)換,取反加一
        tmh=~tmh+1;  
        temp=100;
    }
    temp=temp+tmh*16+tml/16;
    temp=temp*100;
    temp=temp+((tml&0x0f)*10/16)*10;
    temp=temp+(tml&0x0f)*100/16%10;
    return (u16)(temp);
}




作者: 7358655    時間: 2019-3-26 22:16
串4個要注意尋址,指器件地址,讀也要器件地址。看看壇子里的。
單片機多路DS18B20測溫報警proteus仿真及程序  

435
主題       
458
帖子       
1萬
黑幣
管理員
Rank: 9Rank: 9Rank: 9
收聽TA 發(fā)消息       
電梯直達
跳轉(zhuǎn)到指定樓層 樓主
51黑ff 發(fā)表于 2016-9-25 13:53 | 只看該作者 |只看大圖 回帖獎勵
單片機多路DS18B20測溫報警proteus仿真及程序
http://www.raoushi.com/bbs/dpj-56017-1.html
(出處: 單片機論壇)


作者: erwin095    時間: 2019-3-29 12:41
7358655 發(fā)表于 2019-3-26 22:16
串4個要注意尋址,指器件地址,讀也要器件地址。看看壇子里的。
單片機多路DS18B20測溫報警proteus仿真及 ...

實在太感謝了




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1