機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
利用AT89C2051單片機(jī)與DS18B20和兩個(gè)數(shù)碼管顯示溫度
利用AT89C2051單片機(jī)與DS18B20和兩個(gè)數(shù)碼管顯示溫度
 更新時(shí)間:2009-12-15 14:02:44  點(diǎn)擊數(shù):0
【字體: 字體顏色

;這是關(guān)于DS18B20的讀寫程序,數(shù)據(jù)腳P3.4,晶振12MHZ
;溫度傳感器18B20匯編程序,采用器件默認(rèn)的12位轉(zhuǎn)化,最大轉(zhuǎn)化時(shí)間750微秒
;可以將檢測到的溫度直接顯示到連接到AT89C2051的兩個(gè)數(shù)碼管上
;顯示溫度00到99度,很準(zhǔn)確哦~~無需校正!

  ORG  0000H

;單片機(jī)內(nèi)存分配申明!
TEMPER_L  EQU  29H  ;用于保存讀出溫度的低8位
TEMPER_H  EQU  28H  ;用于保存讀出溫度的高8位
FLAG1   EQU  38H  ;是否檢測到DS18B20標(biāo)志位
A_BIT   EQU  20H   ;數(shù)碼管個(gè)位數(shù)存放內(nèi)存位置
B_BIT   EQU  21H   ;數(shù)碼管十位數(shù)存放內(nèi)存位置

MAIN:   LCALL  GET_TEMPER ;調(diào)用讀溫度子程序

;顯示范圍00到99度,顯示精度為1度
;因?yàn)?2位轉(zhuǎn)化時(shí)每一位的精度為0.0625度,我們不要求顯示小數(shù)所以可以拋棄29H的低4位
;將28H中的低4位移入29H中的高4位,這樣獲得一個(gè)新字節(jié),這個(gè)字節(jié)就是實(shí)際測量獲得的溫度
;這個(gè)轉(zhuǎn)化溫度的方法非常簡潔,無需乘于0.0625系數(shù)

  MOV  A,29H
  MOV  C,40  ;將28H中的最低位移入C
  RRC  A
  MOV  C,41H
  RRC  A
  MOV  C,42H
  RRC  A
  MOV  C,43H
  RRC  A
  MOV  29H,A

  LCALL  DISPLAY  ;調(diào)用數(shù)碼管顯示子程序

  AJMP  MAIN

;這是DS18B20復(fù)位初始化子程序
INIT_1820: SETB  P3.4
  NOP
  CLR  P3.4
;主機(jī)發(fā)出延時(shí)537微秒的復(fù)位低脈沖
  MOV  R1,#3
TSR1:  MOV  R0,#107
  DJNZ  R0,$
  DJNZ  R1,TSR1
  SETB  P3.4  ;然后拉高數(shù)據(jù)線
  NOP
  NOP
  NOP
  MOV  R0,#25H
TSR2:  JNB  P3.4,TSR3 ;等待DS18B20回應(yīng)
  DJNZ  R0,TSR2  ;延時(shí)
  LJMP  TSR4   
TSR3:  SETB  FLAG1   ;置標(biāo)志位,表示DS1820存在
  LJMP  TSR5
TSR4:  CLR  FLAG1   ;清標(biāo)志位,表示DS1820不存在
  LJMP  TSR7

TSR5:  MOV  R0,#117
TSR6:  DJNZ  R0,TSR6  ;時(shí)序要求延時(shí)一段時(shí)間
TSR7:  SETB  P3.4
  RET

;讀出轉(zhuǎn)換后的溫度值

GET_TEMPER: SETB  P3.4
  LCALL  INIT_1820 ;先復(fù)位DS18B20
  JB  FLAG1,TSS2
  RET    ;判斷DS1820是否存在?若DS18B20不存在則返回
  
TSS2:  MOV  A,#0CCH  ;跳過ROM匹配
  LCALL  WRITE_1820
  MOV  A,#44H   ;發(fā)出溫度轉(zhuǎn)換命令
  LCALL  WRITE_1820

