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

專注電子技術學習與研究
當前位置:單片機教程網(wǎng) >> MCU設計實例 >> 瀏覽文章

DS18B20讀取溫度并顯示-匯編程序

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2010年01月26日   【字體:

*
程序效果:通過DS18B20讀取溫度值,顯示對應的溫度值
           程序重在理解時序,及延時時間
*/

          DS18DQ EQU P1.3   //P1.3與DS18DQ等同,便于理解
          SPEAKER EQU P2.0   //驅(qū)動蜂鳴器
          TEMPH EQU 29H       //保存讀出溫度的低8位
          TEMPL EQU 28H       //保存讀出溫度的高8位
          DS18FLAG EQU 40H  //設置標志
          ORG  0000H
          LJMP  START
          ORG  0030H
START:   MOV  30H,#00  //設置初始值
          MOV  31H,#00
          MOV  32H,#00
START1: LCALL  DS18_GF  //設置DS18B20的工作方式
          LCALL  CONVERT_TEMPERATURE //輸出轉換溫度命令
          LCALL DELAY750MS //延時750ms
          LCALL  GET_TEMPERATURE //獲?溫度數(shù)據(jù)
          LCALL  CAL_TEMPERATURE //計算溫度數(shù)值
          LCALL  DISPLAY  //調(diào)用顯示,防止掉顯
          LJMP  START1 //無限循環(huán)     
//初始化子程序
DS18_START: 
          PUSH   07H //保存R7的值,防止改變R7的數(shù)值
          SETB   DS18DQ  //將數(shù)據(jù)線拉高
          NOP    //延時1us
          CLR    DS18DQ  //將數(shù)據(jù)線拉低
          MOV    R7,#0   //延時大約512us
          DJNZ   R7,$
          SETB   DS18DQ  //將數(shù)據(jù)線拉高
          MOV    R7,#40
DS18_START1:        //延時大約160us
          JNB    DS18DQ,DS18_START2  //檢查DS18B20是否工作正常
          DJNZ   R7,DS18_START1
          SETB   DS18FLAG   //工作不正常
          CLR    SPEAKER    //驅(qū)動蜂鳴器,報警
DS18_START2:
          CLR   DS18FLAG
          MOV    R7,#100 //延時月200us
          DJNZ   R7,$
          POP    07H  //恢復R7的值
          RET
//設置DS18B20工作方式
DS18_GF:CLR  DS18FLAG //清除標志
          LCALL  DS18_START  //調(diào)用初始化子程序
          MOV  A,#0CCH  //跳躍ROM指令
             LCALL  DS18_SEND   //
          MOV    A,#4EH     //向RAM寫數(shù)據(jù)             
          LCALL  DS18_SEND
          MOV    A,#75 
          LCALL  DS18_SEND
          MOV  A,#0
          LCALL  DS18_SEND
          MOV  A,#7FH  //設置工作方式
          LCALL  DS18_SEND
          CLR    DS18DQ  //釋放總線
          LCALL  DELAY500US   //延時500us                                     
LOOP:     LCALL  CONVERT_TEMPERATURE //調(diào)用轉子程序
             MOV    R5,#80
LOOP1:   LCALL  DISPLAY //調(diào)用顯示防止掉顯,同時等待轉換完成
                DJNZ   R5,LOOP1
          LCALL  GET_TEMPERATURE  //獲?轉換值
          LCALL  CAL_TEMPERATURE //計算溫度值
          LJMP   LOOP
          RET
//輸出轉換溫度命令
CONVERT_TEMPERATURE:
          LCALL  DS18_START //調(diào)用初始化子程序
             MOV    A,#0CCH    //跳躍ROM指令         
             LCALL DS18_SEND
          MOV    A,#44H    //溫度轉換        
          LCALL  DS18_SEND
         RET
//讀?溫度數(shù)據(jù)
GET_TEMPERATURE:
             LCALL  DS18_START //調(diào)用初始化子程序
          MOV    A,#0CCH  //跳躍ROM指令                
          LCALL  DS18_SEND
          MOV    A,#0BEH   //從RAM中的數(shù)據(jù)          
          LCALL  DS18_SEND
          LCALL  DELAY60US
           LCALL  DS18_READ
           MOV    TEMPL,A   //將獲得數(shù)據(jù)的低八位存到TEMPL
           LCALL  DS18_READ
           MOV    TEMPH,A  //將獲得數(shù)據(jù)的高八位存到TEMPH
           CLR    DS18DQ   //即復位。否則會一直讀到
          LCALL DELAY501US //暫存第九字節(jié)             
          RET
