aihe的笔记 https://passport2.21ic.com/?255601 [收藏] [复制] [RSS]

日志

前一个程序的改进版

已有 933 次阅读2007-5-7 12:41 |系统分类:单片机| PIC

前一个程序做了修改,增加了阀动作时间控制,和动作时的指示灯闪烁

 

欢迎批评

 

;***********************************************************
;Aihe 于2007年五一假期中断续写成
;4MHz晶振,1微秒每个指令周期
;内部定时器256×16=4.096mS查询
;主要功能定时控制电动阀开关
;起始延时由四个拨动开关设定,全关为5分钟
;多任务同时执行
;***********************************************************
  list  p=16c54
#INCLUDE   P16C5X.INC
;字节定义 
#DEFINE  MS500   08H    ;分秒
#DEFINE  S1    09H    ;秒
#DEFINE  S30    0AH    ;30秒
#DEFINE  M    0BH    ;分
#DEFINE  H    0CH    ;
#DEFINE  START_YS  0DH
#DEFINE  FLAG1   0EH    ;
;A口输出位 
#DEFINE  CLOSE_OUT  00H    ;开阀
#DEFINE  OPEN_OUT  01H    ;关阀
#DEFINE  CLOSE_LED  02H    ;开
#DEFINE  OPEN_LED  03H    ;关
;B口输入定义
#DEFINE  S1_1    00H    ;启动
#DEFINE  S1_2    01H    ;延时
#DEFINE  S1_3    02H    ;选择
#DEFINE  S1_4    03H    ;开关
#DEFINE  OPEN   04H    ;开按钮
#DEFINE  CLOSE   05H    ;关按钮
#DEFINE  OPEN_CILCK  06H    ;开到位
#DEFINE  CLOSE_CILCK  07H    ;关到位
;标帜FLAG1位定义
#DEFINE  ST_YS_FG  00H
#DEFINE  OPEN_FG   01H    ;
#DEFINE  VT_FG   02H    ;阀门延时标帜
#DEFINE  BB    03H    ;关标帜
#DEFINE  O_FG   04H    ;开按钮标帜
#DEFINE  C_FG   05H    ;关按钮标帜
#DEFINE  OC_FG   06H    ;开到位标帜
#DEFINE  CC_FG   07H    ;关到位标帜
;  
  
   ORG   00H
    
   BTFSS  STATUS,NOT_PD
   GOTO  WAIT
   BTFSS  STATUS,NOT_TO
   GOTO  DOG

START  MOVLW  08H     ;w=08h
   MOVWF  FSR     ;FSR=08H
XH1   CLRF  INDF     ;08单元处被清零
   INCF   FSR,F    ;FSR=FSR+1,指向下一单元
   MOVLW  1FH     ;准备检查FSR是否为1FH
   XORWF  FSR,W    ;FSR和W异或,FSR保持不变
   BTFSS  STATUS,Z   ;检测Z标志是否为1,是则循环结束
   GOTO  XH1     ;继续循环

DOG   MOVLW  00H     ;PA为输出
   TRIS   PORTA    ;
   CLRF  PORTA    ;PA为低电平
   MOVLW  0FFH    ;PB为输入
   TRIS   PORTB

SET_ST  BSF   FLAG1,ST_YS_FG  ;置开机延时标志
   MOVF  PORTB,0    ;读开机延时状态
   MOVWF  START_YS   ;
   MOVLW  B'00001111'
   ANDWF  START_YS,1   ;
   INCF   START_YS,1   ;开机延时加1
   MOVF  START_YS,0   ;延时分钟数n×5
   ADDWF  START_YS,1
   ADDWF  START_YS,1
   ADDWF  START_YS,1
   ADDWF  START_YS,1
         
SET_RTCC CLRF  TMR0    ;
   MOVLW  B'00001011'   ;定义1/16,RTCC为内部计数方式
   OPTION       ;
   MOVLW  10H     ;0.5秒
   MOVWF  MS500
   MOVLW  02H     ;1秒
   MOVWF  S1
   MOVLW  1EH     ;30秒
   MOVWF  S30 
   MOVLW  02H     ;1分钟
   MOVWF  M
   MOVLW  3CH     ;1小时
   MOVWF  H
     
WAIT  MOVLW  03H     ;31.25mS处理一次外部事务
   SUBWF  TMR0,0
   SKPNC  
   GOTO  WAIT    
   CLRWDT       ;清看门狗
    
B1   BTFSS  PORTB,OPEN   ;开按键检测
   GOTO  B2     ;
   BTFSC  FLAG1,O_FG   ;延时确认
   GOTO  B3     ;
   BSF   FLAG1,O_FG   ; 
B2   BTFSS  PORTB,CLOSE   ;关按键检测
   GOTO  A1     ;
   BTFSC  FLAG1,C_FG   ;延时确认
   GOTO  B4     ;关
   BSF   FLAG1,C_FG   ;
   GOTO  A1     ;

B3   BTFSS  FLAG1,C_FG   ;同时按下停止
   GOTO  B5     ;
   BCF   PORTA,OPEN_OUT  ;
   BCF   PORTA,CLOSE_OUT  ;
   GOTO  A1     ;
