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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于51單片機(jī)的DS18b20匯編源程序

          基于51單片機(jī)的DS18b20匯編源程序

          作者: 時(shí)間:2012-11-03 來(lái)源:網(wǎng)絡(luò) 收藏

          ;**********************************
          FLAG1 BIT F0 ;DS18B20存在標(biāo)志位
          DQ BIT P1.7
          TEMPER_L EQU 29H
          TEMPER_H EQU 28H
          A_BIT EQU 35H
          B_BIT EQU 36H
          ;************程序起始********************
          ORG 0000H
          AJMP MAIN
          ORG 0100H
          ;**************主程序開(kāi)始************
          MAIN:
          LCALL INIT_18B20
          ;LCALL RE_CONFIG
          LCALL GET_TEMPER
          AJMP CHANGE

          ;**********DS18B20復(fù)位程序*****************
          INIT_18B20: SETB DQ
          NOP
          CLR DQ
          MOV R0,#0FBH
          TSR1: DJNZ R0,TSR1 ;延時(shí)
          SETB DQ
          MOV R0,#25H
          TSR2: JNB DQ ,TSR3
          DJNZ R0,TSR2
          TSR3: SETB FLAG1 ;置標(biāo)志位,表明DS18B20存在
          CLR P2.0 ;二極管指示
          AJMP TSR5
          TSR4: CLR FLAG1
          LJMP TSR7
          TSR5: MOV R0,#06BH
          TSR6: DJNZ R0,TSR6
          TSR7:SETB DQ ;表明不存在
          RET
          ;********************設(shè)定DS18B20暫存器設(shè)定值**************
          ;RE_CONFIG:
          ;JB FLAG1,RE_CONFIG1
          ;RET
          ;RE_CONFIG1: MOV A,#0CCH ;放跳過(guò)ROM命令
          ;LCALL WRITE_18B20
          ;MOV A,#4EH
          ;LCALL WRITE_18B20 ;寫(xiě)暫存器命令
          ;MOV A,#00H ;報(bào)警上限中寫(xiě)入00H
          ;LCALL WRITE_18B20
          ;MOV A,#00H ;報(bào)警下限中寫(xiě)入00H
          ; LCALL WRITE_18B20
          ;MOV A,#1FH ;選擇九位溫度分辨率
          ; LCALL WRITE_18B20
          ; RET
          ;*****************讀轉(zhuǎn)換后的溫度值****************
          GET_TEMPER:
          SETB DQ
          LCALL INIT_18B20
          JB FLAG1,TSS2
          RET ;若不存在則返回
          TSS2: MOV A,#0CCH ;跳過(guò)ROM
          LCALL WRITE_18B20
          MOV A,#44H ;發(fā)出溫度轉(zhuǎn)換命令
          LCALL WRITE_18B20

          LCALL DISPLAY ;延時(shí)
          LCALL INIT_18B20
          MOV A,#0CCH ;跳過(guò)ROM
          LCALL WRITE_18B20
          MOV A,#0BEH ;發(fā)出讀溫度換命令
          LCALL WRITE_18B20
          LCALL READ2_18B20 ;讀兩個(gè)字節(jié)的溫度
          RET
          ;***************寫(xiě)DS18B20程序************
          WRITE_18B20:
          MOV R2,#8
          CLR C
          WR1:
          CLR DQ

          MOV R3,#6
          DJNZ R3,$
          RRC A
          MOV DQ,C
          MOV R3,#23
          DJNZ R3,$
          SETB DQ
          NOP
          DJNZ R2,WR1
          SETB DQ
          RET


          ;***********讀18B20程序,讀出兩個(gè)字節(jié)的溫度*********
          READ2_18B20:
          MOV R4,#2 ;低位存在29 H,高位存在28H

          MOV R1,#29H
          RE00: MOV R2,#8
          RE01: CLR C
          SETB C
          NOP
          NOP

          CLR DQ
          NOP
          NOP
          NOP
          SETB DQ
          MOV R3,#7
          DJNZ R3,$
          MOV C,DQ
          MOV R3,#23
          DJNZ R3,$
          RRC A
          DJNZ R2,RE01
          MOV @R1,A
          DEC R1
          DJNZ R4,RE00
          RET
          ;************讀出的溫度進(jìn)行數(shù)據(jù)轉(zhuǎn)換**************

          CHANGE: MOV A,29H
          MOV C,28H.0 ;將28H中的最低位移入C
          RRC A
          MOV C,28H.1
          RRC A
          MOV C,28H.2
          RRC A
          MOV C,28H.3
          RRC A
          MOV 29H,A
          ;setb p2.0
          LCALL DISPLAY ;調(diào)用數(shù)碼管顯示子程序

          ; setb P2.0
          LJMP MAIN
          ;*******************DISPLAY******
          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,#TAB ;指定查表啟始地址
          mov r0,#4
          dpl1: mov r1,#250 ;顯示1000次
          dplop: mov a,a_bit ;取個(gè)位數(shù)
          MOVC A,@A+DPTR ;查個(gè)位數(shù)的7段代碼
          mov p0,a ;送出個(gè)位的7段代碼
          clr p2.5;開(kāi)個(gè)位顯示
          acall d1ms ;顯示1ms
          setb p2.5
          mov a,b_bit ;取十位數(shù)
          MOVC A,@A+DPTR ;查十位數(shù)的7段代碼
          mov p0,a ;送出十位的7段代碼
          clr p2.4;開(kāi)十位顯示
          acall d1ms ;顯示1ms
          setb p2.4
          djnz r1,dplop ;100次沒(méi)完循環(huán)
          djnz r0,dpl1 ;4個(gè)100次沒(méi)完循環(huán)
          ret

          ;***********************************
          D1MS: MOV R7,#80 ;1MS延時(shí)(按12MHZ算)
          DJNZ R7,$
          RET
          ;*************************
          TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H



          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();