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

📄 充电器.asm

📁 充电器的相关程序及原理图,调试成功,希望对大家有用
💻 ASM
📖 第 1 页 / 共 3 页
字号:
           MOV    A,I_AD          ;送数,查表
           CALL   PRE_TABLE
           MOV    D_CNT,A
           
     PCI:  CALL   DELAY1MS        ;底电平时间
           DJZ    D_CNT
           JMP    PCI 
           
           MOV    A,@0B00001110   ;取电池电压
           IOW    IOCA0
           MOV    A,@1
           MOV    ADCON,A      ;选择AD转换通道,采集电源电压
           CLRA
           IOW   IOC90      ;不增益
           ;CALL   DELAY1MS
           BS     ADCON,ADPD   ;取样充电
           ;CALL   DELAY2MS
           BS     ADCON,ADRUN
           JBC    ADCON,ADRUN
           JMP    $-1
           BC     RF,ADIF
           BC     ADCON,ADPD   ;停止采样
           MOV    A,U_AD3
           MOV    U_AD4,A
           MOV    A,U_AD2
           MOV    U_AD3,A
           MOV    A,U_AD1
           MOV    U_AD2,A
           MOV    A,ADDATA
           MOV    U_AD1,A
           
           MOV     A,@P_AD1
           MOV     R4,A
           CALL    AVERAGE
           MOV     A,R_ADL
           MOV     P_AD,A
           
           SUB     A,@_5V4
           JBC     R3,C
           JMP     PRE_NORMAL                    
PABNORMALP:
           BS      FLAG,FABNORMALP
           JMP     RE_PC       ;
PABNORMALT:
           BS      FLAG,FABNORMALT
           JMP     RE_PC             
    
PRE_NORMAL:BC      FLAG,FABNORMALP   ;清异常标志
           MOV     A,@T_AD1 ;电压正常
           MOV     R4,A
           CALL    AVERAGE
           MOV     A,R_ADL
           MOV     T_AD,A
           
           SUB     A,@_43C                    ; 87(_43c)<t<186(_0c)
           JBC     R3,C
           JMP     PABNORMALT                  ;温度高于43度
           MOV     A,T_AD
           SUB     A,@_0C
           JBS     R3,C
           JMP     PABNORMALT                                 ;小于186,即大于0度则返回
                        
           BC      FLAG,FABNORMAlT
           MOV     A,@U_AD1
           MOV     R4,A
           CALL    AVERAGE
           MOV     A,R_ADL
           MOV     U_AD,A    
           
           SUB     A,@_4V2
           JBS     R3,C
           RET                         ;大于4.2则充好,退出
           
           
           
  PRE_SHOW:BS      P5,RED             ;指示
           BC      P5,GREEN
           
           MOV     A,U_AD
           SUB     A,@_2V0
           JBS     R3,C
           JMP     PS0     
           BS      FLAG,FNOBATT    ;无电池
           BC      P5,RED          ;清除指示
           BC      P5,GREEN
           RET  
           
     PS0:  MOV     A,U_AD
           SUB     A,@_3V0           ;3.0V
           JBS     R3,C
           RET                       ;>3.0V  快充结束       
           
           JBC     FLAG,_60MFLAG   ;<3.0V
           RET
           JMP     REPEAD_PRE       ;时间没到重新充电
           
           
;=======================================================================================
;================================================================
;快速充电子程序,
;程序结束表示快充好,或电池拿走,置标志无电池标志F_NOBATT

RAP_CHARGE:
           JBC    FLAG,FNOBATT
           RET   
           
