0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

DS18B20和51單片機連接的匯編程序免費下載

Wildesbeast ? 來源:單片機教程網(wǎng) ? 作者:單片機教程網(wǎng) ? 2020-09-06 10:52 ? 次閱讀

匯編程序僅適合單個DS18B20和51單片機的連接,晶振為12MHZ左右

DQ:DS18B20的數(shù)據(jù)總線接腳

FLAG1:標志位,為“1”時表示檢測到DS18B20

TEMPER_NUM:保存讀出的溫度數(shù)據(jù)

TEMPER_LEQU36H

TEMPER_HEQU35H

DQBITP1.7

; DS18B20初始化匯編程序

;//*****************************************//

INIT_1820:

SETBDQ

NOP

CLRDQ

MOVR0,#06BH

TSR1:

DJNZR0,TSR1; 延時

SETBDQ

MOVR0,#25H

TSR2:

JNBDQ,TSR3

DJNZR0,TSR2

LJMPTSR4; 延時

TSR3:

SETBFLAG1; 置標志位,表示DS1820存在

LJMPTSR5

TSR4:

CLRFLAG1; 清標志位,表示DS1820不存在

LJMPTSR7

TSR5:

MOVR0,#06BH

TSR6:

DJNZR0,TSR6; 延時

TSR7:

SETBDQ

RET

;//*****************************************//

; 重新寫DS18B20暫存存儲器設定值

;//*****************************************//

RE_CONFIG:

JBFLAG1,RE_CONFIG1; 若DS18B20存在,轉(zhuǎn)RE_CONFIG1

RET

RE_CONFIG1:

MOVA,#0CCH; 發(fā)SKIP ROM命令

LCALLWRITE_1820

MOVA,#4EH; 發(fā)寫暫存存儲器命令

LCALLWRITE_1820

MOVA,#00H; TH(報警上限)中寫入00H

LCALLWRITE_1820

MOVA,#00H; TL(報警下限)中寫入00H

LCALLWRITE_1820

MOVA,#1FH; 選擇9位溫度分辨率

LCALLWRITE_1820

RET

;//*****************************************//

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

;//*****************************************//

GET_TEMPER:

SETBDQ; 定時入口

LCALLINIT_1820

JBFLAG1,TSS2

RET; 若DS18B20不存在則返回

TSS2:

MOVA,#0CCH; 跳過ROM匹配

LCALLWRITE_1820

MOVA,#44H; 發(fā)出溫度轉(zhuǎn)換命令

LCALLWRITE_1820

LCALLINIT_1820

MOVA,#0CCH; 跳過ROM匹配

LCALLWRITE_1820

MOVA,#0BEH; 發(fā)出讀溫度命令

LCALLWRITE_1820

LCALLREAD_1820

MOVTEMPER_NUM,A; 將讀出的溫度數(shù)據(jù)保存

RET

;//*****************************************//

; 讀DS18B20的程序,從DS18B20中讀出一個字節(jié)的數(shù)據(jù)

;//*****************************************//

READ_1820:

MOVR2,#8

RE1:

CLRC

SETBDQ

NOP

NOP

CLRDQ

NOP

NOP

NOP

SETBDQ

MOVR3,#7

DJNZR3,$

MOVC,DQ

MOVR3,#23

DJNZR3,$

RRCA

DJNZR2,RE1

RET

;//*****************************************//

; 寫DS18B20的程序

;//*****************************************//

WRITE_1820:

MOVR2,#8

CLRC

WR1:

CLRDQ

MOVR3,#6

DJNZR3,$

RRCA

MOVDQ,C

MOVR3,#23

DJNZR3,$

SETBDQ

NOP

DJNZR2,WR1

SETBDQ

RET

;//*****************************************//

; 讀DS18B20的程序,從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù)

;//*****************************************//

READ_18200:

MOVR4,#2; 將溫度高位和低位從DS18B20中讀出

MOVR1,#36H; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)

RE00:

MOVR2,#8

RE01:

CLRC

SETBDQ

NOP

NOP

CLRDQ

NOP

NOP

NOP

SETBDQ

MOVR3,#7

DJNZR3,$

MOVC,DQ

MOVR3,#23

DJNZR3,$

RRCA

DJNZR2,RE01

MOV@R1,A

DECR1

DJNZR4,RE00

RET

;//*****************************************//

; 將從DS18B20中讀出的溫度數(shù)據(jù)進行轉(zhuǎn)換

;//*****************************************//

TEMPER_COV:

MOVA,#0F0H

ANLA,TEMPER_L; 舍去溫度低位中小數(shù)點后的四位溫度數(shù)值

SWAPA

MOVTEMPER_NUM,A

MOVA,TEMPER_L

JNBACC.3,TEMPER_COV1; 四舍五入去溫度值

INCTEMPER_NUM

TEMPER_COV1:

MOVA,TEMPER_H

ANLA,#07H

SWAPA

ORLA,TEMPER_NUM

MOVTEMPER_NUM,A; 保存變換后的溫度數(shù)據(jù)

