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

📄 ld094.asm

📁 这是本人写的一款开关自动转换程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
MinIt
                   clrf         STATUS
                   goto         MAIN       
                ;上电复位从这开始
maintemp 
                   BSF       STATUS,RP0
                   bcf       STATUS,RP1
                   bsf       PCON,1            ;上电复位后置标志位
                   bsf       PCON,0            ;欠压
                   clrf      STATUS
                   call          INITIAL              ;调用初始化
                   call          RamInt       
                  
  
;ifdef  ret
                call         KEYSCAN              ;初始化后只判断短时间开与关
                btfsc        AJBIAT,7             ;是否按了按键?
                 goto         DEBUG                ;是,调试
                  ;读转速液位传感型号
                  call          YWMODE
                 ;读熄火默认设置时间 
                  movlw        D'4'                     ;送地址
                  call         RED_EE                  
                  movwf        XhTimeMR             ;熄火默认设置时间 
                  MOVF      XhTimeMR,F
                  btfsc     STATUS,Z
                  bsf       RpmSingFlag,TimeClose    ;不需要延时标志
                  incf         XhTimeMR,f   
                 ;浮动控制
                   movlw        D'3'                     ;送地址
                  call         RED_EE                   ;读转速值
                  movwf        TEMP             ;熄火默认设置时间 
                  movf        TEMP,f
                  btfss     STATUS,Z
                  bsf       GasFlag,NOKZ    ;使用
 
                  ;读开机默认状态
                  movlw        D'1'                  ;开机默认状态地址
                  call         RED_EE                ;读默认值,油态默认值为0,非0为气
                  movwf     KeyStatusCount           ;开机默认状态保存     
                  call          KEYSLC1
                  call          MAINGB
                  call          OpenZd               ;开中断
;//******************************************************/
;主程序
;*******************************************************/             
MAIN       
                clrwdt
                call          KEYSCAN                  ;按键是否按下!
                btfsc         AJBIAT,7 
                call          KEYSLC                   ;程序流程标志确定模式          
                btfsc         RpmSingFlag,LcGb    ;流程改变标志(H)
                call          MAINGB
                btfsc         GasFlag,GasStatus     ;如果已工作在GAS,则检测液位
                call          YWZJC                    ;液位检测 
               
                nop
                goto          MAIN
;//******************************************************/
;*******************************************************/
MAINGB
               ;CYFXFLAG                   ;程序流程标志
                bcf         RpmSingFlag,LcGb 
                btfsc       CYFXFLAG,LC0 
                call        Status0        ;油状态
                btfsc       CYFXFLAG,LC1 
                call        Status1        ;全关状态
                btfsc       CYFXFLAG,LC2 
                call        Status2        ;气状态
                btfsc       CYFXFLAG,LC3 
                call        Status3        ;全开状态
                return
;*******************************************************************
;Name:YOU   
;状态0为用油
;油开,其余全部关
;********************************YOU*******************************
Status0
                   ;初始化
               ;把默认值写到EEPROM
                clrf          MOREN
                movlw         1                           ;地址
                call          WRITE_EE
                clrf          STATUS                    ;恢复寄存器体0
                  bcf          GasFlag,GasStatus       ;工作在GAS标志
                 clrf         YwDataFlag
                call          LedInt
              
                bsf           YOULED                   ;油状态灯
                nop
                nop
                bcf           GasOut                   ;气继电器输出关闭 
                bcf  RpmSingFlag,JcXhTime        ;不要检测熄火时间标志 
                bsf           PortOut                  ;   油继电器输出开   
                    
                return
;******************************************************************************            
;********************状态1********************
;全关   ,状态灯都不亮   继电器全关
;******************************************************************************
Status1

             clrf         CYFXFLAG
             call          LedInt                  ;灯全关
             bcf           GasOut                  ;气继电器输出关 
             bcf          GasFlag,GasStatus       ;工作在GAS标志
             bcf  RpmSingFlag,JcXhTime        ;不要检测熄火时间标志 
             bcf           PortOut                 ;油继电器输出关
             return


;******************************************************************************            
;********************状态2为用气********************
;****************************************************************************** 
Status2   
              ;--此部分为设置默认值-- 

                 bsf          GasFlag,GasStatus       ;工作在GAS标志
                movlw         D'2'                      ;把默认值写到EEPROM  气默认值为3
                movwf         MOREN
                movlw         1                           ;地址
                call          WRITE_EE
                clrf          STATUS                    ;恢复寄存器体0
                call          LedInt
                bcf         YWLED1 
                bsf         YWLED2          	;液位R-LED   开机第一次始终绿灯全是亮的
                bsf         YWLED3
                bsf         YWLED4
                bsf         YWLED5
                movlw        D'5'               ;液位显示初始值,最大开始显示
                movwf        OLDLEDCOUNT 
               
                bsf       RpmSingFlag,JcXhTime        ;要检测熄火时间标志
GAS
                bcf           PortOut                 ;油继电器输出关
                btfss         RpmSingFlag,RpmSingOK         ;;有转速信号标志
                return
                bsf           GASLED                  ;GAS状态灯
                nop
                bsf           GasOut                  ;气继电器输出 
                return
