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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3817|回復: 0
打印 上一主題 下一主題
收起左側

430驅動DS18b20驅動不了

[復制鏈接]
跳轉到指定樓層
樓主
ID:64384 發表于 2014-7-25 17:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
板子就接了個32K的晶振,設置DS18B20DE 的信號口選擇在P1.6調試了三個程序,debug都讀不到數據,附上程序,下面一個是被我屏蔽的程序。望大神指教。
#include<msp430x14x.h>
#define  delay_10uS()  ( _NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP())
#define  delay_6uS()   ( _NOP(),_NOP(),_NOP(),_NOP(),_NOP())
#define  delay_9uS()   ( _NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP())
#define  delay_15uS()   ( _NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP(),_NOP())
#define     uchar   unsigned char
#define     uint    unsigned    int
#define DQ_OUT P1DIR|=BIT6
#define DQ_IN P1DIR&=~BIT6
#define DQ_LOW P1OUT&=~BIT6
#define DQ_HIGH P1OUT|=BIT6
#define DQ_DATA P1IN&BIT6
uint j=0;
uint l=0;
uchar MSB; //溫度高字節
uchar LSB; //溫度低字節
int t1=0; //溫度整數部分數值
uint t2=0; //溫度小數部分數值
uchar flag; //負溫度標志
void Delayus(uint us)
{
    while(us--)
    {
        _NOP();_NOP();_NOP();_NOP();
        _NOP();_NOP();_NOP();_NOP();
        
    }
}
//初始化DS18B20
void DS18B20Init(void)
{
    DQ_OUT;//設置為輸出方向
    DQ_LOW;//拉低總線
    Delayus(50);
    DQ_HIGH;//釋放總線
    Delayus(3);
    DQ_IN;//設置為輸入方向
    while(DQ_DATA);//等待應答信號
    while(~DQ_DATA);//等待釋放總線
    delay_10uS();
    delay_15uS();
}
//讀一個字節
uchar ReadByte(void)
{
    uchar i;
    uchar ReadData=0;
    for(i=0;i<8;i++)
    {
        ReadData>>=1;
        DQ_LOW;
        delay_6uS();
        DQ_HIGH;
        delay_9uS();
        DQ_IN;
        _NOP();
        if(DQ_DATA) ReadData|=0x80;
        delay_10uS();
        delay_10uS();
        delay_10uS();
        delay_10uS();
        DQ_OUT;
        DQ_HIGH;
        delay_10uS();
    }
    return ReadData;
}
//寫一個字節
void WriteByte(uchar WriteData)
{
    uchar i;
    uchar tmpData;
    for(i=0;i<8;i++)
    {
        DQ_OUT;
        DQ_LOW;
        tmpData=WriteData&0x80;
        delay_6uS();
            if(tmpData)
            {
                 DQ_HIGH;
            }
        else
        {
             DQ_LOW;
        }
        delay_10uS();
        delay_10uS();
        delay_10uS();
        delay_10uS();
        delay_10uS();
      DQ_HIGH;
        WriteData<<=1;
        }
    delay_10uS();
}
//溫度計算程序
void GetT()
{
    if((MSB&0xF0)>0)
    { //判斷是否為負溫度
        flag=1;
    }
    else
    {
         flag=0;
    }
    if(flag)
    { //如果為負溫度取反加1
        MSB=~MSB;
        LSB=~LSB+1;
    }
    t1=MSB<<4; //得到溫度整數部分
    t1|=(LSB>>4);
    t2=(uint)((LSB&0x0F)*0.0625*10000); //得到溫度小數部分并擴大10000 倍
}
void main()
{
    WDTCTL=WDTPW+WDTHOLD;//關閉看門狗
        
    while(1)
    {
        DS18B20Init();
        WriteByte(0xCC); //跳過ROM 配置
        WriteByte(0x44);//啟動溫度轉換
        
        Delayus(1000);
        
        DS18B20Init();
        WriteByte(0xCC); //跳過ROM 配置
        WriteByte(0xBE); //跳過ROM 配置
        LSB=ReadByte(); //讀溫度數據低字節
        MSB=ReadByte(); //讀溫度數據高字節
        GetT(); //計算溫度
   
    }
}











