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

日志

五一放假写了个程序,请大家指点指点

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

五一放假写了一个程序,第一次写程序,请大家指点,修正,欢迎板砖

另外在模拟时,跑马表的时间和预计的不同,请教为什么?

 

 

;***********************************************************
;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

路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

回复 myfaith 2007-5-13 22:48
kk