新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > DS18b20和51單片機連接的匯編程序

        DS18b20和51單片機連接的匯編程序

        作者: 時間:2013-01-15 來源:網絡 收藏

        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
        ;*****************讀轉換后的溫度值****************
        GET_TEMPER:
        SETB DQ
        LCALL INIT_18B20
        JB FLAG1,TSS2
        RET ;若不存在則返回
        TSS2: MOV A,#0CCH ;跳過ROM
        LCALL WRITE_18B20
        MOV A,#44H ;發出溫度轉換命令
        LCALL WRITE_18B20

        LCALL DISPLAY ;延時
        LCALL INIT_18B20
        MOV A,#0CCH ;跳過ROM
        LCALL WRITE_18B20
        MOV A,#0BEH ;發出讀溫度換命令
        LCALL WRITE_18B20
        LCALL READ2_18B20 ;讀兩個字節的溫度
        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程序,讀出兩個字節的溫度*********
        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
        ;************讀出的溫度進行數據轉換**************

        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 ;調用數碼管顯示子程序

        ; setb P2.0
        LJMP MAIN
        ;*******************DISPLAY******
        DISPLAY: mov a,29H;將29H中的十六進制數轉換成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 ;取個位數
        MOVC A,@A+DPTR ;查個位數的7段代碼
        mov p0,a ;送出個位的7段代碼
        clr p2.5;開個位顯示
        acall d1ms ;顯示1ms
        setb p2.5
        mov a,b_bit ;取十位數
        MOVC A,@A+DPTR ;查十位數的7段代碼
        mov p0,a ;送出十位的7段代碼
        clr p2.4;開十位顯示
        acall d1ms ;顯示1ms
        setb p2.4
        djnz r1,dplop ;100次沒完循環
        djnz r0,dpl1 ;4個100次沒完循環
        ret

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

        51單片機相關文章:51單片機教程



        上一頁 1 2 下一頁

        關鍵詞: DS18b20 51單片機 匯編程序

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 天气| 古田县| 安多县| 石渠县| 大埔县| 图们市| 秦皇岛市| 永吉县| 京山县| 四川省| 岗巴县| 伊春市| 漳州市| 浮梁县| 南陵县| 进贤县| 盖州市| 绥棱县| 宜春市| 石城县| 巴彦淖尔市| 新民市| 吉林市| 定州市| 丰都县| 万年县| 武安市| 洪江市| 芷江| 莫力| 安徽省| 吐鲁番市| 南康市| 靖州| 通州市| 日照市| 喀什市| 奉化市| 石首市| 田阳县| 东源县|