• <rp id="wfxtb"><acronym id="wfxtb"></acronym></rp><em id="wfxtb"></em><dd id="wfxtb"><big id="wfxtb"><video id="wfxtb"></video></big></dd>
  • <rp id="wfxtb"></rp>

    <mark id="wfxtb"><center id="wfxtb"></center></mark>

      <rp id="wfxtb"><span id="wfxtb"><u id="wfxtb"></u></span></rp>

      <rp id="wfxtb"><object id="wfxtb"></object></rp>

      注意:訪問本站需要Cookie和JavaScript支持!請設置您的瀏覽器! 打開購物車 查看留言付款方式聯系我們
      初中電子 單片機教材一 單片機教材二
      搜索上次看見的商品或文章:
      商品名、介紹 文章名、內容
      首頁 電子入門 學單片機 免費資源 下載中心 商品列表 象棋在線 在線繪圖 加盟五一 加入收藏 設為首頁
      本站推薦:
      溫度傳感器ds1820 的匯編程序
      文章長度[3586] 加入時間[2006/7/1] 更新時間[2025/5/11 15:37:56] 級別[3] [評論] [收藏]
      詳細內容:溫度傳感器ds1820 的匯編程序

      晶振:12M
      TEMPER_L EQU 36H
      TEMPER_H EQU 35H
      TEMPER_NUM EQU 60H
      FLAG1 BIT 00H
      DQ BIT P3.3
      AAA:MOV SP,#70H
      LCALL GET_TEMPER
      LCALL TEMPER_COV
      LJMP AAA
      NOP
      ;------------------讀出轉換后的溫度值
      GET_TEMPER:
      SETB DQ ; 定時入口
      BCD:LCALL INIT_1820
      JB FLAG1,S22
      LJMP BCD ; 若DS18B20不存在則返回

      S22:LCALL DELAY1
      MOV A,#0CCH ; 跳過ROM匹配------0CC
      LCALL WRITE_1820
      MOV A,#44H ; 發出溫度轉換命令
      LCALL WRITE_1820
      NOP
      LCALL DELAY
      LCALL DELAY
      CBA:LCALL INIT_1820
      JB FLAG1,ABC
      LJMP CBA
      ABC:LCALL DELAY1
      MOV A,#0CCH ; 跳過ROM匹配
      LCALL WRITE_1820
      MOV A,#0BEH ; 發出讀溫度命令
      LCALL WRITE_1820
      LCALL READ_18200 ;READ_1820
      RET
      ;------------------讀DS18B20的程序,從DS18B20中讀出一個字節的數據
      READ_1820:
      MOV R2,#8
      RE1:
      CLR C
      SETB DQ
      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,RE1
      RET

      ;-------------------寫DS18B20的程序
      WRITE_1820:
      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
      ;-------------------讀DS18B20的程序,從DS18B20中讀出兩個字節的溫度數據
      READ_18200:
      MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
      MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
      RE00:
      MOV R2,#8
      RE01:
      CLR C
      SETB DQ
      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

      ;-------------------將從DS18B20中讀出的溫度數據進行轉換
      TEMPER_COV:
      MOV A,#0F0H
      ANL A,TEMPER_L ; 舍去溫度低位中小數點后的四位溫度數值
      SWAP A
      MOV TEMPER_NUM,A
      MOV A,TEMPER_L
      JNB ACC.3,TEMPER_COV1 ; 四舍五入去溫度值
      INC TEMPER_NUM

      TEMPER_COV1:
      MOV A,TEMPER_H
      ANL A,#07H
      SWAP A
      ORL A,TEMPER_NUM
      MOV TEMPER_NUM,A ; 保存變換后的溫度數據
      LCALL BIN_BCD
      RET
      ;-------------------將16進制的溫度數據轉換成壓縮BCD碼
      BIN_BCD:
      MOV DPTR,#TEMP_TAB
      MOV A,TEMPER_NUM
      MOVC A,@A+DPTR
      MOV TEMPER_NUM,A
      RET

      TEMP_TAB:
      DB 00H,01H,02H,03H,04H,05H,06H,07H
      DB 08H,09H,10H,11H,12H,13H,14H,15H
      DB 16H,17H,18H,19H,20H,21H,22H,23H
      DB 24H,25H,26H,27H,28H,29H,30H,31H
      DB 32H,33H,34H,35H,36H,37H,38H,39H
      DB 40H,41H,42H,43H,44H,45H,46H,47H
      DB 48H,49H,50H,51H,52H,53H,54H,55H
      DB 56H,57H,58H,59H,60H,61H,62H,63H
      DB 64H,65H,66H,67H,68H,69H,70H,71H
      DB 72H,73H,74H,75H,76H,77H,78H,79H
      DB 80H,81H,82H,83H,84H,85H,86H,87H
      DB 88H,89H,90H,91H,92H,93H,94H,95H
      DB 96H,97H,98H,99H

      ;-------------------DS18B20初始化程序
      INIT_1820:
      SETB DQ
      NOP
      CLR DQ
      MOV R0,#80H
      TSR1:
      DJNZ R0,TSR1 ; 延時
      SETB DQ
      MOV R0,#25H ;96US-25H
      TSR2:
      DJNZ R0,TSR2
      JNB DQ,TSR3
      LJMP TSR4 ; 延時
      TSR3:
      SETB FLAG1 ; 置標志位,表示DS1820存在
      LJMP TSR5
      TSR4:
      CLR FLAG1 ; 清標志位,表示DS1820不存在
      LJMP TSR7
      TSR5:
      MOV R0,#06BH ;200US
      TSR6:
      DJNZ R0,TSR6 ; 延時
      TSR7:
      SETB DQ
      RET
      ;------------------重新寫DS18B20暫存存儲器設定值
      RE_CONFIG:
      JB FLAG1,RE_CONFIG1 ; 若DS18B20存在,轉RE_CONFIG1
      RET
      RE_CONFIG1:
      MOV A,#0CCH ; 發SKIP ROM命令
      LCALL WRITE_1820
      MOV A,#4EH ; 發寫暫存存儲器命令
      LCALL WRITE_1820

      MOV A,#00H ; TH(報警上限)中寫入00H
      LCALL WRITE_1820
      MOV A,#00H ; TL(報警下限)中寫入00H
      LCALL WRITE_1820
      MOV A,#7FH ; 選擇12位溫度分辨率
      LCALL WRITE_1820
      RET
      ;------------------延時子程序
      DELAY:MOV R7,#00H
      MIN:DJNZ R7,YS500
      RET
      YS500:LCALL YS500US
      LJMP MIN
      YS500US:MOV R6,#00H
      DJNZ R6,$
      RET
      DELAY1:MOV R7,#20H
      DJNZ R7,$
      RET


      1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。
      2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! 以上可能是本站收集或者轉載的文章,本站可能沒有文章中的元件或產品,如果您需要類似的商品請 點這里查看商品列表!
      本站協議。 版權信息。 關于我們。 本站地圖。 營業執照。 發票說明。 付款方式。 聯系方式
      深圳市寶安區西鄉五壹電子商行——粵ICP備16073394號-1;地址:深圳西鄉河西四坊183號;郵編:518102
      E-mail:51dz$163.com($改為@);Tel:(0755)27947428
      工作時間:9:30-12:00和13:30-17:30和18:30-20:30,無人接聽時可以再打手機13537585389
      91嫩草黄片动漫版