;這里通過調(diào)用顯示子程序?qū)崿F(xiàn)延時(shí)一段時(shí)間,等待AD轉(zhuǎn)換結(jié)束,12位的話750微秒

  LCALL  DISPLAY

  LCALL  INIT_1820 ;準(zhǔn)備讀溫度前先復(fù)位

  MOV  A,#0CCH  ;跳過ROM匹配
  LCALL  WRITE_1820

  MOV  A,#0BEH  ;發(fā)出讀溫度命令
  LCALL  WRITE_1820

  LCALL  READ_18200 ;將讀出的溫度數(shù)據(jù)保存到35H/36H

  RET

;寫DS18B20的子程序(有具體的時(shí)序要求)
WRITE_1820: MOV  R2,#8  ;一共8位數(shù)據(jù)
  CLR  C
WR1:  CLR  P3.4
  MOV  R3,#6
  DJNZ  R3,$
  RRC  A
  MOV  P3.4,C
  MOV  R3,#23
  DJNZ  R3,$
  SETB  P3.4
  NOP
  DJNZ  R2,WR1
  SETB  P3.4
  RET

;讀DS18B20的程序,從DS18B20中讀出兩個(gè)字節(jié)的溫度數(shù)據(jù)
 
READ_18200: MOV  R4,#2   ;將溫度高位和低位從DS18B20中讀出
  MOV  R1,#29H  ;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
RE00:  MOV  R2,#8  ;數(shù)據(jù)一共有8位
RE01:  CLR  C
  SETB  P3.4
  NOP
  NOP
  CLR  P3.4
  NOP
  NOP
  NOP
  SETB  P3.4

  MOV  R3,#9
RE10:   DJNZ  R3,RE10

  MOV  C,P3.4

  MOV  R3,#23
RE20:   DJNZ  R3,RE20

  RRC  A
  DJNZ  R2,RE01
  MOV  @R1,A
  DEC  R1
  DJNZ  R4,RE00
  RET

;顯示子程序

DISPLAY:  MOV  A,29H  ;將29H中的十六進(jìn)制數(shù)轉(zhuǎn)換成10進(jìn)制
  MOV  B,#10   ;10進(jìn)制/10=10進(jìn)制
  DIV  AB
  MOV  B_BIT,A  ;十位在a
  MOV  A_BIT,B  ;個(gè)位在b
  MOV  DPTR,#NUMTAB  ;指定查表啟始地址
  MOV  R0,#4
DPL1:   MOV  R1,#250  ;顯示1000次
DPLOP:   MOV  A,A_BIT  ;取個(gè)位數(shù)
  MOVC  A,@A+DPTR  ;查個(gè)位數(shù)的7段代碼
  MOV  P1,A   ;送出個(gè)位的7段代碼
  CLR  P3.7   ;開個(gè)位顯示
  ACALL  D1MS   ;顯示1ms
  SETB  P3.7
  MOV  A,B_BIT  ;取十位數(shù)
  MOVC  A,@A+DPTR  ;查十位數(shù)的7段代碼
  MOV  P1,A   ;送出十位的7段代碼
  CLR  P3.5   ;開十位顯示
  ACALL  D1MS   ;顯示1ms
  SETB  P3.5
  DJNZ  R1,DPLOP  ;250次沒完循環(huán)
  DJNZ  R0,DPL1  ;4個(gè)250次沒完循環(huán)
  RET

;1MS延時(shí)(按12MHZ算)

D1MS:   MOV  R7,#80
  DJNZ  R7,$
  RET

;7段數(shù)碼管0~9數(shù)字的共陽顯示代碼

NUMTAB:  DB 081H,0CFH,092H,086H,0CCH,0A4H,0A0H,08FH,080H,084H

  END

  • 上一篇: 89C2051單片機(jī)在鍵盤顯示裝置中的應(yīng)用
  • 下一篇: 沒有了
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1