51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > 51单片机 > 详细内容
水泵定时控制实验
发布时间:2009/7/5  阅读次数:909  字体大小: 【】 【】【

       现代自动控制设备中,都存在一个电子电路与电气电路的互相连接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(电动机,电磁铁,电灯等),另一方面又要为电子线路的电气电路提供良好的电隔离,以保护电子电路和人身的安全。电子继电器便能完成这一桥梁作用。

特别提醒:
       实验时请尽量不要去控制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

  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号