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

📄 充电器.asm

📁 充电器的相关程序及原理图,调试成功,希望对大家有用
💻 ASM
📖 第 1 页 / 共 3 页
字号:

            INCLUDE"EM78P458.H"
       
            RED    ==     4
            GREEN  ==     2
            CTRL   ==     1	
    		I_AD   ==     0X10
    		U_AD   ==     0X11
			T_AD   ==     0X12
			P_AD   ==     0X13
			FLAG   ==     0X14
			
			_60MFLAG==    1
			_180MFLAG==   2
			FNOBATT  ==   3
			FTIME     ==  4  ;时间超出异常
            FABNORMALT==  5  ;温度异常
            FABNORMALP==  6  ;电源异常
            FABNORMALB==  7  ;电池异常

                        
            A_R    ==     0X15
			R3_R   ==     0X16
			B      ==     0X17
			S      ==     0X18
			U_AD1  ==     0X19
			U_AD2  ==     0X1A
			U_AD3  ==     0X1B
			U_AD4  ==     0X1C
			T_AD1  ==     0X1D
			T_AD2  ==     0X1E
			T_AD3  ==     0X1F
			T_AD4  ==     0X20
			P_AD1  ==     0X21
			P_AD2  ==     0X22
			P_AD3  ==     0X23
			P_AD4  ==     0X24
			R_ADL  ==     0X25
			R_ADH  ==     0X26
		    C250   ==     0X27
			C240   ==     0X28
			PRE_TC ==     0X29
			RAP_TC ==     0X2A
			CNT    ==     0X2B
		
			C1        ==  0X2C
			D_CNT     ==  0X2D
			
			I_AD1  ==     0X2E
			I_AD2  ==     0X2F
			I_AD3  ==     0X30
			I_AD4  ==     0X31
			
			S_NOBATT     ==0        ; 状态定义
            S_PRE        ==1
            S_RAP        ==2
            S_FULL       ==3
            S_ERRORE     ==4
                                ;4.7405v为参考电压;以4.5V为参考电压,计算下面对应的数值
            ;_0V3        ==15    
            _3V0        ==161      ;153
            _4V2        ==215;  调试214;225      ;214
            _4V4        ==236      ;249
            _3V9        ==209      ;221
            _0V2        ==10
            _0V44       ==23
            _0V14       ==7
            _0V26       ==13 
            _2V4        ==129
            _2V8        ==150
			;========================================================
			_43C        ==87
            _0C         ==186
            _5V4        ==242
            _4V8        ==215
            _2V0        ==107
			;=========================================================
			ORG 0X00
			JMP START
			ORG 0x08
			JMP  TINT
;--------------------------

PRE_TABLE:  MOV     R8,A
            SUB     A,@4
            JBC     R3,C
            JMP     PT_4        ;小于4
            MOV     A,R8
            SUB     A,@27
            JBS     R3,C
            JMP     PT_27       ;大于27
            JMP     PT
            
    PT_4:   MOV     A,@4
            MOV     R8,A
            JMP     PT
    PT_27:  MOV     A,@27                     
            MOV     R8,A            
            JMP     PT
            
     PT:    MOV     A,@4
            SUB     A,R8
            ADD     PC,A
            RETL    @2       			
            RETL    @3
            RETL    @4
            RETL    @6
            RETL    @7
            RETL    @8
            RETL    @9
            RETL    @10
            RETL    @11
            RETL    @12
            RETL    @15
            RETL    @17
            RETL    @15
            RETL    @16
            RETL    @17
            RETL    @18
            RETL    @20
            RETL    @23
            RETL    @24
            RETL    @25
            RETL    @26
            RETL    @27
            RETL    @28
            RETL    @29
            
            RETL    @23
            RETL    @24
            RETL    @25
            RETL    @26
            RETL    @27
          
RAP_TABLE:  MOV     A,@21
            SUB     A,R8
            JBC     R3,C
            JMP     RT_21        ;小于21
            MOV     A,R8
            SUB     A,@69
            JBS     R3,C
            JMP     RT_69       ;大于69
            JMP     RT
            
    RT_21:  MOV     A,@21
            MOV     R8,A
            JMP     RT
    RT_69:  MOV     A,@69                     
            MOV     R8,A            
            JMP     RT
            
     RT:    MOV     A,R8
            SUB     A,@21
            
            MOV     A,@1
            ADD     PC,A
            RETL    @1       			
            RETL    @1
            RETL    @1
            RETL    @1; 2
            RETL    @1;2
            RETL    @2
            RETL    @2;3
            RETL    @2;3
            RETL    @2;3
            RETL    @2;4
            RETL    @3;4
            RETL    @3;4
            RETL    @3;5
            RETL    @3;5
            RETL    @4;5
            RETL    @4;6
            RETL    @4;6
            RETL    @4;6
            RETL    @5;7
            RETL    @5;7
            RETL    @5;7
            RETL    @5;8
            RETL    @5;8
            RETL    @6;8
            RETL    @6;9
            RETL    @6;9
            RETL    @6;9
            
            RETL    @9
            RETL    @9
            RETL    @9
            RETL    @9
            
