您的位置:首页单片机51单片机
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

水泵定时控制实验

[日期:2008-04-15 ] [来源:网络 作者:佚名] [字体: (投递新闻)
 现代自动控制设备中,都存在一个电子电路与电气电路的互相连接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(电动机,电磁铁,电灯等),另一方面又要为电子线路的电气电路提供良好的电隔离,以保护电子电路和人身的安全。电子继电器便能完成这一桥梁作用。

特别提醒:
    实验时请尽量不要去控制220V及以上电压级别的设备,因这个学习套件是面向学习,而不是面向工业控制的.如果您一定要接220V及以上电压的设备请在实验过程中注意安全,继电输出部份采用了光电隔离,如果正确接线,不会损坏套件的主板。

程序功能:
    运行时,继电器闭合十秒,断开十秒,间断的运行.数码管显示倒计时的时间.计时时间可通过按键设定.

引脚说明:
    p3.5启动,p3.4加一,p3.3退出设置,p3.2设置
    p1.0为电源指示灯
    p1.1,jk1指示灯,p1.2,jk2指示灯
    p1.4,调整记数指示灯,p1.5,延时调整指示灯
    p2.7输出控制水泵电机

水泵定时控制实验程序如下:   
      org     00h
      ljmp    main          ;主程序入口
      org     03h
      ljmp    int00         ;中断0入口
      org     0bh
      ljmp    disp          ;定时中断0入口
      org     13h
      reti
      org     1bh
      org     23h
      reti
      org     30h
main: mov      30h,#10h     ; 显示缓冲区
      mov      31h,#10h     ;(buf)
      mov      32h,#10h     ; 备份
      mov      34h,#50      ;  记时
      mov      p2,#0ffh
      mov      p3,#0ffh
      mov      p1,#0feh     ; 指示灯亮
      mov      sp,#68h
      mov      tmod,#01h    ;定时器0,方式1
      setb     it0          ;下降沿有效
      mov      ie,#83h      ;允许定时器0,中断0
      mov      th0,#0f8h
      mov      tl0,#0d0h
      setb     tr0
      jb       p3.5,$       ;未按下,则等待
      jnb      p3.5,$       ;未松开,则等待
      mov      p1,#0fch     ;jk1指示灯亮
      clr      p2.6         ;p2.6启动
      setb     p2.7         ;p2.7断开
loop: nop
      lcall    sub          ;减一操作
      cjne     r2,#00h,loop1
      cpl      p1.1
      cpl      p1.2         ;指示灯取反
      cpl      p2.6         ;继电器取反操作
      cpl      p2.7
      mov      31h,32h      ;从32h中读初值
loop1:mov      r3,34h       ;从34h中读入延时初值
      lcall    delay        ;调延时子程序
      ljmp     loop

; 减一子程序
sub:  clr      c
      mov      a,#9ah
      subb     a,#1
      add      a,31h
      da       a
      mov      31h,a
      mov      30h,a        ;放显示缓冲区
      mov      r2,31h
      ret
; 延时10ms子程序
delay:mov      r4,#20
del_a:mov      r5,#248
      djnz     r5,$
      djnz     r4,del_a
      djnz     r3,delay
      ret
;==========================
; 中断0服务
int00: clr    ex0            ;关外中断
       clr    tr0
       push   acc
       push   psw
       jnb    p3.3,$         ;未松开,等待
       lcall  int_lay
int00_loop:
       jnb    p3.3,int_dect  ;p3.1按下,则到延时处理
       clr    p1.4           ;p3.1未按下,记数指示灯亮
       setb   p1.5           ;关延时初值指示灯
       mov    30h,32h        ;备份值放显示缓冲区
       lcall  int00_dis
int00_datadd:
       jb     p3.4,int00_dp  ;p3.4未按下,跳显示处理
       lcall  int_lay
       jnb    p3.4,$         ;未松开,等待
       mov    a,32h
       add    a,#1
       da     a
       mov    32h,a
       mov    30h,a
       lcall  int00_dis
       ljmp   int00_loop
int00_dp:
       mov    30h,32h
       lcall  int00_dis
       ljmp   int00_loop
int_dect:
      lcall int_lay
      jnb     p3.3,$
int_del:setb  p1.4                   ;关记数指示灯
      clr     p1.5                   ;开延时指示灯
      mov     30h,34h
      lcall   int00_dis
      jb      p3.4,int_out
      lcall   int_lay
      jnb     p3.4,$
      mov     a,34h
      add     a,#05h
      da      a
      mov     34h,a
      mov     30h,a
      lcall   int00_dis
      ljmp    int_del
int_out:
      jb      p3.3,int_del
      lcall   int_lay
      jnb     p3.3,$
      pop     psw
      pop     acc
      setb    ex0
      setb    tr0
      setb    p1.4
      setb    p1.5
      reti
;========================
; 中断显示,显示缓冲区30h
int00_dis:
      setb    p2.0       ;关显示,
      setb    p2.1
      mov     a,30h
      anl     a,#0fh
      mov     28h,a
      mov     a,30h
      swap    a
      anl     a,#0fh
      mov     29h,a
      mov     dptr,#tab
      mov     a,28h
      movc    a,@a+dptr
      mov     p0,a
      clr     p2.0
      call    delay_1ms
      setb    p2.0
      setb    p2.1 ;关显示
      mov     a,29h
      movc    a,@a+dptr
      mov     p0,a
      clr     p2.1
      call    delay_1ms
      setb    p2.0
      setb    p2.1         ;关显示
      ret
;=====================
; 定时中断子程序
disp:push     acc
     push     psw
     mov      th0,#0f8h
     mov      tl0,#0d0h
     setb     p2.0         ;关显示,
     setb     p2.1
     mov      a,30h
     anl      a,#0fh
     mov      28h,a
     mov      a,30h
     swap     a
     anl      a,#0fh
     mov      29h,a
     mov      dptr,#tab
     mov      a,28h
     movc     a,@a+dptr
     mov      p0,a
     clr      p2.0
     call     delay_1ms
     setb     p2.0
     setb     p2.1        ;关显示
     mov      a,29h
     movc     a,@a+dptr
     mov      p0,a
     clr      p2.1
     call     delay_1ms
     setb     p2.0
     setb     p2.1 ;关显示
     pop      psw
     pop      acc
     reti
tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h
     db 00h
;************************
; 显示延时子程序
;************************
delay_1ms:
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     ret
int_lay:
     mov   r7,#60     ;消除抖动 30m秒
int_e1:
     mov   r6,#248
     djnz  r6,$
     djnz  r7,int_e1
     ret
     end

 

阅读:
录入:JETTA

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