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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

51單片機實驗板DS18B20測溫程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2008年10月16日   【字體:

/******************************************************************
** 實驗名:51單片機實驗板溫度測量(DS18B20) 
** 創建人: 謝軍洋
** 日 期: 2008/01/22
** 修改人: 51hei
** 描 述:P3.7口輸入,輸出數據。
**------------------------------------------------------------------
** CPU:MCS-51
** 語言:匯編
** Fosc=12M

此次試驗的仿真圖
********************************************************************/

GE_BIT   EQU 30H
SHI_BIT  EQU 31H
BAI_BIT  EQU 32H
DI_8BIT  EQU 33H
GAO_8BIT EQU 34H
DQ       EQU P3.7
ORG 0000H
LJMP START
ORG 0020H
START:
      MOV SP,#60H
    LCALL ZHUANHUAN ;調用讀溫度子程序
   LCALL CHULI
      LCALL DISPLAY ;調用數碼管顯示子程序
   LJMP START

;-------------------------------------------------
;這是DS18B20復位初始化子程序
INIT_1820:
       SETB DQ
          NOP
       CLR DQ ;主機發出延時537微秒的復位低脈沖
       MOV R1,#3
DU_1:
     MOV R0,#107
  DJNZ R0,$
  DJNZ R1,DU_1
  SETB DQ ;然后拉高數據線
  NOP
  NOP
  NOP
  MOV R0,#25H
DU_2:JNB DQ,DU_3 ;等待DS18B20回應
  DJNZ R0,DU_2
  LJMP DU_4 ;延時
DU_3:SETB F0   ;置標志位,表示DS1820存在
  LJMP DU_5
DU_4:CLR F0   ;清標志位,表示DS1820不存在
  LJMP DU_7
DU_5:MOV R0,#117
DU_6:DJNZ R0,DU_6 ;時序要求延時一段時間
DU_7:SETB DQ
  RET
;-------------------------------------------------
;寫DS18B20的子程序(有具體的時序要求)
WRITE_1820:MOV R2,#8 ;一共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_1820:MOV R4,#2     ;將溫度高位和低位從DS18B20中讀出
       MOV R1,#DI_8BIT ;低位存入DI_8BIT,高位存入GAO_8BIT
RE0:MOV R2,#8             ;數據一共有8位
RE1:CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#9
RE2:DJNZ R3,RE2
MOV C,DQ
MOV R3,#23
RE3:DJNZ R3,RE3
RRC A
DJNZ R2,RE1
MOV @R1,A
INC R1
DJNZ R4,RE0
/* DEC R1
MOV A,GAO_8BIT
XCHD A,@R1
XCH A,@R1
MOV GAO_8BIT,A
MOV A,@R1
SWAP A
MOV @R1,A  */
RET    
;-------------------------------------------------
;讀出后轉換的溫度值
ZHUANHUAN:
       //SETB DQ
       LCALL INIT_1820 ;先復位DS18B20
       JB F0,ZH1
       RET ;判斷DS1820是否存在?若DS18B20不存在則返回
ZH1:MOV A,#0CCH ;跳過ROM匹配
LCALL WRITE_1820
MOV A,#44H ;發出溫度轉換命令
LCALL WRITE_1820
LCALL DISPLAY ;等待AD轉換結束,12位的話750微秒
LCALL INIT_1820 ;準備讀溫度前先復位
MOV A,#0CCH ;跳過ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ;發出讀溫度命令
LCALL WRITE_1820
LCALL READ_1820
RET  
;-------------------------------------------------
;數據處理子程序
CHULI:
      MOV P0,GAO_8BIT
   MOV P2,DI_8BIT
      MOV A,GAO_8BIT
   JB ACC.7,FU
      MOV A,DI_8BIT
   MOV  B,#16
   DIV  AB
      
   MOV 35H,A ;將DI_8BIT的高四位右移四位,存入35H中(溫度值)
      MOV A,B ;將TEMPER_L的低四位X10/16得小數后一位數.
   MOV B,#10
   MUL AB
   MOV B,#16
   DIV AB
   MOV 36H,A ;將小數后一位數.存入36H中
   MOV A,GAO_8BIT ;TEMPER_H中存放高8位數,權重16
   MOV B,#16
   MUL AB
   ADD A,35H ;35H中存入溫度值的整數部分
   MOV B,#10
   DIV AB
   MOV GE_BIT,B ;個位存入30H中
   MOV B,#10 ;
   DIV AB ;
   MOV SHI_BIT,B ;十位存入31H中
   MOV B,#10 ;
   DIV AB ;
   MOV BAI_BIT,B ;百位存入32H中
   MOV A,GAO_8BIT
   MOV 37H,#10H ;
   JB ACC.7,EXIT
   MOV 37H,#00H
   SJMP EXIT
   FU:
      MOV A,DI_8BIT
      CPL A
   ADD A,#1
   MOV B,#16
   DIV AB
      MOV 35H,A ;將DI_8BIT的高四位右移四位,存入35H中(溫度值)
      MOV A,B ;將TEMPER_L的低四位X10/16得小數后一位數.
   MOV B,#10
   MUL AB
   MOV B,#16
   DIV AB
  // MOV 36H,A ;將小數后一位數.存入36H中
  // MOV A,GAO_8BIT ;TEMPER_H中存放高8位數,權重16
   MOV B,#16
   MUL AB
   ADD A,35H ;35H中存入溫度值的整數部分
   MOV B,#10
   DIV AB
   MOV GE_BIT,B ;個位存入30H中
   MOV B,#10 ;
   DIV AB ;
   MOV SHI_BIT,B ;十位存入31H中
   MOV B,#10 ;
   DIV AB ;
   MOV BAI_BIT,B ;百位存入32H中
   MOV A,GAO_8BIT
   MOV 37H,#10H ;
   JB ACC.7,EXIT
   MOV 37H,#00H
   SJMP EXIT
