基於ds18b20的數字溫度計設計 89c51 組合語言 急

2022-03-08 22:30:30 字數 5191 閱讀 1618

1樓:匿名使用者

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

;溫度感測器ds18b20測試程式

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

dq  bit p3.7                ;ds18b20的資料口位p3.3

tpl   equ  50h              ;存放溫度值的高位元組

tph   equ  51h              ;存放溫度值的低位元組

tppl  equ  54h              ;十進位制

tpph  equ  55h

xsp0  equ  58h

xsp1  equ  59h

xsp2  equ  5ah

xsp3  equ  5bh

org 0

jmp main

org 100h

main:

call ds18b20_reset      ;裝置復位

mov a,#0cch             ;跳過rom命令

call ds18b20_writebyte  ;送出命令

mov a,#044h             ;開始轉換

call ds18b20_writebyte  ;送出命令

jnb dq,$                ;等待轉換完成

call ds18b20_reset      ;裝置復位

mov a,#0cch             ;跳過rom命令

call ds18b20_writebyte  ;送出命令

mov a,#0beh             ;讀暫存儲存器

call ds18b20_writebyte  ;送出命令

call ds18b20_readbyte   ;讀溫度低位元組

mov tpl,a               ;儲存資料

call  ds18b20_readbyte   ;讀溫度高位元組

mov   tph,a               ;儲存資料

call  hzdl0

call  dis

jmp   main

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

;      驅動led顯示器的程式

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

pdl  bit   20h

dis:   mov dptr,#tab

dis1:  mov r0,#xsp0

mov r2,#0fbh

mov r3,#04h

clr pdl

dis2:  mov a,@r0           ;四位掃瞄顯示

movc a,@a+dptr

orl p3,#3ch

cjne r2,#0f7h, dis3

orl  a, #80h

dis3:  mov p1,a

mov a,r2

anl p3,a

rl  a

mov r2, a

inc r0

lcall day

djnz r3,dis2

rettab:   db  03fh,06h,05bh,4fh,66h,6dh,7dh,07h   ;

db  7fh,6fh,77h,7ch,39h,5eh,79h,71h,00h,40h ;共陰極**

day:   mov r4,#1

d1:    mov r5,#248

d2:    nop

nopdjnz r5,d2

djnz r4,d1

rethzdl0:   mov     tppl, #00h       ; 十六進製制 -> 十進位制

mov     tpph, #00h

mov     tpph+1, #00h

mov     tph+1, #00h

mov     r3, #04h

hzdl2:   clr     c

mov     a, tpl

rlc     a

mov     tpl,a

mov     a, tph

rlc     a

mov     tph,a

mov     a, tph+1

rlc     a

mov     tph+1,a

djnz    r3, hzdl2

hzdl021: mov     r3, #10h

hzdl022: mov     r0, #tpl

mov     r2, #03h

hzdl026: mov     a, @r0

rlc     a

mov     @r0, a

inc     r0

djnz    r2, hzdl026

mov     r0, #tppl

mov     r2, #03h

hzdl028: mov     a, @r0

addc    a, @r0

da      a

mov     @r0, a

inc     r0

djnz    r2, hzdl028

djnz    r3, hzdl022

mov   a, tppl

anl   a, #0fh

mov   xsp1, a

mov   a, tppl

swap  a

anl   a, #0fh

mov   xsp2, a

mov   a, tpph

anl   a, #0fh

mov   xsp3, a

mov     a, tph+1

swap    a

add     a, #3

movc    a, @a+pc

mov     xsp0, a

retdb   00h, 00h, 01h, 01h, 02h, 03h, 03h, 04h

db   05h, 05h, 06h, 06h, 07h, 08h, 08h, 09h

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

;延時x*10微秒

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

delayx0us:                  ;2 當改用1t的mcu時,請調整此延時函式

nop                     ;1

nop                     ;1

nop                     ;1

nop                     ;1

nop                     ;1

nop                     ;1

nop                     ;1

nop                     ;1

djnz r7,delayx0us       ;2

ret                     ;2

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

;復位ds18b20,並檢測裝置是否存在

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

ds18b20_reset:

clr dq                  ;送出低電平復位訊號

mov r7,#48              ;延時至少480us

call delayx0us

setb dq                 ;釋放資料線

mov r7,#6               ;等待60us

call delayx0us

mov c,dq                ;檢測存在脈衝

mov r7,#42              ;等待裝置釋放資料線

call delayx0us

jc ds18b20_reset        ;如果裝置不存在,則繼續等待

ret;**************************************

;從ds18b20讀1位元組資料

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

ds18b20_readbyte:

clr a

push 0

mov 0,#8                ;8位計數器

readnext:

clr dq                  ;開始時間片

nopnop

setb dq                 ;準備接收

nopnop

mov c,dq                ;讀取資料

rrc a

mov r7,#6               ;等待時間片結束

call delayx0us

djnz 0,readnext

pop 0

ret;**************************************

;向ds18b20寫1位元組資料

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

ds18b20_writebyte:

push 0

mov 0,#8                ;8位計數器

writenext:

clr dq                  ;開始時間片

nopnop

rrc a                   ;輸出資料

mov dq,c

mov r7,#6               ;等待時間片結束

call delayx0us

setb dq                 ;準備送出下一位資料

djnz 0,writenext

pop 0

retend

2樓:徐志尚

找個c語言的,c51的多!

求求基於51微控制器的數字溫度計設計 微控制器at89c51 測溫感測器使ds18b20 圖在下面!只要c語言程式

你好,我現在寫程式遇到了一些問題,ds18b20的顯示總是不穩定,我覺得也是時序的問題,希望你能幫助我

18b20只是測溫晶元,一般來說i2c的輸出比較穩定的,如果不穩定又可能是 18b20的電源引腳接觸不可靠 晶元所在位置受外界影響較大 比如靠近晶元,電機等 i2c程式有問題 這個不一定,因為i2c程式到處都有,比較成熟 還有一種可能是中斷級別的影響,即測溫中斷級別低於紅外和電機控制.因為ds18b...

求20W一下的B級車,求推薦20W一下的B級車

就是愛彬彬 首先不推薦買索納塔8,因為韓系車雖然外觀和內飾都不錯,但是皮薄,漆也薄且掉價快。邁瑞寶這個車我只能說比較坑,看每個月的銷量就知道啦,君威這個車說實話還不錯,外觀內飾都很好,動力也比較充沛,可以考慮入手2.0自動領先的,全部辦完約20w左右,網上有句話叫車買低配是最划算的,蒙迪歐的話,外觀...

a1 a2 b1 b2 0這個是判斷兩直線平行的還是垂直的?如果是平行(垂直)的那垂直的(平行)公式是什麼

這是垂直的判定條件 兩直線垂直時 k1k2 1,則 a1 b1 b2 a2 所以 a1a2 b1b2 0 k存在的條件回 下 平行的答公式是 a2b1 a1b2,即 a1b2 a2b1 0 擴充套件資料 在平面上兩條直線 空間的兩個平面以及空間的一條直線與一平面之間沒有任何公共點時,稱它們平行。如圖...