//計算獲得溫度值,便于現(xiàn)實
CAL_TEMPERATURE:
          PUSH   07H    //暫存,防止改變R7的數(shù)據(jù)
          CLR    C    //進位標志清零
          MOV    R7,#04H  //循環(huán)次數(shù)

EX2:     MOV    A,TEMPH // 這些語句的作用是:
          RRC    A  // 整數(shù)位在:TEMPL中
          MOV    TEMPH,A //?數(shù)位在:TEMPH中的高半
          MOV    A,TEMPL
          RRC    A
          MOV    TEMPL,A
          DJNZ   R7,EX2 //

          MOV    A,TEMPH  //
          RLC    A   //這些語句的作用是:
          RLC    A   //把TEMPH得高半移到低四位中
          RLC    A
          RLC    A  //
          ANL    A,#0FH //屏蔽高四位,保留低四位
          MOV    DPTR,#TAB_TEMP //賦帶?數(shù)點的數(shù)值表的表首地址
          MOVC   A,@A+DPTR
          MOV    30H,A  //暫存該值,用于顯示
          MOV    A,TEMPL
          CLR    C
          MOV    B,#0AH
          DIV    AB  //分離整數(shù)位的高低四位
          MOV    32H,A  //暫存十位
          MOV    A,B
          ADD    A,#10H
          MOV    31H,A  //暫存?zhèn)位
          POP    07H    //恢復R7的值
          RET
//寫數(shù)據(jù)子程序
DS18_SEND:  
          PUSH   06H  //保護Rn的值
          PUSH   07H
          //以下語句是"寫 筆斃虻腦?
          SETB   DS18DQ  //寫時序是有DS18DQ的下降沿決定
             NOP     //延時1us
          MOV    R6,#08H  //循環(huán)次數(shù),一個字節(jié)
DS18_SEND1:
             CLR     DS18DQ  //拉低,產(chǎn)生下降沿
           MOV     R7,#07  //延時大約15us
             DJNZ    R7,$
           RRC     A  //把要寫入得數(shù)據(jù)的高位移到C中
             MOV     DS18DQ,C   //再把C的值賦給DS18DQ
             MOV     R7,#30    //延時時間約為60us,只要大約45us即可
            DJNZ    R7,$
           SETB    DS18DQ   //拉高準備,下次產(chǎn)生下降沿
             DJNZ    R6,DS18_SEND1 //判斷循環(huán)次數(shù)夠了沒
          POP     07H   //恢復Rn的數(shù)據(jù)
          POP     06H
          RET
篇幅太大完整程序請從這里下載:http://www.zg4o1577.cn/ziliao/file/ds182051hei.asm

本程序已經(jīng)測試成功。

關閉窗口

相關文章

主站蜘蛛池模板: 日日骚网 | 久久久五月天 | 午夜影院在线观看免费 | www.国产视频 | 日本综合在线观看 | 一区二区三区免费 | 日本精品国产 | 一区二区三区四区国产 | 久久区二区| 精久久| 国产激情三区 | 91人人澡人人爽 | 国产精品久久久久久久久婷婷 | 久久久久久久久久影视 | 亚洲欧美国产一区二区三区 | 国产又色又爽又黄又免费 | 超碰欧美 | 亚洲欧美日韩电影 | 成人在线视频一区二区三区 | 99爱在线免费观看 | 午夜网| 中文字幕一区二区三区精彩视频 | 国产精品国产三级国产播12软件 | 日日夜夜影院 | 午夜视频在线免费观看 | 久久成人一区 | 伊人伊成久久人综合网站 | 国产一区精品在线 | 一区二区三区四区不卡视频 | 美日韩免费视频 | 日韩色图视频 | 成人av免费 | 精品啪啪 | 精品国产一区二区国模嫣然 | 91精品国产91综合久久蜜臀 | 天天久久 | 人人人人爽 | 日本aaaa | 国内精品久久久久久影视8 最新黄色在线观看 | 中文字幕日韩欧美 | 国产欧美精品区一区二区三区 |