原创 自己做的一个温控

2007-12-16 22:56 2576 12 16 分类: EDA/ IP/ 设计与制造

小菜一个,用proteus作了一个温控 ,把图和原程序发上来了,高手顺便给俺指点一下吧,呵呵。温度精确到0.1,不检测负温度,工作在65-90度之间。呵呵


6b54e819-5d52-4fc6-b734-05c6a4f1eba4.jpg


 


我在做的时候遇到的一个最大的问题就是自己的存储空间分配,和堆栈搞错了,吸取教训了,给大家一个比较值得思考的问题吧,大家看到了那个电机了吧,如果电机开始转,那个显示就会闪,如果不转电机就不闪,大家考虑下哈,呵呵,想要源文件的留下邮箱哦。还有这里用共阴极数码管,下边用三极管驱动,如果不用三极管呢,出问题了,呵呵,单片机的吸入电流大约3ma 而数码管如果全亮有80ma的电流啊。小心了


;温度控制系统
;电信一班2005级
;樊朋
;按下开始键,开始工作,不按下任何键,显示当前温度。
;按下开始键之后,如果不按设置键,则以最高温度90 C为限,工作。
;如果按下设置键,则开始显示可以设置的温度,然后按下
;++++键,则开始调整温度,如果这时再次按下设置键,则开始工作。
;工作到,指定的温度值,之后停止工作,如果超过了,则,开启电机,
;散热,如果低于温度值,则关闭电机,同时,开始加热。
;*****************
;以下为定义的各个数据线和一个标志位
settemp    bit p1.0
addtemp    bit p1.1
run        bit p1.6
deheat     bit p1.7
dq         bit p3.7
dataxiao   bit p2.7
datage     bit p2.6
datashi    bit p2.5
databai    bit p2.4
flag       bit 00h
;*****************
;以下位为温度值存储的位置
templ     equ 30h
temph     equ 31h
tempxiao  equ 32h;温度值的小数
tempge    equ 33h
tempshi   equ 34h
tempbai   equ 35h;
tempint   equ 36h
tempgreat equ 37h
tempbelow equ 38h
;*****************
;要显示的温度存放的位置
dispbai   equ 39h;显示百位
dispshi   equ 3ah
dispge    equ 3bh
dispxiao  equ 3ch
dispaddr  equ 3dh;显示地址
;*****************
;以下为程序的开始
org 0000h
ajmp main
org 0003h
ajmp check
org 0030h
main:
     mov sp,#50h
     mov tempgreat,#91
     mov tempbelow,#89
     mov tempint,#65
     clr deheat
     clr run
     clr 01h;用作set键的标志
     setb ex0;允许外部中断
     setb ea;允许中断
     setb it0;下降沿中断


    xx:


     ;*********
     lcall gettemp


     ;*********
     lcall process


     ;*********
     lcall runxx
     ;***********


     ajmp xx
 ;***************
 ;以下为ds1822的一系列操作
 gettemp:
          lcall resetxx
          mov a,#0cch;跳过rom
          lcall write
          mov a,#44h;启动温度转换
          lcall write
          lcall display
          lcall resetxx
          mov a,#0cch
          lcall write
          mov a,#0beh
          lcall write
          lcall read
        ret
  resetxx:
        clr ea
        setb dq
        nop
        nop
        clr dq
        mov r7,#255
        djnz r7,$
        setb dq
        mov r7,#30
        djnz r7,$
        jnb dq,setflag
        clr flag
        ajmp next
    setflag:
             setb flag
    next:
        mov r7,#120
        djnz r7,$
        jnb flag,resetxx
        setb dq
 clr ie0
 setb ea
      ret
  write:clr ea;在ds1822操作期间不允许中断
        setb dq
        mov r6,#8
        clr c
    writing:
           clr dq
           mov r7,#5
           djnz r7,$
           rrc a
           mov dq,c
           mov r7,#30
           djnz r7,$
           setb dq
           nop
           djnz r6,writing
    clr ie0
    setb ea
         ret
  read:clr ea;;在ds1822操作期间不允许中断
       setb dq
       mov r0,#templ
       mov r6,#8
       mov r5,#2
       clr c
    reading:
         clr dq
         nop
         nop
         setb dq
         nop
         nop
         nop
         nop
         mov c,dq
         rrc a
         mov r7,#30
         djnz r7,$
         setb dq
         djnz r6,reading
         mov @r0,a
         inc r0
         mov r6,#8
         setb dq
         djnz r5,reading
  clr ie0
  setb ea
       ret
