一个防盗门的控制程序,采用无线遥控方式开门,步进马达执行动作。 ;2009.11.22修正,采用AT89C2051单片机控制,liweiqiang 3.3接峰鸣器 3.5接门状态开关信号输入,低电位表示门已关上,高电位表示门已打开 3.7摇控开门信号输入,低电位表示有开门信号。 org 0000h ljmp start org 000bh ljmp int_0 start: mov sp,#60h mov tmod,#01h mov th0,#0b0h mov tl0,#0b8h mov r1,#00h mov r0,#00h setb ea setb et0 setb tr0 ;============================================ main:;主循环开始 jb p3.5,kss35=0,表示门已关门.向下执行 jnb 20H.0,kss;20H.0=0表示已锁门.转手工开锁信号检测处 lcall gs;关锁 clr 20H.0;置20H.0=0,表示已锁一次门. kss:;;手工开锁信号检测 jnb p3.5,kst;如果门被手动从里面打开过就向下执行清锁门标志位。 ajmp ddjm kst:;摇控开锁信号检测 jb p3.7,kmjs;有低电平开锁信号?是向下执行 lcall delay;延时消抖动 jnb p3.7,kmjs;确认开锁按键是否已放开。是向下执行 lcall ks;开锁 setb tr0;開鎖後計時 kmjs:;開門計時 cjne r0,#30,main;開門計時15秒後檢測門的狀態 mov r0,#00h clr tr0 ddjm: jb p3.5,$;等待门被关上 setb 20h.0;门关上后清已锁门标志位, clr tr0; 停止計數 jmp main;反回主程式 ;=========================================== int_0: push psw push acc inc r1 cjne r1,#14,ext inc r0 mov r1,#00h ext: mov th0,#0b0h mov tl0,#0b8h pop acc pop psw reti ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;开锁子程序 ks: mov r0,#3 loop1: mov p1,#10101111b acall delay mov p1,#11001111b acall delay mov p1,#11010111b acall delay mov p1,#10110111b acall delay djnz r0,loop1 mov p1,#0ffh lcall delay1 lcall bz mov r1,#00h setb tr0 ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;关锁子程序 gs: lcall delay1 lcall delay1 lcall delay1 lcall delay1 mov r0,#3 loop2: mov p1,#10110111b acall delay mov p1,#11010111b acall delay mov p1,#11001111b acall delay mov p1,#10101111b acall delay djnz r0,loop2 mov p1,#0ffh lcall delay1 lcall bz lcall delay lcall bz ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; bz: clr p3.3 lcall delay1 setb p3.3 ret delay: mov r6,#30 d1:mov r7,#0 d2:djnz r7,d2 djnz r6,d1 ret delay1: mov r5,#200 dd1: mov r4,#100 dd2: mov r3,#10 dd3: djnz r3,dd3 djnz r4,dd2 djnz r5,dd1 ret end |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |