久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4339|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

DS18B20保溫?zé)崴鞒绦?asm

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:75926 發(fā)表于 2015-4-3 01:32 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
                                                                                                 ;DS18B20和AT89C2051制作的熱水器程序!兩位數(shù)碼管顯示溫度,設(shè)定溫度時(shí)數(shù)碼管成閃爍狀態(tài),延時(shí)幾秒后跳轉(zhuǎn)到被測(cè)溫度
;本程序由陳永飛同志開(kāi)發(fā)! 信箱:baiyni888@163.com  電話:025-82053659,地址:江蘇省儀征市新集鎮(zhèn)凌東村黃莊組
;DS18B20的正電源就是紅線接+5伏,蘭線接地,黃線接P3.2,紅線和黃線之間接一個(gè)4.7K的上拉電阻
;這是關(guān)于DS18B20的讀寫(xiě)程序,數(shù)據(jù)腳P3.2,晶振12MHz
;溫度傳感器18B20匯編程序,采用器件默認(rèn)的12位轉(zhuǎn)化,最大轉(zhuǎn)化時(shí)間750微秒
;可以將檢測(cè)到的溫度直接顯示到AT89C2051的p1口輸數(shù)碼管段碼到兩位一體數(shù)碼管上
;顯示溫度00到99度,很準(zhǔn)確哦~~無(wú)需校正!
;p3.1驅(qū)動(dòng)加熱管裝置,讓溫度保溫在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             ;是否檢測(cè)到DS18B20標(biāo)志位
       a_bit equ 20h             ;數(shù)碼管個(gè)位數(shù)存放內(nèi)存位置
       b_bit equ 21h             ;數(shù)碼管十位數(shù)存放內(nèi)存位置
       SL   EQU  22H            ;設(shè)定溫度時(shí)數(shù)碼管個(gè)位數(shù)存放內(nèi)存位置
       SH   EQU  23H             ;設(shè)定溫度時(shí)數(shù)碼管十位數(shù)存放內(nèi)存位置
       sdwd  equ 24h            ;設(shè)定溫度壓縮BCD碼位
      DS18B20 BIT P3.2        ;定義DS18B20的數(shù)據(jù)腳為P3.2端口
       ORG 0000H
       MOV sdwd,#25H         ;;;;設(shè)定初始溫度37度,上電后內(nèi)部設(shè)定溫度
  MAIN:LCALL INIT_1820           ;調(diào)用復(fù)位DS18B20子程序
MAIN1:LCALL GET_TEMPER          ;調(diào)用讀溫度子程序
;進(jìn)行溫度顯示,這里我是用兩位數(shù)碼管來(lái)顯示溫度,顯示范圍00到99度,顯示精度為1度
;因?yàn)?2位轉(zhuǎn)化時(shí)每一位的精度為0.0625度,我們不要求顯示小數(shù)所以可以拋棄29H的低4位
;將28H中的低4位移入29H中的高4位,這樣獲得一個(gè)新字節(jié),這個(gè)字節(jié)就是實(shí)際測(cè)量獲得的溫度
;這個(gè)轉(zhuǎn)化溫度的方法可是我想出來(lái)的哦~~非常簡(jiǎn)潔無(wú)需乘于0.0625系數(shù)
       MOV A,29H
       MOV C,40H                 ;將28H中的最低位移入C
       RRC A
       MOV C,41H
       RRC A
       MOV C,42H
       RRC A
       MOV C,43H
       RRC A
       MOV 29H,A
       LCALL DISPLAY             ;調(diào)用數(shù)碼管顯示子程序
;這里是后加的,做為控制在0-99度內(nèi)恒溫的程序!p3.1驅(qū)動(dòng)加熱管裝置
      setb p3.4
      setb p3.5
      jnb 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 26H
        MOV A,29H
        CJNE A,26H,LOOP1        ;下限設(shè)定溫度度,不相等跳LOOP1
        SJMP HOTTING             ;與下限值相等跳HOTTING,加熱
  LOOP1:JC  HOTTING              ;溫度小于下限值跳HOTTING,加熱
        MOV A,29H                ;溫度大于下限值,與上限值比較
        CLR C
     mov  27h,sdwd
     inc 27h
        CJNE A,27h,LOOP2        ;上限設(shè)定溫度度,不相等跳LOOP2
        SJMP STOPHOT             ;相等跳STOPHOT,停止加熱 
  LOOP2:JNC STOPHOT              ;溫度大于上限值跳STOPHOT,停止加熱
        SJMP KEEP                ;溫度小于上限且大于下限值跳KEEP,保溫
HOTTING:CLR P3.1                 ;小,加熱器驅(qū)動(dòng)
        setb p3.0                ;關(guān)閉保溫?zé)?br />    KEEP:SJMP MAIN              ;返回,保持原態(tài),保溫
