⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ld094.asm

📁 这是本人写的一款开关自动转换程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:

 #include <P16F676.INC> 
 __CONFIG 0x004c
 __idlocs 0x2007
 LIST R=DEC
 errorlevel 0,-302 ,-305 ,-306      
;说明:复位端口当作IO口,震荡用内部震荡
;
;---------------------------------变量寄存器----------------------------

;ram max 64 byte
 cblock 0x20
FSR_TEMP   
W_TEMP                     
STATUS_TEMP  
 PCLATH_TEMP   
COUNT1
COUNT2
TEMP
TIME_1S                       ;2=H,标志 ,1=H,固定时间标志   3=H按键延时
XhTimeMR                 ;熄火默认设置时间	
XhTimeCount                   ;熄火时间计数器
XhTimeCountH                   ;熄火时间计数器
AJBIAT                     ;按键采集标志
CYFXFLAG                   ;程序流程标志
ZSD                        ; 指示灯闪烁延时变量寄存器

ZSD2
DefelRpm                    ;默认转速数据
RpmSingFlag



NEW_RpmData                 ;计算得到的转速数据

YW
KeyDelay                     ;按键时间超过3S记数器

GdDelay                      ;固定延时3S记数器

LEDdelay                     ;液位LED延时时间(每个灯延时1S)
LEDCOUNT    
MOREN                      ;默认值寄存器
MOREN_FLAG                  ;1=H,默认值已经更改
YEXH                ;把液位型号值写到EEPROM
ZSKZ               ;把转速控制方式值写到EEPROM
OLD_YW      
OLDLEDCOUNT 
YwDataFlag  
YWSZ            ;保存液位数据
KeyStatusCount     ;按键循环状态
DubugSaveRpmCount   ;调试模式保存转速值记数

yeweidelay  
StatusFlag           ;状态标志
DEBUG_FALG
GasFlag
DebugModeTime
YW_FALG
COUNTER
ADBUFF1                      ;采样缓冲数组
ADBUFF2      
ADBUFF3      
ADBUFF4     
ADBUFF5     
ADBUFF6        
 endc              
;***********************************************************
;---------------端口定义
;***********************************************************

;按键端口
#DEFINE     AJPD      PORTA,3     ;    按键端口
;---信号输入
#DEFINE  	YWSING     PORTC,2    ;    液位信号输入端口
#DEFINE  	ZSSING     PORTA,2    ;    转速信号输入端口
;----输出
#DEFINE     GasOut    PORTA,0     ;    气继电器输出(控制端高电平为关)
#DEFINE     PortOut    PORTA,1    ;    油继电器输出
  
;----状态指示
#DEFINE  	YOULED    PORTC,4     ;      LED (黄)
#DEFINE  	GASLED    PORTA,5     ;      LED (红)
;----液位显示
#DEFINE  	YWLED5     PORTC,1    ;    5    LED
#DEFINE  	YWLED4     PORTC,0    ;    4    LED
#DEFINE  	YWLED3     PORTC,3    ;    3    LED
#DEFINE  	YWLED2     PORTC,5    ;    2    LED
#DEFINE  	YWLED1     PORTA,4    ;    1    LED  (RED)
;***********************************************************
;StatusFlag           ;状态标志
#DEFINE DebugFlag    0 ;   调试模式(H)
#DEFINE KeyFlag      1 ;  调试模式(H)
#DEFINE RpmSaveFlag  2  ;  转速默认值刷新
;RpmCompFlag

;TIME_1S,各种定时时间到标志      

#DEFINE  KeyTime3sFlag    1   ;按键3S记时到标志
#DEFINE  OtherTime3S      2   ;其他3s时间到标志 

