找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1801|回复: 0
收起左侧

8通道自动温度检测系统 含单片机汇编程序

[复制链接]
ID:358041 发表于 2018-6-24 21:49 | 显示全部楼层 |阅读模式
单片机8通道自动温度检测系统仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.jpg

单片机源程序如下:
  1.      CLR P3.7
  2. MAIN:MOV 38H,#00H
  3.      MOV 39H,#00H
  4.      MOV 3AH,#00H
  5.      MOV 3BH,#00H
  6.      LCALL   GET_TEMPER
  7.      LCALL   TEMPRRO
  8.      MOV P2,#06H
  9.      LCALL PRO
  10. ;------------------------------------------------------

  11.      MOV 38H,#00H
  12.      MOV 39H,#00H
  13.      MOV 3AH,#00H
  14.      MOV 3BH,#00H
  15.      LCALL   GET_TEMPER2
  16.      LCALL   TEMPRRO
  17.      MOV P2,#5BH
  18.      LCALL PRO
  19. ;------------------------------------------------------

  20.      MOV 38H,#00H
  21.      MOV 39H,#00H
  22.      MOV 3AH,#00H
  23.      MOV 3BH,#00H
  24.      LCALL   GET_TEMPER3
  25.      LCALL   TEMPRRO
  26.      MOV P2,#4FH
  27.      LCALL PRO

  28. ;------------------------------------------------------

  29.      MOV 38H,#00H
  30.      MOV 39H,#00H
  31.      MOV 3AH,#00H
  32.      MOV 3BH,#00H
  33.      LCALL   GET_TEMPER4
  34.      LCALL   TEMPRRO
  35.      MOV P2,#66H
  36.      LCALL PRO
  37. ;------------------------------------------------------

  38.      MOV 38H,#00H
  39.      MOV 39H,#00H
  40.      MOV 3AH,#00H
  41.      MOV 3BH,#00H
  42.      LCALL   GET_TEMPER5
  43.      LCALL   TEMPRRO
  44.      MOV P2,#6DH
  45.      LCALL PRO
  46. ;------------------------------------------------------

  47.      MOV 38H,#00H
  48.      MOV 39H,#00H
  49.      MOV 3AH,#00H
  50.      MOV 3BH,#00H
  51.      LCALL   GET_TEMPER6
  52.      LCALL   TEMPRRO
  53.      MOV P2,#7DH
  54.      LCALL PRO
  55. ;------------------------------------------------------

  56.      MOV 38H,#00H
  57.      MOV 39H,#00H
  58.      MOV 3AH,#00H
  59.      MOV 3BH,#00H
  60.      LCALL   GET_TEMPER7
  61.      LCALL   TEMPRRO
  62.      MOV P2,#07H
  63.      LCALL PRO
  64. ;------------------------------------------------------

  65.      MOV 38H,#00H
  66.      MOV 39H,#00H
  67.      MOV 3AH,#00H
  68.      MOV 3BH,#00H
  69.      LCALL   GET_TEMPER8
  70.      LCALL   TEMPRRO
  71.      MOV P2,#7FH
  72.      LCALL PRO
  73.       LJMP  MAIN
  74.    


  75. ;==============================================CHL1
  76. GET_TEMPER:
  77.           SETB      P1.0H ; 定时入口
  78. BCD:      LCALL     INIT_1820
  79.           JB        00H,S22
  80.           LJMP      BCD ; 若DS18B20不存在则返回

  81. S22:     LCALL     DELAY1
  82.          MOV        A,#0CCH ; 跳过ROM匹配------0CC命令
  83.          LCALL     WRITE_1820
  84. MOV A,#44H ; 发出温度转换命令
  85. LCALL WRITE_1820
  86. NOP
  87. LCALL DELAY1
  88. CBA:LCALL INIT_1820
  89. JB 00H,ABC
  90. LJMP CBA
  91. ABC:LCALL DELAY1
  92. MOV A,#0CCH ; 跳过ROM匹配
  93. LCALL WRITE_1820
  94. MOV A,#0BEH ; 发出读温度命令
  95. LCALL WRITE_1820
  96. LCALL READ_18200 ;READ_1820
  97. RET
  98. ;==============================
  99. READ_1820:
  100. MOV R2,#8
  101. RE1:
  102. CLR C
  103. SETB P1.0H
  104. NOP
  105. NOP
  106. CLR P1.0H
  107. NOP
  108. NOP
  109. NOP
  110. SETB P1.0H
  111. MOV R3,#7
  112. DJNZ R3,$
  113. MOV C,P1.0H
  114. MOV R3,#23
  115. DJNZ R3,$
  116. RRC A
  117. DJNZ R2,RE1
  118. RET
  119. ;=============================
  120. WRITE_1820:
  121. MOV R2,#8
  122. CLR C
  123. WR1:
  124. CLR P1.0H
  125. MOV R3,#6
  126. DJNZ R3,$
  127. RRC A
  128. MOV P1.0H,C
  129. MOV R3,#23
  130. DJNZ R3,$
  131. SETB P1.0H
  132. NOP
  133. DJNZ R2,WR1
  134. SETB P1.0H
  135. RET
  136. ;=======================================
  137. READ_18200:
  138. MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
  139. MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
  140. RE00:
  141. MOV R2,#8
  142. RE01:
  143. CLR C
  144. SETB P1.0H
  145. NOP
  146. NOP
  147. CLR P1.0H
  148. NOP
  149. NOP
  150. NOP
  151. SETB P1.0H
  152. MOV R3,#7
  153. DJNZ R3,$
  154. MOV C,P1.0H
  155. MOV R3,#23
  156. DJNZ R3,$
  157. RRC A
  158. DJNZ R2,RE01
  159. MOV @R1,A
  160. DEC R1
  161. DJNZ R4,RE00
  162. RET
  163. ;=======================================
  164. INIT_1820:
  165. SETB P1.0H
  166. NOP
  167. CLR P1.0H
  168. MOV R0,#250
  169. TSR1:
  170. DJNZ R0,TSR1 ; 延时520us
  171. SETB P1.0H
  172. MOV R0,#25H ;96US-25H
  173. TSR2:
  174. DJNZ R0,TSR2
  175. JNB P1.0H,TSR3;如D0为低则复位成功,DS18B20存在
  176. LJMP TSR4 ; 延时
  177. TSR3:
  178. SETB 00H ; 置标志位,表示DS1820存在
  179. LJMP TSR5
  180. TSR4:
  181. CLR 00H ; 清标志位,表示DS1820不存在
  182. LJMP TSR7
  183. TSR5:
  184. MOV R0,#06BH ;200US
  185. TSR6:
  186. DJNZ R0,TSR6 ; 延时
  187. TSR7:
  188. SETB P1.0H ;拉高总线
  189. RET
  190. ;===============================
  191. GET_TEMPER2:
  192.           SETB      P1.1H ; 定时入口
  193. BCD2:      LCALL     INIT_18202
  194.           JB        00H,S222
  195.           LJMP      BCD2 ; 若DS18B20不存在则返回

  196. S222:     LCALL     DELAY1
  197.          MOV        A,#0CCH ; 跳过ROM匹配------0CC命令
  198.          LCALL     WRITE_18202
  199. MOV A,#44H ; 发出温度转换命令
  200. LCALL WRITE_18202
  201. NOP
  202. LCALL DELAY1
  203. CBA2:LCALL INIT_18202
  204. JB 00H,ABC2
  205. LJMP CBA2
  206. ABC2:LCALL DELAY1
  207. MOV A,#0CCH ; 跳过ROM匹配
  208. LCALL WRITE_18202
  209. MOV A,#0BEH ; 发出读温度命令
  210. LCALL WRITE_18202
  211. LCALL READ_182002 ;READ_1820
  212. RET
  213. ;==============================
  214. READ_18202:
  215. MOV R2,#8
  216. RE12:
  217. CLR C
  218. SETB P1.1H
  219. NOP
  220. NOP
  221. CLR P1.1H
  222. NOP
  223. NOP
  224. NOP
  225. SETB P1.1H
  226. MOV R3,#7
  227. DJNZ R3,$
  228. MOV C,P1.1H
  229. MOV R3,#23
  230. DJNZ R3,$
  231. RRC A
  232. DJNZ R2,RE12
  233. RET
  234. ;=============================
  235. WRITE_18202:
  236. MOV R2,#8
  237. CLR C
  238. WR12:
  239. CLR P1.1H
  240. MOV R3,#6
  241. DJNZ R3,$
  242. RRC A
  243. MOV P1.1H,C
  244. MOV R3,#23
  245. DJNZ R3,$
  246. SETB P1.1H
  247. NOP
  248. DJNZ R2,WR12
  249. SETB P1.1H
  250. RET
  251. ;=======================================
  252. READ_182002:
  253. MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
  254. MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
  255. RE002:
  256. MOV R2,#8
  257. RE012:
  258. CLR C
  259. SETB P1.1H
  260. NOP
  261. NOP
  262. CLR P1.1H
  263. NOP
  264. NOP
  265. NOP
  266. SETB P1.1H
  267. MOV R3,#7
  268. DJNZ R3,$
  269. MOV C,P1.1H
  270. MOV R3,#23
  271. DJNZ R3,$
  272. RRC A
  273. DJNZ R2,RE012
  274. MOV @R1,A
  275. DEC R1
  276. DJNZ R4,RE002
  277. RET
  278. ;=======================================
  279. INIT_18202:
  280. SETB P1.1H
  281. NOP
  282. CLR P1.1H
  283. MOV R0,#250
  284. TSR12:
  285. DJNZ R0,TSR12 ; 延时520us
  286. SETB P1.1H
  287. MOV R0,#25H ;96US-25H
  288. TSR22:
  289. DJNZ R0,TSR22
  290. JNB P1.1H,TSR32;如D0为低则复位成功,DS18B20存在
  291. LJMP TSR42 ; 延时
  292. TSR32:
  293. SETB 00H ; 置标志位,表示DS1820存在
  294. LJMP TSR52
  295. TSR42:
  296. CLR 00H ; 清标志位,表示DS1820不存在
  297. LJMP TSR72
  298. TSR52:
  299. MOV R0,#06BH ;200US
  300. TSR62:
  301. DJNZ R0,TSR62 ; 延时
  302. TSR72:
  303. SETB P1.1H ;拉高总线
  304. RET
  305. ;===============================
  306. GET_TEMPER3:
  307.           SETB      P1.2H ; 定时入口
  308. BCD3:      LCALL     INIT_18203
  309.           JB        00H,S223
  310.           LJMP      BCD3 ; 若DS18B20不存在则返回

  311. S223:     LCALL     DELAY1
  312.          MOV        A,#0CCH ; 跳过ROM匹配------0CC命令
  313.          LCALL     WRITE_18203
  314. MOV A,#44H ; 发出温度转换命令
  315. LCALL WRITE_18203
  316. NOP
  317. LCALL DELAY1
  318. CBA3:LCALL INIT_18203
  319. JB 00H,ABC3
  320. LJMP CBA3
  321. ABC3:LCALL DELAY1
  322. MOV A,#0CCH ; 跳过ROM匹配
  323. LCALL WRITE_18203
  324. MOV A,#0BEH ; 发出读温度命令
  325. LCALL WRITE_18203
  326. LCALL READ_182003 ;READ_1820
  327. RET
  328. …………
  329. …………
  330. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
DS18B20.rar (59.8 KB, 下载次数: 10)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表