/*
uchar init_18b20(void)
{
    uchar Error;
    DQ_out;
    _DINT();
    DQ0;
    DelayNus(50);
    DQ1;
    DelayNus(6);
    DQ_in;
    _NOP();
    if(DQ_val)      
    {
        Error = 1;          //初始化失敗
    }
    else
    {
        Error = 0;          //初始化成功
    }
    DQ_out;
    DQ1;
    DelayNus(40);  
    return Error;
}
void Write_18B20(uchar wdata)
{
    uchar i;
    for(i = 0; i < 8;i++)
    {
        DQ0;
        delay_6uS();            //延時6us
        if(wdata & 0X01)    DQ1;
        else                DQ0;
        wdata >>= 1;
        DelayNus(5);           //延時50us
        DQ1;
        delay_10uS();           //延時10us
    }
  
}
uchar Read_18B20(void)
{
    uchar i;
    uchar temp = 0;
    for(i = 0;i < 8;i++)
    {
        temp >>= 1;
        DQ0;
         delay_6uS();            //延時6us
        DQ1;
         delay_9uS();            //延時9us
        DQ_in;
        _NOP();
        if(DQ_val)   temp |= 0x80;
        DelayNus(5);           //延時45us
        DQ_out;
        DQ1;
         delay_10uS(); ;           //延時10us
    }
    return  temp;
}
void Convert(void)
{
    Write_18B20(0x44);
}
void Read_SP(void)
{
    Write_18B20(0xbe);
}
void Skip(void)
{
    Write_18B20(0xcc);
}
uint ReadTemp(void)
{
    uchar temp_low;
    uint  temp;
   
    temp_low = Read_18B20();      //讀低位
    temp = Read_18B20();     //讀高位
    temp = (temp<<8) | temp_low;
   
    return  temp;
}
uint Do1Convert(void)
{
    uchar i;
   
    do
    {
        i = init_18b20();
    }
    while(i);
    Skip();
    Convert();
    for(i = 20;i > 0;i--)  
        DelayNus(60000); //延時800ms以上
    do
    {
        i = init_18b20();
    }
    while(i);
    Skip();
    Read_SP();
    return ReadTemp();
}
void main(void)
{
    WDTCTL=WDTPW+WDTHOLD;
    P1DIR=0x00;
    P1SEL=0x00;
   
    while(1)
    {
       Do1Convert();  
    }
}
*/

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一区在线 | 国产精品视频久久久 | 亚洲成a| 伊人免费在线观看 | 鲁视频| 丁香综合| 国产视频在线一区二区 | 久久久久久久国产 | 中文字幕免费 | 成人一区二区三区在线观看 | 99riav3国产精品视频 | 欧美精品一区久久 | 91网视频 | 狠狠综合久久av一区二区老牛 | 99精品视频在线观看免费播放 | 日韩国产在线 | 国产亚洲精品一区二区三区 | 国产亚洲精品久久久久久牛牛 | 一区中文字幕 | 一级aaaa毛片| 日韩一区二区三区四区五区 | 欧美精品一区二区三区蜜桃视频 | 亚洲av毛片| 视频三区 | 黄色毛片在线播放 | 天堂视频一区 | 国产在线播 | 四虎影院在线观看av | 国产精品一区二区三 | 国产在线精品一区 | 日韩欧美专区 | 91精品国产乱码久久久久久久久 | 天天操天天干天天曰 | av电影手机版 | 激情影院久久 | 欧美大片黄 | 91电影在线播放 | 欧美一级免费看 | 伊人免费网 | 精品久久久久久久久久久 | 婷婷色综合 |