五一放假写了一个程序,第一次写程序,请大家指点,修正,欢迎板砖
另外在模拟时,跑马表的时间和预计的不同,请教为什么?
;***********************************************************
;Aihe 于2007.05.06五一假期中断续写成
;32768晶振指令周期122.0703125mS
;简单延时控制
;主要功能定时控制电动阀开关
;起始延时由四个拨动开关设定,全关为5分钟
;开1分钟,关1小时,手动开,手动关
;***********************************************************
list p=16c54
#INCLUDE P16C5X.INC
__CONFIG _CP_ON&_WDT_ON&_LP_OSC
;字节定义
#DEFINE S1 08H ;秒
#DEFINE M 09H ;分
#DEFINE H 0AH ;小时
#DEFINE START_YS 0BH ;开机延时寄存
#DEFINE FLAG1 0CH ;标帜寄存器1
;标帜FLAG1位定义
#DEFINE ST_YS_FG 00H
#DEFINE OPEN_FG 01H ;
#DEFINE OC_FG 02H ;开标帜
#DEFINE CC_FG 03H ;关标帜
;A口输出位
#DEFINE CLOSE_LED 00H ;开阀
#DEFINE OPEN_LED 01H ;关阀
#DEFINE POWER_LED 02H
;B口输入定义
#DEFINE S1_1 00H ;启动
#DEFINE S1_2 01H ;延时
#DEFINE S1_3 02H ;选择
#DEFINE S1_4 03H ;开关
#DEFINE OPEN 04H ;开按钮
#DEFINE CLOSE 05H ;关按钮
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,1 ;FSR=FSR+1,指向下一单元
MOVLW 1FH ;准备检查FSR是否为1FH
XORWF FSR,0 ;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 20H ;1秒
MOVWF S1
MOVLW 3CH ;1分钟
MOVWF M
MOVLW 3CH ;1小时
MOVWF H
WAIT MOVLW 03H ;31.25mS处理一次外部事务
SUBWF TMR0,0
SKPNC
GOTO WAIT
CLRWDT ;清看门狗
BTFSS PORTA,POWER_LED ;电源灯闪烁
GOTO $+3
BCF PORTA,POWER_LED
GOTO B1
BSF PORTA,POWER_LED
B1 BTFSS PORTB,OPEN ;开按键检测
GOTO B2 ;
BTFSC FLAG1,OC_FG ;延时确认
GOTO B3 ;
BSF FLAG1,OC_FG ;
B2 BTFSS PORTB,CLOSE ;关按键检测
GOTO A1 ;
BTFSC FLAG1,CC_FG ;延时确认
GOTO B4 ;关
BSF FLAG1,CC_FG ;
GOTO A1 ;
B3 BTFSS FLAG1,CC_FG ;同时按下停止
GOTO B5 ;
BCF PORTA,OPEN_LED ;
BCF PORTA,CLOSE_LED ;
GOTO A1 ;
B4 BCF FLAG1,OPEN_FG ;关
BCF PORTA,OPEN_LED ;
GOTO A3
B5 BSF FLAG1,OPEN_FG ;开
BCF PORTA,CLOSE_LED ;
GOTO A2
A1 BTFSS FLAG1,ST_YS_FG ;是否开机延时开通
GOTO A2
BSF PORTA,CLOSE_LED
DECFSZ S1,1
GOTO WAIT
MOVLW 20H ;1秒
MOVWF S1
DECFSZ M,1
GOTO WAIT
MOVLW 3CH ;1分钟
MOVWF M
DECFSZ START_YS,1 ;5分钟×n
GOTO WAIT
BCF PORTA,CLOSE_LED
BSF FLAG1,OPEN_FG
BCF FLAG1,ST_YS_FG
GOTO WAIT
A2 BTFSS FLAG1,OPEN_FG
GOTO A3
BSF PORTA,OPEN_LED
DECFSZ S1,1
GOTO WAIT
MOVLW 2OH ;1秒
MOVWF S1
DECFSZ M,1
GOTO WAIT
MOVLW 3CH ;1分钟
MOVWF M
BCF PORTA,OPEN_LED
BCF FLAG1,OPEN_FG
GOTO WAIT
A3 BTFSC FLAG1,OPEN_FG
GOTO A2
BSF PORTA,CLOSE_LED
DECFSZ S1,1
GOTO WAIT
MOVLW 20H ;1秒
MOVWF S1
DECFSZ M,1
GOTO WAIT
MOVLW 3CH ;1分钟
MOVWF M
DECFSZ H,1
GOTO WAIT
MOVLW 3CH ;1小时
MOVWF H
BCF PORTA,CLOSE_LED
BSF FLAG1,OPEN_FG
GOTO WAIT
END