#DEFINE  XhTime      3   ;熄火保护时间到标志 
#DEFINE  XhTimeOpen   4          ;已经开始
;  DebugModeTime          ;短时间释放标志(H )
#DEFINE  short      0     ;短时间释放标志(H )
#DEFINE  Long       1     ;5S时间到标志
;RpmSingFlag, 
#DEFINE  RpmSingH  0      ;转速采集记时开始 
#DEFINE  RpmSingOK   1      ;有转速信号标志 
#DEFINE  JcXhTime   2       ;要检测熄火时间  

#DEFINE  TimeClose    4      ;进入气工作条件1成立标志(当前转速数据超过默认转速数据)
#DEFINE  JDQ   5      ;无转速信号标志(H)
#DEFINE  LcGb        6      ;流程改变标志(H)

;YwDataFlag 
#DEFINE  DataYz     3      ;刷新液位值进入标志(数据相等不进入 H)中断进入入口 
#DEFINE  DataUp     4      ;升
#DEFINE  DataDown   5      ;降
#DEFINE  DataSx     0      ;入口标志  
;GasFlag,
#DEFINE  GasStatus  0       ;工作在gas标志 
#DEFINE NOKZ  5

;CYFXFLAG                   ;程序流程标志
#DEFINE  LC0  0             ;状态0
#DEFINE  LC1  1 
#DEFINE  LC2  2  
#DEFINE  LC3  3             ;状态3
;***********************************************************
           
          
            ORG         0000H 
            nop     
            GOTO        ZHU1    
            ORG         0004H
;***********************************************************
;*********************中断处理**********************          
ZD 
           MOVWF      W_TEMP               
           MOVFW      STATUS
           SWAPF      STATUS,W            
           CLRF       STATUS              
           MOVWF      STATUS_TEMP  
           MOVFW      PCLATH
           MOVWF      PCLATH_TEMP       
           MOVFW      FSR
           MOVWF      FSR_TEMP
           CLRF       PCLATH
           goto       ZDpd

ZD_EXIT
           CLRF       STATUS
           MOVFW      FSR_TEMP
           MOVWF      FSR
           MOVFW      PCLATH_TEMP
           MOVWF      PCLATH
           SWAPF      STATUS_TEMP,W          ;恢复STATUS
           MOVWF      STATUS
           SWAPF      W_TEMP,F               ;恢复STATUS
           SWAPF      W_TEMP,W
           RETFIE                               ;中断返回                           
;************************************************************************                                                                                                  
    ;---------------定时器1中断处理(400ms中断一次)-------------- 
;************************************************************************                                                                                                                                                                                                  
TMR1_ZD                                                                                                                           
    BCF         PIR1,TMR1IF               ;清中断
    btfsc       StatusFlag,DebugFlag 
    goto        TimeDebug                  ;进入调试模式定时
    btfss        YwDataFlag,DataYz         ;刷新液位值进入标志(数据相等不进入 H)
    goto        TRM1EXIT
    incf        yeweidelay,F
    movlw       3                       ;1S
    subwf       yeweidelay,W
    btfss       STATUS,C
    goto        TRM1EXIT
    clrf        yeweidelay
    ;是否等于0
    movf        LEDdelay,f  
    btfsc       STATUS,Z
    goto        LEDdelayEnd            ;已经达到设置值(已等于新的数据)
    ;首先判断数据是加还是减
    btfsc      YwDataFlag,DataUp       
    goto       ADDdata
    btfsc      YwDataFlag,DataDown
    goto       SUBdata
ADDdata
    decf       LEDdelay,f              
    incf       OLDLEDCOUNT,f          
    movfw      OLDLEDCOUNT           
    goto       LEDsc                  
SUBdata
    decf       LEDdelay,f              
    decf       OLDLEDCOUNT,f           ;上次的数据减1
    movfw      OLDLEDCOUNT            
    goto       LEDsc    
LEDsc 
    addwf      PCL,F
    nop
    goto       LED1
    goto       LED2 
    goto       LED3 
    goto       LED4 
    goto       LED5
    NOP
    goto       TRM1EXIT