STOPHOT:SETB P3.1                ;關(guān)閉加熱器
        clr p3.0                ;點(diǎn)亮保溫?zé)?br />         AJMP MAIN                ;反回主程序
;;;;;;;;;;;;;;;;;;;;;按鍵處理;;;;;;;;;;;;
;;;;;加限設(shè)定溫度度;;;;;;;;;;
DD1:LCALL  displa             ;調(diào)用數(shù)碼管閃爍設(shè)定顯示子程序
    mov r5,#30
    JNB P3.4,DD1
    mov a,sdwd               ;把設(shè)定溫度送累加器判斷
cjne a,#62h,ty1               ;比較設(shè)定溫度是否到99度,不是則加
  ajmp dh2
ty1: INC sdwd
dh2:jnb p3.4,DD1
      jnb p3.5,DD2             ;按下后轉(zhuǎn)減1程序
     LCALL  displa             ;調(diào)用數(shù)碼管閃爍設(shè)定顯示子程序
    djnz r5,dh2
   LJMP  TT
;;;減限設(shè)定溫度度;;;;;;;;;;;;
DD2:LCALL  displa             ;調(diào)用數(shù)碼管閃爍設(shè)定顯示子程序
    mov r5,#30
    JNB P3.5,DD2
    mov a,sdwd               ;把設(shè)定溫度送累加器判斷
cjne a,#01h,ty               ;比較設(shè)定溫度是否到0度,不是則減
  ajmp dh1
ty: DEC sdwd
dh1:jnb p3.5,DD2
      jnb p3.4,DD1             ;按下后轉(zhuǎn)加1程序
    LCALL  displa             ;調(diào)用數(shù)碼管閃爍設(shè)定顯示子程序
    djnz r5,dh1
   LJMP  TT
;=========================================================================================
; DS18B20復(fù)位初始化程序
INIT_1820:SETB DS18B20
          NOP
          CLR DS18B20
          MOV R0,#06BH          ;主機(jī)發(fā)出延時(shí)537微秒的復(fù)位低脈沖
          MOV R1,#03H
     TSR1:DJNZ R0,TSR1
          MOV R0,#6BH
          DJNZ R1,TSR1
          SETB DS18B20             ;然后拉高數(shù)據(jù)線
          NOP
          NOP
          NOP
          MOV R0,#25H
     TSR2:JNB DS18B20,TSR3         ;等待DS18B20回應(yīng)
          DJNZ R0,TSR2
          LJMP TSR4             ;延時(shí)
     TSR3:SETB FLAG1            ;置標(biāo)志位,表示DS1820存在
          LJMP TSR5
     TSR4:CLR FLAG1             ;清標(biāo)志位,表示DS1820不存在
          LJMP TSR7
     TSR5:MOV R0,#06BH
     TSR6:DJNZ R0,TSR6          ;時(shí)序要求延時(shí)一段時(shí)間
     TSR7:SETB DS18B20
          RET
;=========================================================================================
; 讀出轉(zhuǎn)換后的溫度值
GET_TEMPER:SETB DS18B20            ;定時(shí)入口
           LCALL INIT_1820      ;先復(fù)位DS18B20
           JB FLAG1,TSS2
           RET                  ;判斷DS1820是否存在?若DS18B20不存在則返回
      TSS2:MOV A,#0CCH          ;跳過(guò)ROM匹配
           LCALL WRITE_1820
           MOV A,#44H           ;發(fā)出溫度轉(zhuǎn)換命令
           LCALL WRITE_1820
           LCALL DISPLAY        ;這里通過(guò)調(diào)用顯示子程序?qū)崿F(xiàn)延時(shí)一段時(shí)間,等待AD轉(zhuǎn)換結(jié)束,12位的話750微秒.
           LCALL INIT_1820      ;準(zhǔn)備讀溫度前先復(fù)位
           MOV A,#0CCH          ;跳過(guò)ROM匹配
           LCALL WRITE_1820
           MOV A,#0BEH          ;發(fā)出讀溫度命令
           LCALL WRITE_1820
           LCALL READ_18200     ;將讀出的溫度數(shù)據(jù)保存到35H/36H
           RET
;寫(xiě)DS18B20的子程序(有具體的時(shí)序要求)
WRITE_1820:MOV R2,#8            ;一共8位數(shù)據(jù)
           CLR C
       WR1:CLR DS18B20
           MOV R3,#6
           DJNZ R3,$
           RRC A
           MOV DS18B20,C
           MOV R3,#23
           DJNZ R3,$
           SETB DS18B20
           NOP
           DJNZ R2,WR1
           SETB DS18B20
           RET