LCALLBIN_BCD

RET

;//*****************************************//

; 將16進制的溫度數(shù)據(jù)轉(zhuǎn)換成壓縮BCD碼

;//*****************************************//

BIN_BCD:

MOVDPTR,#TEMP_TAB

MOVA,TEMPER_NUM

MOVCA,@A+DPTR

MOVTEMPER_NUM,A

RET

TEMP_TAB:

DB00H,01H,02H,03H,04H,05H,06H,07H

DB08H,09H,10H,11H,12H,13H,14H,15H

DB16H,17H,18H,19H,20H,21H,22H,23H

DB24H,25H,26H,27H,28H,29H,30H,31H

DB32H,33H,34H,35H,36H,37H,38H,39H

DB40H,41H,42H,43H,44H,45H,46H,47H

DB48H,49H,50H,51H,52H,53H,54H,55H

DB56H,57H,58H,59H,60H,61H,62H,63H

DB64H,65H,66H,67H,68H,69H,70H

;//*****************************************//

下面還介紹一個ds18b20匯編程序

;**********************************

FLAG1 BIT F0 ;DS18B20存在標志位

DQ BIT P1.7

TEMPER_L EQU 29H

TEMPER_H EQU 28H

A_BIT EQU 35H

B_BIT EQU 36H

;************ds18b20匯編程序起始********************

ORG 0000H

AJMP MAIN

ORG 0100H

;**************主程序開始************

MAIN:

LCALL INIT_18B20

;LCALL RE_CONFIG

LCALL GET_TEMPER

AJMP CHANGE

;**********DS18B20復位程序*****************

INIT_18B20: SETB DQ

NOP

CLR DQ

MOV R0,#0FBH

TSR1: DJNZ R0,TSR1 ;延時

SETB DQ

MOV R0,#25H

TSR2: JNB DQ ,TSR3

DJNZ R0,TSR2

TSR3: SETB FLAG1 ;置標志位,表明DS18B20存在

CLR P2.0 ;二極管指示

AJMP TSR5

TSR4: CLR FLAG1

LJMP TSR7

TSR5: MOV R0,#06BH

TSR6: DJNZ R0,TSR6

TSR7:SETB DQ ;表明不存在

RET

;********************設定DS18B20暫存器設定值**************

;RE_CONFIG:

;JB FLAG1,RE_CONFIG1

;RET

;RE_CONFIG1: MOV A,#0CCH ;放跳過ROM命令

;LCALL WRITE_18B20

;MOV A,#4EH

;LCALL WRITE_18B20 ;寫暫存器命令

;MOV A,#00H ;報警上限中寫入00H

;LCALL WRITE_18B20

;MOV A,#00H ;報警下限中寫入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 ;跳過ROM

LCALL WRITE_18B20

MOV A,#44H ;發(fā)出溫度轉(zhuǎn)換命令

LCALL WRITE_18B20

LCALL DISPLAY ;延時

LCALL INIT_18B20

MOV A,#0CCH ;跳過ROM

LCALL WRITE_18B20

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

LCALL WRITE_18B20

LCALL READ2_18B20 ;讀兩個字節(jié)的溫度

RET

