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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

關于DS18B20仿真問題求助。

查看數: 3230 | 評論數: 8 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2017-9-11 12:03

正文摘要:

本帖最后由 素還真 于 2017-9-11 12:06 編輯 #include<reg51.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit DS=P1^6; uint temp; unsigned char code ta ...

回復

ID:194451 發表于 2017-9-12 16:42
DS18B20采集溫度的時候不能有中斷程序
ID:232612 發表于 2017-9-12 12:34
你好,這個應該是程序出了問題,看數碼管的代碼有沒問題
ID:111634 發表于 2017-9-11 21:32
本帖最后由 zl2168 于 2017-9-11 21:33 編輯

給你介紹一個18b20的案例,自己對照查錯吧!
Proteus仿真一下,確認有效。
實例97 DS18B20測溫.rar (51.78 KB, 下載次數: 8)

以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1內有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。
ID:209584 發表于 2017-9-11 19:29
另外代碼要寫在return前,不過這個仿真其實沒有用到中斷,所以沒什么影響。謝謝大家的幫助。
ID:209584 發表于 2017-9-11 19:27
        我下午仔細研究了一下,主要是兩個問題。
void DSrun(void)
{
        bit ask;
        EA=0;
        drst();
        delay(1);
        if(ask==0)
        {
                write(0xcc);
                write(0x44);
        }
        EA=1;
}
進行溫度轉換之后還要讀取RAM中存儲的數據。就是在write(0x04)后再進行一次初始化,然后用0xbe指令讀取數據。

P0=table[A1];
         P2=0x01;
         delayms(1);
         
         P0=table[A2];
         P2=0x02;
         delayms(1);
這個數碼管顯示程序中P2口位選使能寫錯了,因為不熟練犯得低級錯誤。
ID:89515 發表于 2017-9-11 15:06
如果還是不行,你可以先把數碼管程序搞定,再調試18b20.仿真和硬件在時間上還是有很大差別的
ID:89515 發表于 2017-9-11 15:02
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DS=P1^6;
uint temp;

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
unsigned char code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

void delay(uint count)     
{
   uint i;
   while(count)
   {
     i=200;
     while(i>0)
             i--;
     count--;
   }
}

void delayms(uchar x)
{
         uint i,j;
         for(i=x;i>0;i--)
                 for(j=120;j>0;j--);
}

void delay10us(uchar t)
{
         do
         {
                 _nop_();_nop_();_nop_();_nop_();
                 _nop_();_nop_();_nop_();_nop_();
         }
         while(--t);
}

void Init_Com(void)
{
      TMOD = 0x20;
      PCON = 0x00;
      SCON = 0x50;
      TH1 = 0xFd;
      TL1 = 0xFd;
      TR1 = 1;
}

bit drst(void)
{
         bit ask;
         EA=0;
         DS=0;
         delay10us(65);
         DS=1;
         delay10us(6);
         ask=DS;
         while(!DS);
         return ask;
         EA=1;
}

bit readbit(void)
{
         bit dat;
         EA=0;
         DS=0;_nop_();        
         DS=1;_nop_();_nop_();
         dat=DS;
         delay10us(6);
         return (dat);
         EA=1;
}
uchar read(void)
{
         uchar i,j,dat;
         dat=0;
         EA=0;
         for(i=1;i<=8;i++)
         {
                 j=readbit();
                 dat=(j<<7)|(dat>>1);   //讀出的數據最低位在最前面,這樣剛好一個字節在DAT里
        }
         return(dat);
         EA=1;
}

void write(uchar dat)
{  
   uchar j;
   bit testb;
   EA=0;
   for(j=1;j<=8;j++)
   {
         testb=dat&0x01;
         dat=dat>>1;
         if(testb)   
         {
                 DS=0;
                 _nop_();_nop_();
                 DS=1;
                 delay10us(6);
         }
         else
         {
                 DS=0;       //write 0
                 delay10us(6);
                 DS=1;
                 _nop_();_nop_();
         }

   }EA=1;
}

void DSrun(void)
{
         bit ask;
         EA=0;
         drst();
         delay(1);
         if(ask==0)
         {
                 write(0xcc);
                 write(0x44);
         }
         EA=1;
}

uint tmp()
{
         float tt;
         uchar a,b;
         EA=0;
         DSrun();
         a=read();
         b=read();
         temp=b;
         temp<<=8;
         temp=temp|a;
         tt=temp*0.0625;
         temp=tt*10+0.5;
         return temp;
        EA=1;
}

void display(uint temp)
{
         uchar A1,A2,A3,A4,A2s,A3s,ser;
         ser=temp/10;
         ser=SBUF;
         A1=temp/1000;            //這里是為了顯示正負,目前沒有實現。
        A2s=temp%1000;
         A2=A2s/100;
         A3s=A2s%100;
         A3=A3s/10;
         A4=A3s%10;
         
         P0=table[A1];
         P2=0x01;
         delayms(1);
         
         P0=table[A2];
         P2=0x02;
         delayms(1);
         
         P0=table1[A3];
         P2=0x04;
         delayms(1);
         
         P0=table[A4];
         P2=0x08;
         delayms(1);
         
}

void main()
{
          Init_Com();
   while(1)
   {   
                   display(tmp());
   }            
}

評分

參與人數 1黑幣 +10 收起 理由
素還真 + 10 回帖助人的獎勵!

查看全部評分

ID:82765 發表于 2017-9-11 14:17
提示: 作者被禁止或刪除 內容自動屏蔽

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人一区二区三区 | 日韩三级在线观看 | 粉嫩粉嫩芽的虎白女18在线视频 | 久久精品a | 日韩亚洲视频 | 久久久久国产一区二区三区四区 | 国产国产精品 | 精品国产伦一区二区三区观看体验 | 日韩精品一区二区三区中文字幕 | 国产欧美日韩综合精品一区二区 | 国产亚洲一区二区三区在线 | 91视频.com | 一区二区国产精品 | 午夜精品久久久 | 国产精品久久久久久一区二区三区 | 成人免费在线 | 亚洲欧美激情精品一区二区 | 99re热精品视频 | 在线一区二区三区 | 婷婷成人在线 | 日本精品久久久久久久 | 久久精品综合 | 男人av的天堂 | 国产精品久久久久久久久久久久冷 | 久艹av| 亚洲精品久久久久久久久久久久久 | 中文字幕一区二区三区四区 | www.婷婷| 国产精品免费一区二区三区四区 | 一区欧美 | 日韩欧美一区二区在线播放 | 日韩久久久久久 | 一呦二呦三呦国产精品 | 在线观看免费av网 | 一区二区三区免费网站 | 在线观看国产视频 | 免费观看一级特黄欧美大片 | 精品亚洲一区二区三区 | 国产在线视频三区 | 亚洲视频中文字幕 | 精品一区二区三区在线观看国产 |