REPEAD_RAP:BS     P5,CTRL           ;控制高电平,电池恒流调整
          
  RE_RC:    MOV    A,CNT           ;3个轮流采样
            XOR    A,@0         
            JBS    R3,Z
            JMP    RC_1
            
            MOV    A,@0B00001110
            IOW    IOCA0
            MOV    A,@0         ;采集0.5上的电压
            MOV    ADCON,A      ;选择AD转换通道,采集电源电压
            CLRA
            IOW   IOC90      ;不增益
            
            CALL   DELAY1MS
            BS     ADCON,ADPD   ;取样充电
            CALL   DELAY2MS
            BS     ADCON,ADRUN
            JBC    ADCON,ADRUN
            JMP    $-1
            BC     RF,ADIF
            BC     ADCON,ADPD   ;停止采样
            
            
            MOV    A,I_AD3        ;保存4个FIFO
            MOV    I_AD4,A			
	        MOV    A,I_AD2
            MOV    I_AD3,A
            MOV    A,I_AD1
            MOV    I_AD2,A
            MOV    A,ADDATA
            MOV    I_AD1,A
      
            MOV    A,ADDATA
            MOV    I_AD,A
            MOV    A,@1
            MOV    CNT,A
            JMP    RC_ISLOW   
           
                      
    RC_1:   MOV    A,CNT           ;3个轮流采样
            XOR    A,@1
            JBS    R3,Z
            JMP    RC_2
            
            MOV    A,@0B00001110
            IOW    IOCA0
            MOV    A,@2         ;采集温度
            MOV    ADCON,A      ;选择AD转换通道,采集电源电压
            CLRA
            IOW   IOC90      ;不增益
            
            CALL   DELAY1MS
            BS     ADCON,ADPD   ;取样充电
            CALL   DELAY2MS
            BS     ADCON,ADRUN
            JBC    ADCON,ADRUN
            JMP    $-1
            BC     RF,ADIF
            BC     ADCON,ADPD   ;停止采样
            MOV    A,T_AD3
            MOV    T_AD4,A
            MOV    A,T_AD2
            MOV    T_AD3,A
            MOV    A,T_AD1
            MOV    T_AD2,A
            MOV    A,ADDATA
            MOV    T_AD1,A
            MOV    A,@2
            MOV    CNT,A
            JMP    RC_ISLOW
           
    RC_2:   MOV    A,@0B00001110
            IOW    IOCA0
            MOV    A,@3         ;第3个通道,采集电源电压
            MOV    ADCON,A      ;选择AD转换通道,采集电源电压
            CLRA
            IOW   IOC90      ;不增益
            
            CALL   DELAY1MS
            BS     ADCON,ADPD   ;取样充电
            CALL   DELAY2MS
            BS     ADCON,ADRUN
            JBC    ADCON,ADRUN
            JMP    $-1
            BC     RF,ADIF
            BC     ADCON,ADPD   ;停止采样
            MOV    A,P_AD3
            MOV    P_AD4,A
            MOV    A,P_AD2
            MOV    P_AD3,A
            MOV    A,P_AD1
            MOV    P_AD2,A
            MOV    A,ADDATA
            MOV    P_AD1,A
            MOV    A,@0
            MOV    CNT,A
                  
 RC_ISLOW: BC     P5,CTRL         ;给底电平
           MOV    A,I_AD          ;送数,查表
           CALL   RAP_TABLE
           MOV    D_CNT,A
           
     RCI:  CALL   DELAY200US        ;底电平时间
           DJZ    D_CNT
           JMP    RCI 
           
           MOV    A,@0B00001110   ;取电池电压
           IOW    IOCA0
           MOV    A,@1
           MOV    ADCON,A      ;选择AD转换通道,采集电源电压
           CLRA
           IOW   IOC90      ;不增益
           ;CALL   DELAY1MS
           BS     ADCON,ADPD   ;取样充电
           ;CALL   DELAY2MS
           BS     ADCON,ADRUN
           JBC    ADCON,ADRUN
           JMP    $-1
           BC     RF,ADIF
           BC     ADCON,ADPD   ;停止采样
           MOV    A,U_AD3
           MOV    U_AD4,A
           MOV    A,U_AD2
           MOV    U_AD3,A
           MOV    A,U_AD1
           MOV    U_AD2,A
           MOV    A,ADDATA
           MOV    U_AD1,A
           
           MOV     A,@P_AD1
           MOV     R4,A
           CALL    AVERAGE
           MOV     A,R_ADL
           MOV     P_AD,A
           
           SUB     A,@_5V4
           JBC     R3,C
           JMP     POW_NORMAL                    