EXIT:RET  
;-------------------------------------------------
;注:此次ds18b20溫度測量實驗在51hei單片機實驗板http://www.zg4o1577.cn上進行,測試一切ok,下面是數據顯示子程序
CL0:INC A
AJMP  CL1
CHULI:MOV A,DI_8BIT
  MOV  B,#16
  DIV  AB
  JB B.3,CL0
CL1:MOV 35H,A ;將DI_8BIT的高四位右移四位,存入35H中(溫度值)
MOV A,B ;將TEMPER_L的低四位X10/16得小數后一位數.
MOV B,#10
MUL AB
MOV B,#16
DIV AB
MOV 36H,A ;將小數后一位數.存入36H中
MOV A,GAO_8BIT ;TEMPER_H中存放高8位數,權重16
MOV B,#16
MUL AB
ADD A,35H ;35H中存入溫度值的整數部分
MOV B,#10
DIV AB
MOV GE_BIT,B ;個位存入30H中
MOV B,#10 ;
DIV AB ;
MOV SHI_BIT,B ;十位存入31H中
MOV B,#10 ;
DIV AB ;
MOV BAI_BIT,B ;百位存入32H中
MOV A,GAO_8BIT
MOV 37H,#10H ;
JB ACC.7,EXIT
MOV 37H,#00H
EXIT: RET           */  

DISPLAY:MOV DPTR,#TABLE
        MOV R0,#4
    XUN:MOV R1,#250 ;顯示1000次    
   HUAN:MOV A,#10   //顯示‘-’
     MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.0
  LCALL DELAY1MS
  SETB P3.0
    
  MOV A,#10   //顯示‘-’
  MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.1
  LCALL DELAY1MS
  SETB P3.1
    
  MOV A,BAI_BIT   //顯示溫度百位
     MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.2
  LCALL DELAY1MS
  SETB P3.2
  MOV A,SHI_BIT   //顯示溫度十位
     MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.3
  LCALL DELAY1MS
  SETB P3.3
  MOV A,GE_BIT   //顯示溫度個位
     MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.4
  LCALL DELAY1MS
  SETB P3.4
    
  MOV A,#11    //顯示'C'
     MOVC A,@A+DPTR
        MOV P1,A
  CLR P3.5
  LCALL DELAY1MS
  SETB P3.5
    
  MOV A,#10   //顯示‘-’
  MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.6
  LCALL DELAY1MS
  SETB P3.6
    
/* MOV A,#10   //顯示‘-’
  MOVC A,@A+DPTR
  MOV P1,A
  CLR P3.7
  LCALL DELAY1MS
  SETB P3.7  */
  DJNZ R1,HUAN ;250次沒完循環
     DJNZ R0,XUN ;4個250次沒完循環
   RET  
  
DELAY10MS:MOV R7,#1     //延時10MS子程序
       L1:NOP
    DJNZ R7,L1
DELAY1MS:RET    
    
TABLE:DB 3FH ;0
   DB 06H ;1
      DB 5BH ;2
   DB 4FH ;3
   DB 66H ;4
   DB 6DH ;5
   DB 7DH ;6
   DB 07H ;7
   DB 7FH ;8
   DB 6FH ;9
   DB 01000000B ;-
   DB 39H ;C    
END
 

關閉窗口
主站蜘蛛池模板: 手机在线一区二区三区 | 99久久夜色精品国产亚洲96 | 亚洲欧美激情精品一区二区 | 欧美成人专区 | 九九热在线视频 | 日韩三区| 欧美午夜视频 | 国产乱码精品一区二区三区忘忧草 | 无吗视频 | 精品自拍视频在线观看 | 欧美久久一区二区 | 红桃成人在线 | 9191av | 激情五月婷婷综合 | 欧美日韩在线视频观看 | 亚洲午夜在线 | 干干天天 | 欧美精品v国产精品v日韩精品 | 99久久精品一区二区成人 | 日本免费一区二区三区 | 国产乱码精品1区2区3区 | 亚洲午夜一区二区 | 99久久久99久久国产片鸭王 | 日韩视频中文字幕 | 欧美激情一区二区三级高清视频 | 国产一区二区三区在线看 | 亚洲国产精品日韩av不卡在线 | 7777精品伊人久久精品影视 | 欧美一区二区三区在线 | 中文字幕四虎 | 成人在线观看免费视频 | 日韩不卡在线 | 一区二区三区成人 | 精品在线观看一区二区 | 天天搞夜夜操 | 欧美一区二区三区视频在线 | 亚洲视频一区二区三区四区 | 亚洲精选久久 | 午夜精品久久久久久久久久久久久 | 一级中国毛片 | 日韩高清av|