;***************寫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程序,讀出兩個字節(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

;************讀出的溫度進行數(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中的十六進制數(shù)轉(zhuǎn)換成10進制

mov b,#10 ;10進制/10=10進制

div ab

mov b_bit,a ;十位在a

mov a_bit,b ;個位在b

mov dptr,#TAB ;指定查表啟始地址

mov r0,#4

dpl1: mov r1,#250 ;顯示1000次

dplop: mov a,a_bit ;取個位數(shù)

MOVC A,@A+DPTR ;查個位數(shù)的7段代碼

mov p0,a ;送出個位的7段代碼

clr p2.5;開個位顯示

acall d1ms ;顯示1ms

setb p2.5

mov a,b_bit ;取十位數(shù)

MOVC A,@A+DPTR ;查十位數(shù)的7段代碼

mov p0,a ;送出十位的7段代碼

clr p2.4;開十位顯示

acall d1ms ;顯示1ms

setb p2.4

djnz r1,dplop ;100次沒完循環(huán)

djnz r0,dpl1 ;4個100次沒完循環(huán)

ret

;***********************************

D1MS: MOV R7,#80 ;1MS延時(按12MHZ算)

DJNZ R7,$

RET

;*************************

TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6030

    文章

    44489

    瀏覽量

    631960
  • DS18B20
    +關注

    關注

    10

    文章

    777

    瀏覽量

    80637
  • 匯編程序
    +關注

    關注

    0

    文章

    56

    瀏覽量

    16145
收藏 人收藏

    評論

    相關推薦

    51單片機匯編程序

    51單片機匯編程序包。
    發(fā)表于 01-06 14:12 ?16次下載

    51單片機匯編程序有哪些?51單片機匯編程序集詳細資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是51單片機匯編程序有哪些?51單片機匯編程序集詳細資料
    發(fā)表于 09-06 16:31 ?55次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>匯編程序</b>有哪些?<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>匯編程序</b>集詳細資料<b class='flag-5'>免費</b><b class='flag-5'>下載</b>

    如何使用使用單片機DS18B20進行LED顯示的程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是如何使用使用單片機DS18B20進行LED顯示的程序免費下載。
    發(fā)表于 10-11 08:00 ?13次下載
    如何使用使用<b class='flag-5'>單片機</b><b class='flag-5'>DS18B20</b>進行LED顯示的<b class='flag-5'>程序</b><b class='flag-5'>免費</b><b class='flag-5'>下載</b>

    使用51單片機DS18B20設計溫度傳感器數(shù)碼管顯示的程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機DS18B20設計溫度傳感器數(shù)碼管顯示的程序免費下載
    發(fā)表于 08-27 17:29 ?29次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>及<b class='flag-5'>DS18B20</b>設計溫度傳感器數(shù)碼管顯示的<b class='flag-5'>程序</b><b class='flag-5'>免費</b><b class='flag-5'>下載</b>

    使用51單片機控制數(shù)碼管的匯編程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機控制數(shù)碼管的匯編程序免費下載。
    發(fā)表于 08-14 17:32 ?11次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>控制數(shù)碼管的<b class='flag-5'>匯編程序</b><b class='flag-5'>免費</b><b class='flag-5'>下載</b>

    51單片機DS18B20數(shù)字溫度傳感器驅(qū)動程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是51單片機DS18B20數(shù)字溫度傳感器驅(qū)動程序免費下載
    發(fā)表于 07-29 17:36 ?23次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>DS18B20</b>數(shù)字溫度傳感器驅(qū)動<b class='flag-5'>程序</b><b class='flag-5'>免費</b><b class='flag-5'>下載</b>

    使用51單片機驅(qū)動DS18B20溫度傳感器的程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機驅(qū)動DS18B20溫度傳感器的程序免費下載。
    發(fā)表于 07-10 17:40 ?28次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>驅(qū)動<b class='flag-5'>DS18B20</b>溫度傳感器的<b class='flag-5'>程序</b><b class='flag-5'>免費</b><b class='flag-5'>下載</b>

    使用51單片機點亮全部LED的匯編程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機點亮全部LED的匯編程序免費下載
    發(fā)表于 07-04 17:41 ?2次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>點亮全部LED的<b class='flag-5'>匯編程序</b><b class='flag-5'>免費</b><b class='flag-5'>下載</b>

    DS18B20測溫程序的C語言程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是利用51單片機設計DS18B20測溫程序的C語言程序免費
    發(fā)表于 06-26 17:43 ?7次下載
    <b class='flag-5'>DS18B20</b>測溫<b class='flag-5'>程序</b>的C語言<b class='flag-5'>程序</b><b class='flag-5'>免費</b><b class='flag-5'>下載</b>

    使用51單片機實現(xiàn)DS18B20溫度傳感器溫度顯示的例程合集免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機實現(xiàn)DS18B20溫度傳感器溫度顯示的例程合集免費下載。
    發(fā)表于 03-09 08:00 ?50次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>實現(xiàn)<b class='flag-5'>DS18B20</b>溫度傳感器溫度顯示的例程合集<b class='flag-5'>免費</b><b class='flag-5'>下載</b>

    使用51單片機實現(xiàn)數(shù)字溫度傳感器DS18B20應用的完整代碼合集免費下載

    使用51單片機實現(xiàn)數(shù)字溫度傳感器DS18B20應用的完整代碼合集免費下載
    發(fā)表于 03-12 16:43 ?81次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>實現(xiàn)數(shù)字溫度傳感器<b class='flag-5'>DS18B20</b>應用的完整代碼合集<b class='flag-5'>免費</b><b class='flag-5'>下載</b>

    DS18B20溫度計原理圖和PCB及單片機程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是DS18B20溫度計原理圖和PCB及單片機程序免費下載
    發(fā)表于 06-16 16:22 ?78次下載
    <b class='flag-5'>DS18B20</b>溫度計原理圖和PCB及<b class='flag-5'>單片機</b><b class='flag-5'>程序</b><b class='flag-5'>免費</b><b class='flag-5'>下載</b>

    使用STC單片機實現(xiàn)DS18B20溫度計的C51配套例程免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用STC單片機實現(xiàn)DS18B20溫度計的C51配套例程免費下載。
    發(fā)表于 03-16 10:12 ?38次下載

    51單片機DS18B20[

    一文讀懂DS18B20溫度傳感器及編程對于新手而言 DS18B20基本概念僅做了解最重要的是利用單片機DS18B20進行
    發(fā)表于 11-11 17:36 ?149次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>之<b class='flag-5'>DS18B20</b>[

    51單片機-DS18B20單片

    51單片機-DS18B20單片51單片機-DS18B20
    發(fā)表于 11-21 11:51 ?86次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>-<b class='flag-5'>DS18B20</b><b class='flag-5'>單片</b>