;******************************************************************************            
;********************状态3********************
;油与气全开,液为信号为全关,不显示
;当检测到无转速信号时,需关闭气伐,有信号,为开
;******************************************************************************
Status3
             bcf          GasFlag,GasStatus       
             clrf         YwDataFlag
             call          LedInt 
             bsf           YOULED                  ;油状态灯 

             bsf          RpmSingFlag,JcXhTime       
              bsf           PortOut                 ;油继电器输
              btfss         RpmSingFlag,RpmSingOK        
              return
              bsf           GASLED                  ;GAS状态灯 
              bsf           GasOut                  ;气继电器输出 
             return

;****************************************************************
;****************************************************************
OpenZd
               banksel       PIE1
               bsf           PIE1,TMR1IE       
               banksel       INTCON
               movlw         0x3C                  ;赋初值50000=65535-15535,中断1次时间为50MS
               movwf         TMR1H          
               movlw         0xAF
               movwf         TMR1L 
               bsf           INTCON,T0IE        ;指示灯
               bsf           INTCON,RAIE        
               bsf           INTCON,PEIE        ;允许定时器1产生中断 (用于定时检测液位数据)
               bsf           T1CON,TMR1ON       ;定时器1开
               bsf           INTCON,GIE 
               btfss         INTCON,GIE
               goto          $-2
               return
  
;****************************************************************
;Name:KEYSCAN    按键处理子程序
;****************************************************************
KEYSCAN     
                 clrwdt
                 btfsc       AJPD               ;判断按键是否按下
                 return                                                             
                 call        DELAY              ;消抖
                 btfsc       AJPD               ;在判断
                 return 
                 clrf        AJBIAT
                 bsf         AJBIAT,7           ;此标志代表是否按了按键          
                 return              
               ;-------按键释放检测-------------
KEY_WAIT
                 clrwdt            
                 btfss       AJPD               ;判断
                 return
                 call        DELAY              
                 btfss       AJPD              
                 return
                 clrf        AJBIAT
                 bsf         AJBIAT,5           ;置标志位
                 
                 return
;****************************************************************
;Name:KEYSLC    按键模式流程
;****************************************************************
KEYSLC
                 incf        KeyStatusCount,f     ;按键循环状态
             movlw       4
             btfss  GasFlag,NOKZ    ;不要浮动
             movlw       3

                 subwf       KeyStatusCount,w
                 btfss       STATUS,C
                 goto     KEYSLC1
                 movlw       0
                 movwf    KeyStatusCount

KEYSLC1
                 movf        KeyStatusCount,f
                 btfsc       STATUS,Z
                 goto        keylc0
                 movlw       1
                 subwf       KeyStatusCount,w
                 btfsc       STATUS,Z
                 goto        keylc1 
                 movlw       2
                 subwf       KeyStatusCount,w
                 btfsc       STATUS,Z
                 goto        keylc2
                 clrf         CYFXFLAG
                 bsf         CYFXFLAG,LC3
                 goto         keyend             ;按键释放检测
               
keylc0
                 clrf         CYFXFLAG
                 bsf         CYFXFLAG,LC0
                 goto         keyend
keylc1
                 clrf         CYFXFLAG
                 bsf         CYFXFLAG,LC1
                 goto         keyend
keylc2
                 clrf         CYFXFLAG
                 bsf         CYFXFLAG,LC2
                 goto         keyend
keyend
                  clrwdt            
                 btfss       AJPD               ;判断
                 goto         keyend
                 call        DELAY              
                 btfss       AJPD              
                 goto         keyend
                 clrf        AJBIAT
                 bsf    RpmSingFlag,LcGb    ;流程改变标志(H)
                 
                 return
;******************读EEPROM**************
RED_EE
                clrf        STATUS 
                BSF         STATUS,RP0        ;设置寄存器体1
                MOVWF       EEADR             ;送地址
                BSF         EECON1,RD         ;启动一次读操作
                MOVF        EEDATA,W
                clrf        STATUS      
                return
;******************写EEPROM**************
WRITE_EE
               BCF         INTCON,GIE
               clrf        STATUS
               BSF         STATUS,RP0         ;设置寄存器体1
               MOVWF       EEADR              ;送地址
               MOVFW       MOREN
               MOVWF       EEDATA             ;送数据
               BSF         EECON1,WREN        ;启动一次write操作 
               MOVLW       0X55
               MOVWF       EECON2
               MOVLW       0XAA
               MOVWF       EECON2
               BSF         EECON1,WR          ;开始写  
               BCF         EECON1,WREN        ;WRITE COLSE
               clrf         STATUS 
               BSF         INTCON,GIE
               RETURN

;**********************************ADC****************************** 
AC_JC             
                BSF        ADCON0,GO         ;开启A/D转换过程
WAIT            CLRWDT
                BTFSC      ADCON0,GO         ;等待A/D转换过程结束,检测ADC中断标志位
                GOTO       WAIT              ;如果没有转换结束,则返回循环检测    
                MOVF       ADRESH,W          ;仅取高8位,把A/D结果读到W
                RETURN 
;*********************************************************************************  
;*** 调试部分 

;*********************************************************************************  
DEBUG   
            
                 call          KEY_WAIT            ;等待按键松开
                 btfss         AJBIAT,5
                 goto          DEBUG
                bsf           StatusFlag,DebugFlag     ;trm1 

⌨️ 快捷键说明

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