;*****************
;以下为显示的一系列操作
;影响a
 display:
         mov r4,#200
      disploop:
               mov a,dispxiao
               mov p2,#0ffh
               mov p0,a
               mov p2,#07fh
               lcall delay2ms
            
               mov a,dispge
               mov p2,#0ffh
               mov p0,a
               mov p2,#0bfh
               setb p0.7
               lcall delay2ms


               mov a,dispshi
               mov p2,#0ffh
               mov p0,a
               mov p2,#0dfh
               lcall delay2ms
         
               jb f0,dispfuhao
               mov a,dispbai
               ajmp zhenhao
       dispfuhao:
               mov a,#40h;先是负号
       zhenhao:
               mov p2,#0ffh
               mov p0,a
               mov p2,#0efh
               lcall delay2ms
               djnz r4,disploop
             ret
;*******************
;以下为数据处理部分
;影响r7,a,b,sp
process:
        mov r7,templ
        mov a,r7
        push acc
        anl a,#0fh
        mov tempxiao,a
        pop acc
        anl a,#0f0h
        swap a
        mov templ,a
        mov a,temph
   ;     push acc
   ;     jb acc.3,setf0
   ;    ajmp clrf0
   ;setf0:setb f0
         anl a,#0fh
         swap a
         orl a,templ
         jb acc.7,negative
         clr f0
         ajmp positive
    negative:
          setb f0
          cpl a
          add a,#1
    positive:
         mov tempint,a
   subprocess:
         mov a,tempint
         mov b,#100
         div ab
         mov tempbai,a
         xch a,b
         mov b,#10
         div ab
         mov tempshi,a
         mov tempge,b
        
         mov a,tempxiao
         mov dptr,#tablexiao
         movc a,@a+dptr
         mov  dptr,#tableinter
         movc a,@a+dptr
         mov dispxiao,a


         mov a,tempge
         mov dptr,#tableinter
         movc a,@a+dptr
         mov dispge,a


         mov a,tempshi
         mov dptr,#tableinter
         movc a,@a+dptr
         mov dispshi,a
        
         mov a,tempbai
         mov dptr,#tableinter
         movc a,@a+dptr
         mov dispbai,a
     ret 
;*****************
;检测是否有键按下
;影响sp,r4,
check:clr ea;关中断
      clr run
      clr deheat
      push acc;保护现场
      mov a,r4;
      push acc;
      clr p1.5;此处为看下是否进入中断
   x0:jb p1.0,x1;+++没有按下则继续检测
      call tempadd;按下键之后,温度加
      call subprocess
      mov r4,#2
      call disploop;因为人为的按键很慢,所以在这里延迟一下,以免直接跳到x1处跳出
      ;
      ;mov a,r4
      ;push acc
    x1:mov r4,#50
       call disploop;调用显示
       jnb p3.2,x2
      ;pop acc
      ;mov r4,a
      ;
      ajmp x0
    x2:
       ;mov r4,#3
       ;call disploop;因为人为的按键很慢,所以在这里延迟一下,以免又引起中断
       ; setb run;重新开始加热
       pop acc
       mov r4,a
       pop acc
       clr ie0
       setb ea
       setb p1.5;看下是否出中断
       reti
 ;****************
 ;加温度值
 ;影响a
 tempadd:push acc;保护现场
         mov a,tempint
         add a,#1
         push acc
         subb a,#90
         jc x3
         mov tempint,#65
  pop acc
         ajmp x4
      x3:clr c
         pop acc
  mov tempint,a
         subb a,#65
         jnc x4
         mov tempint,#65
         mov a,tempint
         subb a,#2
         mov tempbelow,a
         add a,#4
         mov tempgreat,a
  ret
       x4:
         mov a,tempint
         subb a,#2
         mov tempbelow,a
         add a,#4
         mov tempgreat,a
  pop acc
         ret