ABNORMALT:
           BS      FLAG,FABNORMALT
           JMP     RE_RC       ;
             
ABNORMALP:
           BS      FLAG,FABNORMALP
           JMP     RE_RC       ;

    
POW_NORMAL:BC      FLAG,FABNORMALP
           MOV     A,@T_AD1
           MOV     R4,A
           CALL    AVERAGE
           MOV     A,R_ADL
           MOV     T_AD,A
           
           SUB     A,@_43C                    ; 87(_43c)<t<186(_0c)
           JBC     R3,C
           JMP     ABNORMALT                  ;温度高于43度
           MOV     A,T_AD
           SUB     A,@_0C
           JBS     R3,C
           JMP     ABNORMALT                                 ;小于186,即大于0度则返回
                        
           BC      FLAG,FABNORMALT
           MOV     A,@U_AD1
           MOV     R4,A
           CALL    AVERAGE
           MOV     A,R_ADL
           MOV     U_AD,A    
           
           SUB     A,@_4V2
           JBS     R3,C
           RET                         ;大于4.2则充好,退出
           
           
           
  RAP_SHOW:BS      P5,RED             ;指示
           BC      P5,GREEN
           
           MOV     A,U_AD
           SUB     A,@_2V0
           JBS     R3,C
           JMP     RS0     
           BS      FLAG,FNOBATT    ;无电池
           BC      P5,RED          ;清除指示
           BC      P5,GREEN
           RET  
           
     RS0:  MOV     A,U_AD
           SUB     A,@_3V9           ;3.9V
           JBS     R3,C
           JMP     RS              ;>3.9V             
           
           JBS     FLAG,_180MFLAG   ;<3.9V
           JMP     REPEAD_RAP
           ;BC     FLAG,_180MFLAG
           BS      FLAG,FTIME              ;时间到180分钟还不到3.0V认为出错
           JMP     RE_RC       ;

           
   RS:     JBS     FLAG,_180MFLAG
           JMP     REPEAD_RAP                      ;时间没到
           ;BC      FLAG,_180MFLAG
           RET                      ;>3.9V,且时间到,认为充好
           

;===============================================================
;取平均数,将采集到的4个电压值平均,
;入口:开始地址,给R4,出口R_ADL(R_ADH计算中,暂存高位)中           
AVERAGE:   CLRA    
           MOV    R_ADL,A
           MOV    R_ADH,A
           MOV    A,@4
           MOV    R7,A
           
  A0:      MOV    A,R0
           ADD    R_ADL,A
           JBS    R3,C
           JMP    A1
           MOV    A,@1
           ADD    R_ADH,A
  A1:      INC    R4
           DJZ    R7
           JMP    A0
           RRC    R_ADH
           RRC    R_ADL
           RRC    R_ADH
           RRC    R_ADL
           RET    



DELAY2MS:        MOV   A,@100              
                 MOV   C1,A
                 
                 CALL  DELAY20US
                 DJZ  C1
                 JMP  $-2
                 RET
;=======================================================    
;准确的1MS
DELAY1MS:        MOV   A,@50              
                 MOV   C1,A
                 
                 CALL  DELAY20US
                 DJZ  C1
                 JMP  $-2
                 RET
                 
DELAY200US:      MOV   A,@10              
                 MOV   C1,A
                 
                 CALL  DELAY20US
                 DJZ  C1
                 JMP  $-2
                 RET                 
                    
;=========================================================================
DELAY20US:       WDTC
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 NOP
                 RET     
     END            
          

⌨️ 快捷键说明

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