<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機(jī)+DS18B20溫控保溫匯編程序

          51單片機(jī)+DS18B20溫控保溫匯編程序

          作者: 時間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
          ;DS18B20和AT89C2051制作的熱水器程序!兩位數(shù)碼管顯示溫度,設(shè)定溫度時數(shù)碼管成閃爍狀態(tài),延時幾秒后跳轉(zhuǎn)到被測溫度;DS18B20的正電源就是紅線接+5伏,蘭線接地,黃線接P3.2,紅線和黃線之間接一個4.7K的上拉電阻
          ;這是關(guān)于DS18B20的讀寫程序,數(shù)據(jù)腳P3.2,晶振12MHz;溫度傳感器18B20匯編程序,采用器件默認(rèn)的12位轉(zhuǎn)化,最大轉(zhuǎn)化時間750微秒;可以將檢測到的溫度直接顯示到AT89C2051的p1口輸數(shù)碼管段碼到兩位一體數(shù)碼管上;顯示溫度00到99度,很準(zhǔn)確哦~~無需校正!;p3.1驅(qū)動加熱管裝置,讓溫度保溫在0-99度內(nèi);p3.0保溫指示燈,p3.4是溫度設(shè)定按鍵加1度;p3.5是溫度設(shè)定按鍵減1度,p3.7是數(shù)碼管高位位碼,p3.3是數(shù)碼管低位位碼;程序16進(jìn)制的溫度值放在29h里,我用可調(diào)節(jié)0度到99度的16進(jìn)制值(#08H/#0EH)與之比較;1至40度的16進(jìn)制為:01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH     1-10度;                   0BH 0CH 0DH 0EH 0FH 10H 11H 12H 13H 14H     11-20度;                   15H 16H 17H 18H 19H 1AH 1BH 1CH 1DH 1EH     21-30度;                   1FH 2OH 21H 22H 23H 24H 25H 26H 27H 28H     31-40度;                   29H 2AH 2BH 2CH 2DH 2EH 2FH 30H 31H 32H     41-50度;                   33H 34H 35H 36H 37H 38H 39H 3AH 3BH 3CH     51-60度;                   3CH 3DH 3EH 3FH 40H 41H 42H 43H 44H 45H     61-70度;                   46H 47H 48H 49H 4AH 4BH 4CH 4DH 4EH 4FH     71-80度;                   51H 52H 53H 54H 55H 56H 57H 58H 59H 5AH     81-90度;                   5BH 5CH 5DH 5EH 5FH 60H 61H 62H 63H 64H     91-100度;=========================================================================================;單片機(jī)內(nèi)存分配申明!TEMPER_L EQU 29H          ;用于保存讀出溫度的低8位TEMPER_H EQU 28H          ;用于保存讀出溫度的高8位(特別是可位尋址,程序中用的著哦)TIAO_H   EQU 27H       ;用于保存設(shè)定溫度的數(shù)據(jù)(最低溫度的設(shè)定,高溫度為低溫度加2度)FLAG1 EQU 38H             ;是否檢測到DS18B20標(biāo)志位a_bit equ 20h             ;數(shù)碼管個位數(shù)存放內(nèi)存位置b_bit equ 21h             ;數(shù)碼管十位數(shù)存放內(nèi)存位置SL   EQU  22H            ;設(shè)定溫度時數(shù)碼管個位數(shù)存放內(nèi)存位置SH   EQU  23H             ;設(shè)定溫度時數(shù)碼管十位數(shù)存放內(nèi)存位置sdwd  equ 24h            ;設(shè)定溫度壓縮BCD碼位DS18B20 BIT P3.2        ;定義DS18B20的數(shù)據(jù)腳為P3.2端口ORG 0000HMOV sdwd,#25H         ;;;;設(shè)定初始溫度37度,上電后內(nèi)部設(shè)定溫度MAIN:LCALL INIT_1820           ;調(diào)用復(fù)位DS18B20子程序MAIN1:LCALL GET_TEMPER          ;調(diào)用讀溫度子程序;進(jìn)行溫度顯示,這里我是用兩位數(shù)碼管來顯示溫度,顯示范圍00到99度,顯示精度為1度;因為12位轉(zhuǎn)化時每一位的精度為0.0625度,我們不要求顯示小數(shù)所以可以拋棄29H的低4位;將28H中的低4位移入29H中的高4位,這樣獲得一個新字節(jié),這個字節(jié)就是實際測量獲得的溫度;這個轉(zhuǎn)化溫度的方法可是我想出來的哦~~非常簡潔無需乘于0.0625系數(shù)MOV A,29HMOV C,40H                 ;將28H中的最低位移入CRRC AMOV C,41HRRC AMOV C,42HRRC AMOV C,43HRRC AMOV 29H,ALCALL DISPLAY             ;調(diào)用數(shù)碼管顯示子程序;這里是后加的,做為控制在0-99度內(nèi)恒溫的程序!p3.1驅(qū)動加熱管裝置setb p3.4setb p3.5jnb p3.4,DD1             ;按下后轉(zhuǎn)加1程序jnb p3.5,DD2             ;按下后轉(zhuǎn)減1程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;TT:     CLR C                    ;比較轉(zhuǎn)換值與設(shè)定值MOV 26H,sdwd              ;把低溫度設(shè)定保存到26H單元后減2度,作為低度的數(shù)據(jù)DEC 26HMOV A,29HCJNE A,26H,LOOP1        ;下限設(shè)定溫度度,不相等跳LOOP1SJMP HOTTING             ;與下限值相等跳HOTTING,加熱LOOP1:JC  HOTTING              ;溫度小于下限值跳HOTTING,加熱MOV A,29H                ;溫度大于下限值,與上限值比較CLR Cmov  27h,sdwdinc 27hCJNE A,27h,LOOP2        ;上限設(shè)定溫度度,不相等跳LOOP2SJMP STOPHOT             ;相等跳STOPHOT,停止加熱 LOOP2:JNC STOPHOT              ;溫度大于上限值跳STOPHOT,停止加熱SJMP KEEP                ;溫度小于上限且大于下限值跳KEEP,保溫HOTTING:CLR P3.1                 ;小,加熱器驅(qū)動setb p3.0                ;關(guān)閉保溫?zé)鬕EEP:SJMP MAIN              ;返回,保持原態(tài),保溫STOPHOT:SETB P3.1                ;關(guān)閉加熱器clr p3.0                ;點(diǎn)亮保溫?zé)鬉JMP MAIN                ;反回主程序;;;;;;;;;;;;;;;;;;;;;按鍵處理;;;;;;;;;;;;;;;;;加限設(shè)定溫度度;;;;;;;;;;DD1:LCALL  displa             ;調(diào)用數(shù)碼管閃爍設(shè)定顯示子程序mov r5,#30JNB P3.4,DD1mov a,sdwd               ;把設(shè)定溫度送累加器判斷cjne a,#62h,ty1               ;比較設(shè)定溫度是否到99度,不是則加ajmp dh2ty1: INC sdwddh2:jnb p3.4,DD1jnb p3.5,DD2             ;按下后轉(zhuǎn)減1程序LCALL  displa             ;調(diào)用數(shù)碼管閃爍設(shè)定顯示子程序djnz r5,dh2LJMP  TT;;;減限設(shè)定溫度度;;;;;;;;;;;;DD2:LCALL  displa             ;調(diào)用數(shù)碼管閃爍設(shè)定顯示子程序mov r5,#30JNB P3.5,DD2mov a,sdwd               ;把設(shè)定溫度送累加器判斷cjne a,#01h,ty               ;比較設(shè)定溫度是否到0度,不是則減ajmp dh1ty: DEC sdwddh1:jnb p3.5,DD2jnb p3.4,DD1             ;按下后轉(zhuǎn)加1程序LCALL  displa             ;調(diào)用數(shù)碼管閃爍設(shè)定顯示子程序djnz r5,dh1LJMP  TT;=========================================================================================; DS18B20復(fù)位初始化程序INIT_1820:SETB DS18B20NOPCLR DS18B20MOV R0,#06BH          ;主機(jī)發(fā)出延時537微秒的復(fù)位低脈沖MOV R1,#03HTSR1:DJNZ R0,TSR1MOV R0,#6BHDJNZ R1,TSR1SETB DS18B20             ;然后拉高數(shù)據(jù)線NOPNOPNOPMOV R0,#25HTSR2:JNB DS18B20,TSR3         ;等待DS18B20回應(yīng)DJNZ R0,TSR2LJMP TSR4             ;延時TSR3:SETB FLAG1            ;置標(biāo)志位,表示DS1820存在LJMP TSR5TSR4:CLR FLAG1             ;清標(biāo)志位,表示DS1820不存在LJMP TSR7TSR5:MOV R0,#06BHTSR6:DJNZ R0,TSR6          ;時序要求延時一段時間TSR7:SETB DS18B20RET;=========================================================================================; 讀出轉(zhuǎn)換后的溫度值GET_TEMPER:SETB DS18B20            ;定時入口LCALL INIT_1820      ;先復(fù)位DS18B20JB FLAG1,TSS2RET                  ;判斷DS1820是否存在?若DS18B20不存在則返回TSS2:MOV A,#0CCH          ;跳過ROM匹配LCALL WRITE_1820MOV A,#44H           ;發(fā)出溫度轉(zhuǎn)換命令LCALL WRITE_1820LCALL DISPLAY        ;這里通過調(diào)用顯示子程序?qū)崿F(xiàn)延時一段時間,等待AD轉(zhuǎn)換結(jié)束,12位的話750微秒.LCALL INIT_1820      ;準(zhǔn)備讀溫度前先復(fù)位MOV A,#0CCH          ;跳過ROM匹配LCALL WRITE_1820MOV A,#0BEH          ;發(fā)出讀溫度命令LCALL WRITE_1820LCALL READ_18200     ;將讀出的溫度數(shù)據(jù)保存到35H/36HRET;寫DS18B20的子程序(有具體的時序要求)WRITE_1820:MOV R2,#8            ;一共8位數(shù)據(jù)CLR CWR1:CLR DS18B20MOV R3,#6DJNZ R3,$RRC AMOV DS18B20,CMOV R3,#23DJNZ R3,$SETB DS18B20NOPDJNZ R2,WR1SETB DS18B20RET; 讀DS18B20的程序,從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù)READ_18200:MOV R4,#2          ;將溫度高位和低位從DS18B20中讀出MOV R1,#29H        ;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)RE00:MOV R2,#8RE01:CLR CSETB DS18B20NOPNOPCLR DS18B20NOPNOPNOPSETB DS18B20MOV R3,#09RE10:DJNZ R3,RE10MOV C,DS18B20MOV R3,#23RE20:DJNZ R3,RE20RRC ADJNZ R2,RE01MOV @R1,ADEC R1DJNZ R4,RE00RET				   
          				
                      
                          
          			
          							
          上一頁 1 2 下一頁

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();