; 讀DS18B20的程序,從DS18B20中讀出兩個(gè)字節(jié)的溫度數(shù)據(jù)
READ_18200:MOV R4,#2          ;將溫度高位和低位從DS18B20中讀出
           MOV R1,#29H        ;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
      RE00:MOV R2,#8
      RE01:CLR C
           SETB DS18B20
           NOP
           NOP
           CLR DS18B20
           NOP
           NOP
           NOP
           SETB DS18B20
           MOV R3,#09
      RE10:DJNZ R3,RE10
           MOV C,DS18B20
           MOV R3,#23
      RE20:DJNZ R3,RE20
           RRC A
           DJNZ R2,RE01
           MOV @R1,A
           DEC R1
           DJNZ R4,RE00
           RET
;=========================================================================================
;;;;;;;;;;;;;;;顯示子程序;;;;;;;;;;;;;;;;;;
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,#numtab     ;指定查表啟始地址
        mov r1,#250          ;顯示250次
  dplop:mov a,a_bit          ;取個(gè)位數(shù)
        MOVC A,@A+DPTR       ;查個(gè)位數(shù)的7段代碼
        mov p1,a             ;送出個(gè)位的7段代碼
        clr p3.3             ;開(kāi)個(gè)位顯示
        acall d1ms           ;顯示1ms
        setb p3.3
        mov a,b_bit          ;取十位數(shù)
        MOVC A,@A+DPTR       ;查十位數(shù)的7段代碼
        mov p1,a             ;送出十位的7段代碼
        clr p3.7            ;開(kāi)十位顯示
        acall d1ms           ;顯示1ms
        setb p3.7
        djnz r1,dplop        ;250次沒(méi)完循環(huán)
        RET
;;;===============================================================
;;;;;;;閃爍設(shè)定顯示子程序=====================
displa:   MOV A,sdwd
        mov b,#10            ;10進(jìn)制/10=10進(jìn)制
        div ab
        mov SL,a          ;十位在a
        mov SH,b          ;個(gè)位在b
        mov r1,#250          ;顯示250次
dpl2:  mov a,SL          ;取設(shè)定溫度個(gè)位數(shù)
        mov dptr,#numtab     ;指定查表啟始地址
        MOVC A,@A+DPTR       ;查個(gè)位數(shù)的7段代碼
        mov p1,a             ;送出個(gè)位的7段代碼
        clr p3.7            ;開(kāi)個(gè)位顯示
        acall d1ms           ;顯示1ms
        setb p3.7
        mov a,SH          ;取設(shè)定溫度十位數(shù)
        MOVC A,@A+DPTR       ;查十位數(shù)的7段代碼
        mov p1,a             ;送出十位的7段代碼
        clr p3.3           ;開(kāi)十位顯示
        acall d1ms           ;顯示1ms
        setb p3.3
        djnz r1,dpl2        ;250次沒(méi)完循環(huán)
        acall D1s           ;顯示1ms
        RET
;;=========================================================================================
;1MS延時(shí)(按12MHZ算)
   D1MS:MOV R7,#80
        DJNZ R7,$
        RET
;;1S延時(shí)(按12MHZ算)
  D1s:MOV R7,#255
     l1:nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        DJNZ R7,l1
        RET
;=========================================================================================
numtab:         DB        0EEH;0
        DB        048H;1
        DB        0D6H;2
        DB        0DCH;3
        DB        078H;4
        DB        0BCH;5
        DB        0BEH;6
        DB        0C8H;7
        DB        0FEH;8
        DB        0FCH;9

END

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人在线视频免费观看 | 自拍偷拍第一页 | 日韩在线免费观看视频 | 日韩欧美国产一区二区 | 亚洲视频一区二区三区四区 | 夜夜草| 免费色网址| 欧美一区二区免费 | 亚洲欧美综合网 | 自拍视频一区二区三区 | 午夜看片网站 | 国产日韩欧美一区二区 | 午夜噜噜噜 | 国产 日韩 欧美 在线 | 91在线视频免费观看 | 在线观看免费av网站 | 天天色影视综合 | 成人在线免费视频 | 欧美精品一二三 | 国产精品一区二区电影 | 日韩av啪啪网站大全免费观看 | 国内自拍视频在线观看 | 久久久久91 | 日韩乱码一二三 | 91在线一区| 在线观看免费国产 | 欧美成人激情视频 | www国产成人免费观看视频,深夜成人网 | 日韩性生活网 | 黄网站免费在线看 | 精品亚洲一区二区三区 | 福利视频三区 | 欧美日韩黄色一级片 | 日韩精品一区二区三区在线观看 | 精品国产91乱码一区二区三区 | 久久久免费毛片 | 亚洲精品一二区 | 精品免费看 | www久久国产| 中文字幕国产高清 | 香蕉久久av |