|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
各位幫我看看ds18b20的顯示程序 |
| 作者:yudehenji 欄目:單片機(jī) |
大家有用過(guò)DS18B20.html">DS18B20的嗎?幫我看看我的程序。采集溫度之后,送三個(gè)8段led顯示,3片74HC164,AT89C2051串行工作方式0,分別控制指示燈,溫度個(gè)位,溫度十位。大家看看我的程序有沒(méi)有問(wèn)題。 TEMP.html">TEMP equ 40h TEMP.html">TEMP1 equ 41h TEMP.html">TEMP2 equ 42h TEMPER_NUM equ 60h main: acall readTEMP.html">TEMP acall TEMPER_COV acall led_wendu ajmp main RESET: L0: CLR p3.5 ; 長(zhǎng)英科技2000/9/27 MOV R2,#200 L1: NOP DJNZ R2,L1 ;主機(jī)發(fā)置位脈沖持續(xù)3us﹡200=600us SETB p3.5 ;主機(jī)釋放總線控制p3.5口改為輸入口 MOV R2,#30 L4: DJNZ R2,L4 ;DS18B20等待2us﹡30=60us CLR C ORL C,p3.5 ;DS18B20數(shù)據(jù)線應(yīng)變低 JC L0 ;DS18B20沒(méi)準(zhǔn)備好,重來(lái) MOV R6,#80 L5: ORL C,p3.5 JC L3 ;DS18B20數(shù)據(jù)線變高,初始化成功 DJNZ R6,L5 ;DS18B20數(shù)據(jù)線低電平狀態(tài)可持續(xù)3us﹡80=240us SJMP L0 ;初始化失敗,重來(lái) L3: MOV R2,#250 L2: DJNZ R2,L2 ;DS18B20應(yīng)答過(guò)程最少 > 480us RET WRITE: MOV R3,#8 WR1: SETB p3.5 MOV R4,#8 RRC A CLR p3.5 WR2: DJNZ R4,WR2 ;DS18B20栽數(shù)據(jù)線變低16us MOV p3.5,C ;將命令字按位依次送給DS18B20 MOV R4,#20 WR3: DJNZ R4,WR3 ;保證整個(gè)寫(xiě)過(guò)程持續(xù)60us DJNZ R3,WR1 ;送完整個(gè)命令字節(jié) SETB p3.5 RET READ: MOV R6,#8 RE1: CLR p3.5 MOV R4,#6 NOP ;低電平持續(xù)2us SETB p3.5 ;p3.5口設(shè)為輸入口 RE2: DJNZ R4,RE2 ;等待12us MOV C,p3.5 ;主機(jī)按位讀入DS18B20的數(shù)據(jù) RRC A ;數(shù)據(jù)送入A MOV R5,#30 RE3: DJNZ R5,RE3 ;保證讀數(shù)據(jù)過(guò)程持續(xù)2us﹡30=60us DJNZ R6,RE1 ;讀完8位 MOV TEMP,A ;將讀出值送變量TEMP保存 SETB p3.5 RET READTEMP : acall RESET ;復(fù)位 MOV A,#0CCH ;發(fā)SKIP ROM命令 acall WRITE MOV A,#44H ;發(fā)開(kāi)始溫度轉(zhuǎn)換命令 acall WRITE acall DELAY_1000 ;延時(shí) 1000 MS acall RESET ;復(fù)位 MOV A,#0CCH ;發(fā)SKIP ROM命令 acall WRITE MOV A,#0BEH ;發(fā)讀存儲(chǔ)器命令 acall WRITE CALL READ ;讀出溫度值低 MOV TEMP1,TEMP CALL READ ;讀出溫度值高 MOV TEMP2,TEMP acall RESET ;復(fù)位 RET TEMPER_COV: MOV A,#0F0H ANL A,TEMP.html">TEMP1 ; 舍去溫度低位中小數(shù)點(diǎn)后的四位溫度數(shù)值 SWAP A MOV TEMPER_NUM,A MOV A,TEMP.html">TEMP1 JNB ACC.3,TEMPER_COV1 ; 四舍五入去溫度值 INC TEMPER_NUM TEMPER_COV1: MOV A,TEMP.html">TEMP2 ANL A,#07H SWAP A ORL A,TEMPER_NUM MOV TEMPER_NUM,A ; 保存變換后的溫度數(shù)據(jù) LCALL BIN_BCD RET ;-------------------將16進(jìn)制的溫度數(shù)據(jù)轉(zhuǎn)換成壓縮BCD碼 BIN_BCD: &nbs |
| 2樓: | >>參與討論 |
| 作者: dreamflyme 于 2005/1/27 14:06:00 發(fā)布:
單片機(jī)AT89S52 DS18B20在HJ51/AVR單片機(jī)學(xué)習(xí)開(kāi)發(fā)系統(tǒng)上的應(yīng)用(供參考,摘自恒堅(jiān)電器網(wǎng)站): ; DS18B20 溫度傳感器讀數(shù)接口 ; 正確下載了程序以后,系統(tǒng)會(huì)利用數(shù)碼管的后3位顯示當(dāng)前的溫度值,最后一位是小數(shù)。 ; 如果要移植這個(gè)程序中讀取DS18B20的相關(guān)函數(shù),您需要修改以下幾個(gè)內(nèi)容 ; 根據(jù)您所選擇晶振和我們板子上的晶振6M的關(guān)系,重新計(jì)算 ; 初始化和讀取,寫(xiě)入三個(gè)函數(shù)延時(shí)相關(guān)部分系數(shù),用*標(biāo)出 ; 這個(gè)溫度測(cè)試程序的溫度精度是0.5C。 beep equ p3.7 segdata equ p0 ;數(shù)據(jù) 輸出 sege equ p2.7 ;顯示 選中 segb equ p2.6 ;位 選 segd equ p2.5 ;段 選 tmp0 equ 40h tmp1 equ 41h tmp2 equ 42h tmp3 equ 43h tmp equ 44h buf equ 45h dstmp bit p3.2 ;DS18B20在外部中斷T0口,連器件的時(shí)候注意了 ;我們活動(dòng)式設(shè)計(jì),您只要把DS18B20三只腳分開(kāi),準(zhǔn)確識(shí)別三只腳的含義 ;(這在我們光盤中提供了說(shuō)明文件),然后分別對(duì)應(yīng),插入面板下主芯片下 ;方的擴(kuò)展座對(duì)應(yīng)的引腳即可 ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV SP,#30H clr beep LCALL GET_TEMP ;首先獲得溫度值 mov tmp,r7 ; R7是溫度的低位 clr c mov a,r6 ; R6是溫度的高位 rrc a mov r6,a mov a,r7 rrc a mov r7,a ;完成一次移位 mov a,r6 rrc a mov r6,a mov a,r7 rrc a mov r7,a ;完成2次移位 mov a,r6 rrc a mov r6,a mov a,r7 rrc a mov r7,a ;完成3次移位,這樣以后便與計(jì)算 mov a,r7 mov b,#2 div ab mov r0,a ;高位商 mov r1,b ;余數(shù) mov b,#10 div ab mov tmp1,b ;個(gè)位 mov b,#10 div ab mov tmp2,b ;十位 mov tmp3,a ;百位 clr c mov a,tmp rlc a mov tmp,a mov a,r1 rlc a mov r1,a ;小數(shù)操作 mov a,tmp rlc a mov tmp,a mov a,r1 rlc a mov r1,a ;小數(shù) mov a,tmp rlc a mov tmp,a mov a,r1 rlc a mov r1,a ;小數(shù)擴(kuò)大16倍 mov dptr,#ft movc a,@a+dptr mov tmp0,a mov a,tmp3 jz noe ;0消隱 mov b,#3 acall DISPLAY ;顯示百位 noe: mov a,tmp2 mov b,#2 acall DISPLAY ;在第二位顯示十位 mov a,tmp1 add a,#16 mov b,#1 ;第1位顯示個(gè)位,帶小數(shù)點(diǎn) acall DISPLAY mov a,tmp0 mov b,#0   |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |