找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8312|回复: 4
收起左侧

基于DS18B20的温度计设计-汇编语言

[复制链接]
ID:71259 发表于 2014-12-29 01:48 | 显示全部楼层 |阅读模式
最近用DS18B20编了个温度计,还是用那一块单片机学习板,个人认为最大的收获就是会看着时序图编程。其实看时序很简单,编过一次就会发现的。呵呵,不废话了。还是贴程序了。下面是温度计的程序,DS18B20本来是有报警系统的,现在删去,嘿嘿,那个不共享了。


DS18B20的复位、读写时序图:



看看效果图吧:
这个是室温


放上手指试试(呵呵!)





后记:这块板子马上就要交了,所以就赶出来了这段程序,不足之处望见谅。还是郑文老师的板子,呵呵,雷同是不可能了,自己写的,如果有人说我是网上拉的,那我也没什么好说,因为程序都是大同小异,关键是我有没有编过,至少答辩的话,我一定100分。【其实后面还有一段报警,不共享了(嘿嘿)】。
哎,全国赛没我们份了。大师、阿康,我们要暂时告别组合了。阿康的硬件一流,焊接功底很深厚,很多队伍都抢着要啊,呵呵,我吗一个只会编编程而且编的还不怎么样的小角色。不过小看我的人一般都会后悔,暑假有的忙了。多看看书吧,这个学年我们可以找借口说我们什么都不懂,但是下个学年就不一样了,因为我们什么都教过了,加油吧,努力吧!

据说很多电子专业的毕业生都拿我上面的东西叫做“毕业设计”,呵呵,我觉得很惊讶,那我不是可以毕业了?呵呵,说实话这个东西是很简单的。


  1. ;DS18B20接P1.2口
  2. flag    equ     20h.0
  3. templ   equ     30h         ;读取温度的高位
  4. temph   equ     31h         ;读取温度的低位
  5. temp    equ     32h         ;高低位的温度数据转换缓冲
  6. showh   equ     33h         ;显示高位的缓冲位
  7. showl   equ     34h         ;显示低位的缓冲位

  8. k1      equ     p3.2
  9. k2      equ     p3.3
  10. k3      equ     p3.4
  11. k4      equ     p3.5
  12.         org     0000h
  13.         ljmp    start0
  14.         org     0040h

  15. start0: lcall   rest
  16.         jnb     flag,start1
  17.         clr     ea
  18.         mov     a,#0cch
  19.         lcall    write_
  20.         mov     a,#44h
  21.         lcall    write_
  22.         lcall    rest
  23.         mov     a,#0cch
  24.         lcall    write_
  25.         mov     a,#0beh
  26.         lcall    write_
  27.         lcall    read_
  28.         lcall    convtemp_
  29.         lcall    show_
  30.         setb     ea
  31.         sjmp     start0
  32. start1: sjmp     start0
  33. ;====================================复位子程序
  34. rest:  setb    p1.2
  35.        nop
  36.        nop
  37.        clr     p1.2
  38.        mov     r7, #0
  39.        djnz    r7,$
  40.        setb    p1.2
  41.        nop
  42.        nop
  43.        mov     r6,#80
  44. rst0:  jnb     p1.2,rst2
  45.        jmp     rst1
  46. rst1:  djnz    r6,rst0
  47.        jmp     rst3
  48. rst2:  setb    flag
  49.        setb    p1.2
  50.        mov     r6,#0
  51.        djnz    r6,$
  52.        jmp     ret0
  53. rst3:  clr     flag
  54.        setb    p1.2
  55. ret0:   ret
  56. ;=====================================写程序
  57. write_: mov     r6,#8
  58.         clr     c
  59. writ0:  rrc     a
  60. writ1:  setb    p1.2
  61.         mov     r7,#8
  62.         nop
  63.         clr     p1.2
  64.         nop
  65.         djnz    r7,$
  66.         mov     p1.2,c
  67.         mov     r7,#20
  68.         djnz    r7,$
  69.         djnz    r6,writ0
  70.         setb    p1.2
  71.         ret
  72. ;======================================读程序
  73. read_:  mov     r0,#templ
  74.         mov     r3,#2
  75. read0:  mov     r5,#8
  76. read1:  mov     r4,#4
  77.         clr     c
  78.         setb    p1.2
  79.         nop
  80.         nop
  81.         clr     p1.2
  82.         nop
  83.         nop
  84.         nop
  85.         setb    p1.2
  86.         djnz    r4,$
  87.         mov     c,p1.2
  88.         rrc     a
  89.         mov     r4,#30
  90.         djnz    r4,$
  91.         djnz    r5,read1
  92.         setb    p1.2
  93.         mov     @r0,a
  94.         inc     r0
  95.         djnz    r3,read0
  96.         ret
  97. ;==========================温度处理,templ的第四位是小数
  98. 部分,舍去,temph的低四位和templ高四位是整数的16进制温度
  99. convtemp_:
  100.            mov    a,templ
  101.            anl    a,#0f0h
  102.            swap   a
  103.            mov    temp,a
  104.            mov    a,temph
  105.            anl    a,#0fh
  106.            swap   a
  107.            orl    a,temp

  108.            mov    b,#0ah
  109.            div    ab
  110.            mov    showh,a
  111.            mov    a,b
  112.            mov    showl,a
  113.            ret
  114. ;===================================显示子程序
  115. show_:  clr     p1.5
  116.         clr     p1.6
  117.         clr     p1.7
  118.         mov     a,showh
  119.         lcall   shw0
  120.         lcall   delay
  121.         setb    p1.5
  122.         setb    p1.6
  123.         setb    p1.7
  124.         mov     a,showl
  125.         lcall   shw0
  126.         lcall   delay
  127.         ret

  128. shw0:   mov     dptr,#led_data
  129.         movc    a,@a+dptr
  130.         mov     p0,a
  131.         ret
  132. ;=====================================延时子程序
  133. delay:  mov     r3,#4
  134.         mov     r1,#255
  135. del0:   djnz    r1,$                 ;延时2ms左右
  136.         djnz    r3,del0
  137.         ret
  138. ;=======================================段码
  139. led_data:       db      
  140. 0c0h,0f9h,0a4h,0b0h,099h,92h,82h,0f8h,80h,90h
复制代码



评分

参与人数 1黑币 +5 收起 理由
1424603412 + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:70769 发表于 2014-12-29 03:16 | 显示全部楼层
GOOD!!!
回复

使用道具 举报

ID:74571 发表于 2015-3-13 21:02 | 显示全部楼层
能不指导一下c语言多路报警程序
回复

使用道具 举报

ID:74784 发表于 2017-8-14 02:44 | 显示全部楼层
正需要
太好了
感谢楼主!
回复

使用道具 举报

ID:147840 发表于 2017-8-14 11:32 来自手机 | 显示全部楼层
可惜我们毕业设计也不能是这么菜的东西
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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