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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于18B20溫度檢測程序精確0.25度

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:70976 發(fā)表于 2014-12-27 16:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. ;=================================================================================
  2. ;Filename:DS18B20.asm                                           ;
  3. ;Program function: temperature testing                           ;
  4. ;           version: v1.0                           ;
  5. ;     date: 2009-9-03 11;49                            ;
  6. ;           Author: 蘭建文                                       ;
  7. ;           Company: YUANDIAN                                    ;
  8. ;=================================================================================
  9. ;MCU type:AT89S52                                           ;
  10. ;FOSC: ERC,HF,XT,LF,TMR0 Mode                              ;
  11. ;WDTEN: DISABLE                                             ;
  12. ;PROTECT:YES                                                ;
  13. ;LVDTEN:ENABLE   LVD=1.8V                                   ;
  14. ;OSCD:  12 oscillator periods                               ;
  15. ;PMCD:  No_Power saving                                     ;
  16. ;SET freq:12MHz                                             ;
  17. ;Fosc=XT 1MHz(2T)=0.50us                                    ;
  18. ;Time:T=(65536-M)*Pre*Tm/Osc               ;
  19. ;Tm:Oscillater periods=12,Pre(TCC=1:x)                      ;                     
  20. ;PAPH: Disable                                             ;
  21. ;PBPH: Enable                                              ;
  22. ;VDD:  extv=5V                                             ;
  23. ;CHECKSUM:   CONFIG:   ,CONFIG1:                            ;
  24. ;ROM size:       RAM size:        ;
  25. ;=================================================================================
  26. ;     Register Definitions
  27. ;-----------Define system register---------------------------
  28. ;=================================================================================
  29. ;單片機內(nèi)存分配申明!
  30. ;=================================================================================
  31. TEMPER_L  EQU     29H;用于保存讀出溫度的低8位
  32. TEMPER_H EQU     28H;用于保存讀出溫度的高8位
  33. FLAG1    EQU     22H.0H;是否檢測到DS18B20標(biāo)志位
  34. a_bit    EQU     20H;數(shù)碼管個位數(shù)存放內(nèi)存位置
  35. b_bit    EQU     21H;數(shù)碼管十位數(shù)存放內(nèi)存位置
  36. c_bit  EQU 23H;數(shù)碼管小數(shù)點個分位
  37. d_bit  EQU 24H;數(shù)碼管小數(shù)點十分位
  38. ORG  0000H
  39. JMP MAIN
  40. ORG 0030H
  41. MAIN:
  42.        LCALL   GET_TEMPER;調(diào)用讀溫度子程序
  43. ;=================================================================================
  44. ;進行溫度顯示
  45. ;顯示范圍00到99度,顯示精度為1度
  46. ;因為12位轉(zhuǎn)化時每一位的精度為0.0625度,我們不要求顯示小數(shù)所以可以拋棄29H的低4位
  47. ;將28H中的低4位移入29H中的高4位,這樣獲得一個新字節(jié),這個字節(jié)就是實際測量獲得的溫度
  48. ;=================================================================================
  49. MOV 27H,29H
  50. MOV     A,29H
  51.         MOV     C,28H.0;將28H中的最低位移入C
  52.         RRC     A
  53.         MOV     C,28H.1
  54.         RRC     A
  55.         MOV     C,28H.2
  56.         RRC     A
  57.         MOV     C,28H.3
  58.         RRC     A
  59.         MOV     29H,A
  60. MOV A,27H
  61. RR A
  62. RR      A
  63. ANL A,#03H
  64. CJNE A,#3,LAN1
  65. MOV 27H,#75
  66. AJMP XIANSHI
  67. LAN1: CJNE A,#2,LAN2
  68. MOV 27H,#50
  69. AJMP XIANSHI
  70. LAN2: CJNE A,#1,LAN3
  71. MOV 27H,#25
  72. AJMP XIANSHI
  73. LAN3: CJNE A,#0,MAIN
  74. MOV 27H,#00
  75. XIANSHI:LCALL   DISPLAY;調(diào)用數(shù)碼管顯示子程序
  76.         AJMP    MAIN
  77. ;=================================================================================
  78. ; 這是DS18B20復(fù)位初始化子程序
  79. ;=================================================================================
  80. INIT_1820:
  81.         SETB    P3.5
  82.         NOP
  83.         CLR     P3.5
  84. ;主機發(fā)出延時537微秒的復(fù)位低脈沖
  85.         MOV     R1,#3
  86. TSR1:   
  87.         MOV     R0,#107
  88.        DJNZ    R0,$
  89.         DJNZ    R1,TSR1
  90.         SETB    P3.5;然后拉高數(shù)據(jù)線
  91.         NOP
  92.         NOP
  93.         NOP
  94.         MOV     R0,#25H
  95. TSR2:
  96.         JNB     P3.5,TSR3;等待DS18B20回應(yīng)
  97.         DJNZ    R0,TSR2
  98.         LJMP    TSR4 ; 延時
  99. TSR3:
  100.         SETB    FLAG1 ; 置標(biāo)志位,表示DS1820存在
  101.         LJMP    TSR5
  102. TSR4:
  103.         CLR     FLAG1 ; 清標(biāo)志位,表示DS1820不存在
  104.         LJMP    TSR7
  105. TSR5:
  106.         MOV     R0,#117
  107. TSR6:
  108.         DJNZ    R0,TSR6 ; 時序要求延時一段時間
  109. TSR7:
  110. SETB    P3.5
  111. RET
  112. ;=================================================================================
  113. ; 讀出轉(zhuǎn)換后的溫度值
  114. ;=================================================================================
  115. GET_TEMPER:
  116.         SETB  P3.5
  117.        LCALL   INIT_1820;先復(fù)位DS18B20
  118.         JNB      FLAG1,OUT ; 判斷DS1820是否存在?若DS18B20不存在則返回
  119. MOV  A,#0CCH ; 跳過ROM匹配
  120. LCALL  WRITE_1820
  121. MOV  A,#44H ; 發(fā)出溫度轉(zhuǎn)換命令
  122. LCALL   WRITE_1820;這里通過調(diào)用顯示子程序?qū)崿F(xiàn)延時一段時間,等待AD轉(zhuǎn)換結(jié)束,12位的話750微秒
  123. LCALL  DISPLAY
  124.   LCALL  INIT_1820;準(zhǔn)備讀溫度前先復(fù)位
  125. MOV  A,#0CCH ; 跳過ROM匹配
  126. LCALL   WRITE_1820
  127. MOV  A,#0BEH ; 發(fā)出讀溫度命令
  128. LCALL  WRITE_1820
  129. LCALL  READ_18200; 將讀出的溫度數(shù)據(jù)保存到35H/36H
  130. OUT:
  131. RET
  132. ;=================================================================================
  133. ;寫DS18B20的子程序(有具體的時序要求)
  134. ;=================================================================================
  135. WRITE_1820:
  136.         MOV  R2,#8;一共8位數(shù)據(jù)
  137.         CLR   C
  138. WR1:
  139. CLR  P3.5
  140. MOV  R3,#6
  141. DJNZ  R3,$
  142. RRC  A
  143. MOV  P3.5,C
  144. MOV  R3,#23
  145. DJNZ  R3,$
  146. SETB  P3.5
  147. NOP
  148. DJNZ  R2,WR1
  149. SETB  P3.5
  150. RET
  151. ;=================================================================================
  152. ; 讀DS18B20的程序,從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù)
  153. ;=================================================================================
  154. READ_18200:
  155. MOV  R4,#2 ; 將溫度高位和低位從DS18B20中讀出
  156. MOV  R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
  157. RE00:
  158. MOV  R2,#8;數(shù)據(jù)一共有8位
  159. RE01:
  160. CLR  C
  161. SETB  P3.5
  162. NOP
  163. NOP
  164.   CLR  P3.5
  165. NOP
  166. NOP
  167. NOP
  168. SETB  P3.5
  169. MOV  R3,#9
  170. RE10:
  171. DJNZ  R3,RE10
  172. MOV  C,P3.5
  173. MOV  R3,#23
  174. RE20:
  175. DJNZ  R3,RE20
  176. RRC  A
  177. DJNZ  R2,RE01
  178. MOV  @R1,A
  179. DEC  R1
  180. DJNZ  R4,RE00
  181. RET
  182. ;=================================================================================
  183. ;顯示子程序
  184. ;=================================================================================
  185. DISPLAY:
  186. MOV     A,29H;將29H中的十六進制數(shù)轉(zhuǎn)換成10進制
  187. MOV     B,#10 ;10進制/10=10進制
  188. DIV     AB
  189. MOV     b_bit,A ;十位在a
  190. MOV     a_bit,B ;個位在b
  191. MOV A,27H
  192. MOV B,#10
  193. DIV AB
  194. MOV c_bit,A
  195. MOV d_bit,B
  196. MOV     R0,#4
  197. Dpl1:
  198.         MOV     R1,#250 ;顯示1000次
  199. DPLOP:
  200.         MOV     DPTR,#TAB1 ;指定查表啟始地址
  201. MOV     A,a_bit ;取個位數(shù)
  202.         MOVC    A,@A+DPTR ;查個位數(shù)的7段代碼
  203.         MOV     P0,A ;送出個位的7段代碼
  204.         CLR     P2.2 ;開個位顯示
  205.         ACALL   D1MS ;顯示1ms
  206. SETB    P2.2
  207.         MOV     A,b_bit ;取十位數(shù)
  208. MOV DPTR,#TAB
  209. MOVC    A,@A+DPTR ;查十位數(shù)的7段代碼
  210. MOV     P0,A ;送出十位的7段代碼
  211. CLR     P2.3 ;開十位顯示
  212. ACALL   D1MS ;顯示1ms
  213. SETB    P2.3
  214. MOV DPTR,#TAB
  215. MOV A,c_bit
  216. MOVC A,@A+DPTR
  217. MOV P0,A
  218. CLR P2.1
  219. ACALL D1MS
  220. SETB P2.1
  221. MOV A,d_bit
  222. MOVC A,@A+DPTR
  223. MOV P0,A
  224. CLR P2.0
  225. ACALL D1MS
  226. SETB P2.0
  227. DJNZ    R1,DPLOP ;250次沒完循環(huán)
  228. DJNZ    R0,Dpl1 ;4個250次沒完循環(huán)
  229. RET
  230. ;=================================================================================
  231. ;1MS延時(按12MHZ算)
  232. ;=================================================================================
  233. D1MS:
  234.       MOV  R7,#80
  235.      DJNZ  R7,$
  236. RET
  237. ;=================================================================================
  238. ;實驗板上的7段數(shù)碼管0~9數(shù)字的共陽顯示代碼
  239. ;=================================================================================
  240. TAB:
  241. DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
  242. TAB1:
  243. DB 080H,079H,024H,030H,19H,12H,02H,078H,00H,10H
  244. END
復(fù)制代碼



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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产91在线 | 欧美 | 亚洲精品18 | 国产精品日产欧美久久久久 | 日韩三级视频 | 国产精品不卡 | 国产美女在线免费观看 | 一区二区三区精品视频 | 日韩高清一区 | 国产精品久久国产精品久久 | 黄片毛片| 欧美国产日韩精品 | 婷婷综合色| 羞羞的视频在线看 | 日韩欧美一级精品久久 | 日日夜夜av| 久久蜜桃av一区二区天堂 | 国产成人99久久亚洲综合精品 | 日韩在线欧美 | 国产一区二 | 韩日一区二区 | 在线日韩视频 | www.99re| 在线播放国产一区二区三区 | 日韩不卡一区二区三区 | 亚洲一区二区精品视频 | 久久久久无码国产精品一区 | 美国av片在线观看 | 色婷婷av一区二区三区软件 | 国产粉嫩尤物极品99综合精品 | 久久99精品视频 | 欧美欧美欧美 | av在线一区二区 | 国产成人av在线 | 久久伊人精品一区二区三区 | 一区二区免费看 | 国产精久久久久久 | 伊人精品一区二区三区 | 在线一级片 | 狠狠天天 | 在线免费观看日本 | 欧美一级在线 |