B4   BCF   FLAG1,OPEN_FG   ;关
   BCF   PORTA,OPEN_OUT  ;
   GOTO  A3     
B5   BSF   FLAG1,OPEN_FG   ;开
   BCF   PORTA,CLOSE_OUT  ;
   GOTO  A2
    
A1   BTFSS  FLAG1,ST_YS_FG  ;是否开机延时开通
   GOTO  A2    
   BSF   PORTA,CLOSE_OUT
   
   DECFSZ  MS500,1
   GOTO  WAIT     
   MOVLW  10H     ;0.5秒
   MOVWF  MS500
   
   BTFSC  FLAG1,VT_FG   ;
   GOTO  C3     ;
   BTFSS  PORTB,CLOSE_CILCK ;
   GOTO  C1     ;
   BTFSC  FLAG1,CC_FG   ;延时确认
   GOTO  C2     ;
C1   BTFSS  PORTA,CLOSE_LED  ;关闭灯闪烁
   GOTO  C2
   BCF   PORTA,CLOSE_LED
   GOTO  C3
C2   BSF   PORTA,CLOSE_LED
C3   DECFSZ  S1,1
   GOTO  WAIT     
   MOVLW  02H     ;1秒
   MOVWF  S1
   DECFSZ  S30,1
   GOTO  WAIT     
   MOVLW  1EH     ;30秒
   MOVWF  S30
   BTFSC  FLAG1,VT_FG   ;
   GOTO  $+3
   BSF   PORTA,CLOSE_LED
   BSF   FLAG1,VT_FG   ;
   DECFSZ  M,1
   GOTO  WAIT
   MOVLW  02H     ;1分钟
   MOVWF  M
   DECFSZ  START_YS,1   ;5分钟×n
   GOTO  WAIT
   BCF   PORTA,CLOSE_OUT
   BCF   PORTA,CLOSE_LED
   BSF   FLAG1,OPEN_FG
   BCF   FLAG1,ST_YS_FG
   BCF   FLAG1,VT_FG   ;
   GOTO  WAIT
    
A2   BTFSS  FLAG1,OPEN_FG
   GOTO  A3
   BSF   PORTA,OPEN_OUT
   DECFSZ  MS500,1
   GOTO  WAIT     
   MOVLW  10H     ;0.5秒
   MOVWF  MS500
   
   BTFSC  FLAG1,VT_FG   ;
   GOTO  D3     ;
   BTFSS  PORTB,OPEN_CILCK ;
   GOTO  D1     ;
   BTFSC  FLAG1,OC_FG   ;延时确认
   GOTO  D2     ;
D1   BTFSS  PORTA,OPEN_LED  ;关闭灯闪烁
   GOTO  D2
   BCF   PORTA,OPEN_LED
   GOTO  D3
D2   BSF   PORTA,OPEN_LED

D3   DECFSZ  S1,1
   GOTO  WAIT     
   MOVLW  02H     ;1秒
   MOVWF  S1
   DECFSZ  S30,1
   GOTO  WAIT     
   MOVLW  1EH     ;30秒
   MOVWF  S30

   BTFSC  FLAG1,VT_FG   ;
   GOTO  $+3
   BSF   PORTA,OPEN_LED
   BSF   FLAG1,VT_FG   ;

   DECFSZ  M,1
   GOTO  WAIT
   MOVLW  02H     ;1分钟
   MOVWF  M
   BCF   PORTA,OPEN_LED
   BCF   PORTA,OPEN_OUT
   BCF   FLAG1,OPEN_FG    
   BCF   FLAG1,VT_FG   ;
   GOTO  WAIT
    
A3   BTFSC  FLAG1,OPEN_FG
   GOTO  A2
   BSF   PORTA,CLOSE_OUT
   DECFSZ  MS500,1
   GOTO  WAIT     
   MOVLW  10H     ;0.5秒
   MOVWF  MS500
   
   BTFSC  FLAG1,VT_FG   ;
   GOTO  E3     ;
   BTFSS  PORTB,CLOSE_CILCK ;
   GOTO  E1     ;
   BTFSC  FLAG1,CC_FG   ;延时确认
   GOTO  E2     ;
E1   BTFSS  PORTA,CLOSE_LED  ;关闭灯闪烁
   GOTO  E2
   BCF   PORTA,CLOSE_LED
   GOTO  E3
E2   BSF   PORTA,CLOSE_LED

E3   DECFSZ  S1,1
   GOTO  WAIT     
   MOVLW  02H     ;1秒
   MOVWF  S1
   DECFSZ  S30,1
   GOTO  WAIT     
   MOVLW  1EH     ;30秒
   MOVWF  S30

   BTFSC  FLAG1,VT_FG   ;
   GOTO  $+3
   BSF   PORTA,CLOSE_LED
   BSF   FLAG1,VT_FG   ;

   DECFSZ  M,1
   GOTO  WAIT
   MOVLW  02H     ;1分钟
   MOVWF  M
   DECFSZ  H,1
   GOTO  WAIT
   MOVLW  3CH     ;1小时
   MOVWF  H
   BCF   PORTA,CLOSE_OUT
   BCF   PORTA,CLOSE_LED
   BSF   FLAG1,OPEN_FG
   BCF   FLAG1,VT_FG   ;
   GOTO  WAIT
     
   END

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)