FULL_TABLE: MOV     R8,A
            SUB     A,@3
            JBC     R3,C
            JMP     FT_3        ;小于3
            MOV     A,R8
            SUB     A,@14
            JBS     R3,C
            JMP     FT_14       ;大于14
            JMP     FT
            
    FT_3:   MOV     A,@3
            MOV     R8,A
            JMP     FT
    FT_14:  MOV     A,@14                     
            MOV     R8,A            
            JMP     FT
            
     FT:    MOV     A,@3
            SUB     A,R8
            ADD     PC,A
            ;RETL    @3       			
            ;RETL    @5
            ;RETL    @7
            ;RETL    @9
            ;RETL    @11
            RETL    @13
            RETL    @15
            RETL    @17
            RETL    @19
            RETL    @21
            RETL    @23
            RETL    @25
            RETL    @27
            RETL    @29
            RETL    @31
            RETL    @33
            RETL    @35
            RETL    @37
            
            RETL    @23
            RETL    @25
            RETL    @27
            
            
;=======================================================================
;时间中断服务程序
	        
TINT:	   MOV    A_R,A
			SWAP   A_R
			SWAPA  R3
			MOV    R3_R,A


            JBS    RF,0                        ;
			JMP    INT_RETURN
		    BC     RF,0                        ;CLR  TCC INT
			MOV    A,@217                       ;重置TCC	
			MOV    TCC,A  
			
			DJZ    C250
			JMP    INT_1S
			MOV    A,@50
			MOV    C250,A
			
			BC     R3,C
			JBC    FLAG,FTIME
			BS     R3,C
			JBC    FLAG,FABNORMALT
			BS     R3,C
			JBC    FLAG,FABNORMALP
			BS     R3,C
			JBC    FLAG,FABNORMALB
			BS     R3,C
			JBS    R3,C          ;Z
	 	   JMP    INT_1S
	        MOV    A,@0B00010000       
            XOR    P5,A          ;;灯闪烁
            
  INT_1S:   DJZ    C240
            JMP    INT_C
            MOV    A,@240
            MOV    C240,A
            
  INT_C:    JBC    R3,C
            JMP    INT_RETURN         ;异常的时候不做记时处理
            
            MOV    A,S
            XOR    A,@S_PRE
            JBS    R3,Z
            JMP    INT_RAP
          
INT_PRE:    INC    PRE_TC
            MOV    A,PRE_TC
            SUB    A,@60
            JBS    R3,C
            BS     FLAG,_60MFLAG
            JMP    INT_RETURN
          
  INT_RAP:  MOV    A,S
            XOR    A,@S_RAP
            JBS    R3,Z
            JMP    INT_RETURN
                   
            INC    RAP_TC
            MOV    A,PRE_TC
            SUB    A,@180
            JBS    R3,C
            BS     FLAG,_180MFLAG
                            
			              
INT_RETURN: SWAPA R3_R
			MOV R3,A
			SWAPA A_R
			RETI           
;--------------------------
START:      CALL   INIT
            CALL   AD_PT     ;连续采样4次,电源电压,和温度 
MAIN:       CALL   AD_B       ;连续4次采样电池电压
            
            MOV    A,U_AD
            SUB    A,@_3V0
            JBS    R3,C
            JMP    M_RAP       ;大于3V则快充
            
  M_PRE:    CALL   PRE_CHARGE  ;小于3V则慢充
  M_RAP:    CALL   RAP_CHARGE
  M_FULL:   CALL   FULL_CHARGE
            JMP    MAIN      
;==============================================================================================================
;电池电压采样,连续检查4次,并计算平均值,大于2V认为有电池有电池则退出采样
AD_B:       MOV    A,@4
            MOV    R7,A
            
    AB:     MOV    A,@0B00001110
            IOW    IOCA0
            MOV    A,@1
            MOV    ADCON,A      ;选择AD转换通道,采集电源电压
            CLRA
            IOW   IOC90      ;不增益
            
            CALL   DELAY1MS
            BS     ADCON,ADPD   ;取样充电
            CALL   DELAY1MS
            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
            DJZ    R7
            JMP    AB   
            
            MOV    A,@U_AD1
            MOV    R4,A
            CALL   AVERAGE
            MOV    A,R_ADL
            MOV    U_AD,A
            
            MOV    A,U_AD
            SUB    A,@_2V0    ;小于2V ,认为没有电池
            JBC    R3,C
            JMP    AD_B       ;没有电池则返回,继续检查
            BC     FLAG,FNOBATT;清楚无电池标志
            RET      
            
;===============================================================================================
;连续检查4次电源电压,温度电压,并求其平均值            
AD_PT:      MOV    A,@4
            MOV    R7,A
            
    AP:     MOV    A,@0B00001110
            IOW    IOCA0
            MOV    A,@3
            MOV    ADCON,A      ;选择AD转换通道,采集电源电压
            CLRA
            IOW   IOC90      ;不增益
            
            CALL   DELAY1MS
            BS     ADCON,ADPD   ;取样充电
            CALL   DELAY1MS
            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
            DJZ    R7
            JMP    AP
            
            MOV    A,@P_AD1
            MOV    R4,A
            CALL   AVERAGE
            MOV    A,R_ADL
            MOV    P_AD,A
            
            MOV    A,@4
            MOV    R7,A
            

⌨️ 快捷键说明

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