;****************
;运行风扇或加热
;此程序影响a
  runxx:clr c
      mov a,tempint
      subb a,tempgreat
      jc x5
      setb deheat;电机转散热
      ;lcall display
      clr run
      ret
    x5:
      clr c
      mov a,tempint
      subb a,tempbelow
      jnc x6
      clr deheat
      setb run
      ret
    x6:clr deheat
       clr run
   ret
 ;此程序影响r5,r6         
 DELAY2MS:
 MOV R6, #3
 LOOP3: MOV R5, #200
 DJNZ R5, $
 DJNZ R6, LOOP3
 RET
;******************
;表格数据
 tablexiao:
 DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
 DB 06H,07H,08H,08H,09H,09H


tableinter:
 DB 03FH,006H,05BH,04FH,066H
 DB 06DH,07DH,07H,07FH,06FH
end     

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

用户174314 2009-5-6 10:46

用汇编好复杂啊 觉得用C会好一些

用户1451188 2007-12-19 23:23

呵呵 大虾来看我的窝窝 高兴哈  Q1 Q2你看错了 P26 P28  呵呵 还有DS1822 DS18B20差不多。谢谢指点。

光藕 我不是很懂 请教

wang1jin 2007-12-19 15:37

看了下硬件.怎么Q1 Q2同时接在P26

用了光耦为什么还要共地...

温度IC没用过这型号...是不是18B20

另外用51的最好用PNP管驱动效果会比较好.

HE HE...

用户1451188 2007-12-16 23:09

有点晕,这图晕死,这么大。
相关推荐阅读
用户1451188 2008-05-17 00:22
远行
总想要找那种歇死里底的感觉,想要大声呼喊,好久好久没有了这种感觉。要远行了,想一个人走在马路,低头,掏着口袋,听着音乐;想一个人去看海,坐在沙滩,点一只红塔,想着曾经的曾经;想一个人呆在自习室,拿着书...
用户1451188 2008-04-20 00:10
喜欢你
喜欢你,是因为那种淡淡的感觉,让我无拘无束喜欢你,是因为你那细心的问候,让我感到幸福感觉超越了现实,我生活在虚拟的世界曾经,我坠入谷底,曾经,我绝望哭泣,曾经,我想要逃离,而我还是留了下来。我不喜欢长...
用户1451188 2008-04-19 23:38
脚步。。
自己最近喜欢上了看英文的资料 今上午看了下flash的文件系统手册 flash file system ,有感觉。看了一下午加上一晚上的arm启动代码总算明白了一点,感觉 。因为没有板子,只是看别人的...
用户1451188 2008-04-14 23:08
脚步。
今天没有解决的问题:二值信号量和互斥信号量的具体区别,明天再看下ucos的代码,还有递归互锁,不太明白这是怎么回事,看嵌入式系统实时概念的时候遇到的。还有地址重映射的问题。  今天看电路设计的时候,收...
用户1451188 2008-04-12 17:41
假如时间停滞
有段时间没来了,今天上午听了山大老师做的报告,从信号处理到智能信号处理,老师真不一般。有点小崇拜这位老师了,年龄大可依旧风度翩翩,给人感觉很年轻。偏题了,呵呵。时间好快,真希望可以回到过去,在重新梳理...
用户1451188 2008-03-15 18:30
一个人 默默的走
高手来到的话给俺支支招吧 ,留下阁下的邮箱  谢咯好长时间没有写点东西了,没什么技术性的文章,只是自己学习的心情.今天上午 看了会ucos的存储管理,终于感觉到指针的强大了,也许是我笨,当看过几遍终于...
我要评论
4
12
关闭 站长推荐上一条 /3 下一条