LEDdelayEnd
    bcf        YwDataFlag,DataSx            ;液位AD子程序检测进入标志
    bcf        YwDataFlag,DataYz           
    goto       TRM1EXIT
 
;------------------------------------------------------------------
              ;--------进入调试模式定时;用于LED闪烁---------
;------------------------------------------------------------------
TimeDebug                 
                INCF        ZSD2,F                   ;指示灯寄存器加1
                MOVLW       D'1'                    ;0.5s
                SUBWF       ZSD2,W
                BTFSS       STATUS,C
                GOTO        TRM1EXIT
               ;---DEBUG ZSD 闪烁-----
                CLRF        ZSD2                     ;时间到
                 BTFSS       DEBUG_FALG,0
                GOTO        TimeDebug0
                 MOVLW       0X10
                XORWF       PORTA,F                 ;第0个闪(红)
                GOTO        TRM1EXIT
TimeDebug0 
                BTFSS       DEBUG_FALG,1
                GOTO        TimeDebug1            
                MOVLW       0X20
                XORWF       PORTC,F                 ;第1个闪
                GOTO        TRM1EXIT
TimeDebug1
                BTFSS       DEBUG_FALG,2
                GOTO        TimeDebug3            
                MOVLW       0X08
                XORWF       PORTC,F                 ;第2个闪
                GOTO        TRM1EXIT 

TimeDebug3
   
                BTFSS       DEBUG_FALG,4
                GOTO        TRM1EXIT 
                MOVLW       0X30
                XORWF       PORTA,F          
                MOVLW       0X3B
                XORWF       PORTC,F                 ;指示灯全闪
                GOTO        TRM1EXIT 
         
              ;---------出口----------------      
TRM1EXIT                                                                                                                                                
     MOVLW        0x3C                  ;赋初值50000=65535-15535,中断1次时间为50MS
     MOVWF        TMR1H          
     MOVLW        0xAF
     MOVWF        TMR1L                                                   
     GOTO         ZD_EXIT 
;************************************************************************
;**外部触发中断处理*
;************************************************************************                                                              
Rpm_ZD                                                                                                                            
        bcf         INTCON,RAIF       
          btfsc       ZSSING                        ;转速信号
          return
        bsf      RpmSingFlag,RpmSingOK  
         btfss         RpmSingFlag,JcXhTime        
        goto      Fwei
        bsf           GASLED                   ;GAS状态灯
        bsf           GasOut                   ;气继电器输出 
        bsf            RpmSingFlag,JDQ
Fwei
        clrf           GdDelay
        clrf           XhTimeCount
         return   
                  
;************************************************************************
    ;-------------定时器0中断处理(32ms中断一次)----------
;实现功能:1:固定延时3S,;2:状态LED闪烁   3:按键3S延时
;************************************************************************   
T0_ZD
     BCF         INTCON,T0IF 
     btfsc       StatusFlag,DebugFlag 
    goto         KeyTime                  ;进入调试模式定时
  ;监控转速信号     
Zsdtime
    btfss       ZSSING                        ;转速信号
    goto        GAS_ok
    INCF        GdDelay,F                    ;固定延时寄存器加1
    MOVLW       D'31'                       ;固定为1S
    SUBWF       GdDelay,W
    BTFSS       STATUS,C
     goto         ZD_EXIT 
    bcf      RpmSingFlag,RpmSingOK 
    btfss         RpmSingFlag,JcXhTime        ;要检测熄火时间标志 
    goto         ZD_EXIT 
    btfss        RpmSingFlag,JDQ              ;继电器开状态
    goto         ZD_EXIT 
    btfsc         RpmSingFlag,TimeClose    
    goto          GAS_end
    clrf          GdDelay
    incf         XhTimeCount,f           
    movf         XhTimeMR,W              ;熄火默认设置时间
    subwf        XhTimeCount,w
    btfss        STATUS,C

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -