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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3188|回復: 0
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:70976 發表于 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. ;單片機內存分配申明!
  30. ;=================================================================================
  31. TEMPER_L  EQU     29H;用于保存讀出溫度的低8位
  32. TEMPER_H EQU     28H;用于保存讀出溫度的高8位
  33. FLAG1    EQU     22H.0H;是否檢測到DS18B20標志位
  34. a_bit    EQU     20H;數碼管個位數存放內存位置
  35. b_bit    EQU     21H;數碼管十位數存放內存位置
  36. c_bit  EQU 23H;數碼管小數點個分位
  37. d_bit  EQU 24H;數碼管小數點十分位
  38. ORG  0000H
  39. JMP MAIN
  40. ORG 0030H
  41. MAIN:
  42.        LCALL   GET_TEMPER;調用讀溫度子程序
  43. ;=================================================================================
  44. ;進行溫度顯示
  45. ;顯示范圍00到99度,顯示精度為1度
  46. ;因為12位轉化時每一位的精度為0.0625度,我們不要求顯示小數所以可以拋棄29H的低4位
  47. ;將28H中的低4位移入29H中的高4位,這樣獲得一個新字節,這個字節就是實際測量獲得的溫度
  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;調用數碼管顯示子程序
  76.         AJMP    MAIN
  77. ;=================================================================================
  78. ; 這是DS18B20復位初始化子程序
  79. ;=================================================================================
  80. INIT_1820:
  81.         SETB    P3.5
  82.         NOP
  83.         CLR     P3.5
  84. ;主機發出延時537微秒的復位低脈沖
  85.         MOV     R1,#3
  86. TSR1:   
  87.         MOV     R0,#107
  88.        DJNZ    R0,$
  89.         DJNZ    R1,TSR1
  90.         SETB    P3.5;然后拉高數據線
  91.         NOP
  92.         NOP
  93.         NOP
  94.         MOV     R0,#25H
  95. TSR2:
  96.         JNB     P3.5,TSR3;等待DS18B20回應
  97.         DJNZ    R0,TSR2
  98.         LJMP    TSR4 ; 延時
  99. TSR3:
  100.         SETB    FLAG1 ; 置標志位,表示DS1820存在
  101.         LJMP    TSR5
  102. TSR4:
  103.         CLR     FLAG1 ; 清標志位,表示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. ; 讀出轉換后的溫度值
  114. ;=================================================================================
  115. GET_TEMPER:
  116.         SETB  P3.5
  117.        LCALL   INIT_1820;先復位DS18B20
  118.         JNB      FLAG1,OUT ; 判斷DS1820是否存在?若DS18B20不存在則返回
  119. MOV  A,#0CCH ; 跳過ROM匹配
  120. LCALL  WRITE_1820
  121. MOV  A,#44H ; 發出溫度轉換命令
  122. LCALL   WRITE_1820;這里通過調用顯示子程序實現延時一段時間,等待AD轉換結束,12位的話750微秒
  123. LCALL  DISPLAY
  124.   LCALL  INIT_1820;準備讀溫度前先復位
  125. MOV  A,#0CCH ; 跳過ROM匹配
  126. LCALL   WRITE_1820
  127. MOV  A,#0BEH ; 發出讀溫度命令
  128. LCALL  WRITE_1820
  129. LCALL  READ_18200; 將讀出的溫度數據保存到35H/36H
  130. OUT:
  131. RET
  132. ;=================================================================================
  133. ;寫DS18B20的子程序(有具體的時序要求)
  134. ;=================================================================================
  135. WRITE_1820:
  136.         MOV  R2,#8;一共8位數據
  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中讀出兩個字節的溫度數據
  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;數據一共有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中的十六進制數轉換成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 ;取個位數
  202.         MOVC    A,@A+DPTR ;查個位數的7段代碼
  203.         MOV     P0,A ;送出個位的7段代碼
  204.         CLR     P2.2 ;開個位顯示
  205.         ACALL   D1MS ;顯示1ms
  206. SETB    P2.2
  207.         MOV     A,b_bit ;取十位數
  208. MOV DPTR,#TAB
  209. MOVC    A,@A+DPTR ;查十位數的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次沒完循環
  228. DJNZ    R0,Dpl1 ;4個250次沒完循環
  229. RET
  230. ;=================================================================================
  231. ;1MS延時(按12MHZ算)
  232. ;=================================================================================
  233. D1MS:
  234.       MOV  R7,#80
  235.      DJNZ  R7,$
  236. RET
  237. ;=================================================================================
  238. ;實驗板上的7段數碼管0~9數字的共陽顯示代碼
  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
復制代碼



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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 特黄毛片 | 91免费看片 | 国产精品视频500部 a久久 | 亚洲精品色 | 一区二区三区福利视频 | 99爱在线视频 | 亚洲一区二区在线视频 | 久久久网| www.日日干 | 欧美视频福利 | 久久久91 | 麻豆成人在线视频 | 欧美一区二区视频 | 日韩免费视频一区二区 | 亚州综合在线 | 色婷婷综合久久久久中文一区二区 | 亭亭五月激情 | 天堂影院av | 91成人免费看片 | 男人天堂av网站 | 在线看免费 | 免费一级欧美在线观看视频 | 一区观看 | 国产精品伦理一区 | 欧美日韩久久精品 | 久久成人免费视频 | 91久久久久久久久久久 | 观看av| 韩日免费视频 | 综合久久综合久久 | av黄色在线播放 | 亚洲一区二区三区免费 | 精品一级| 日本免费一区二区三区 | 81精品国产乱码久久久久久 | 午夜欧美| 日韩成人中文字幕 | 亚洲成av人片在线观看无码 | 亚洲国产精品视频 | 国产99免费视频 | 欧美日韩最新 |