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

📄 main.asm

📁 sunplus e_bike demo
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;**************************************** 
F_Help_Detect:
		tst		G_Time_Flag,CB_1250Ms_Flag ;
		bne		L_Hall_0and1_Compare	;every 1s compare
		tst		P_IOA_Data,HP_HALL		;read help hall
		beq		L_Hall_0_Count
;		
L_Hall_1_Count:
		set		G_Hall_Flag,CB_HelpHall1_Flag;set read 1 flag

		inc		G_Help1_count				;count read 1 times
		bne		L_NotIncHi1
		inc		G_Help1_count+1
L_NotIncHi1:	
		jmp		L_Help_Detect_End
;	
L_Hall_0_Count:
		tst		G_Hall_Flag,CB_HelpHall1_Flag
		beq		L_Hall0_Count_Time
		inc		G_Help1_count_Time    	  ;count read 1  times
;	
L_Hall0_Count_Time:
        clr		G_Hall_Flag,CB_HelpHall1_Flag ;clear read 1 flag

		inc		G_Help0_count				;count read 0 times
		bne		L_NotIncHi0
		inc		G_Help0_count+1
L_NotIncHi0:	
		jmp		L_Help_Detect_End
;
L_Hall_0and1_Compare:					  ;compare read 0 and 1 times every 1s
		clr		G_Time_Flag,CB_1250Ms_Flag
		lda		G_Help1_count
		sta		G_Temp_0
		lda		G_Help1_count+1
		ror		a	
		ror		G_Temp_0
		ror		a
		ror		G_Temp_0
		lda		G_Temp_0
		cmp		#250					 ;250*4=1000
		bcs		L_No_Help_Comand
		cmp		#170					 ;180*4
		bcc		L_No_Help_Comand
;
L_Help_Comand_Process:				
		
		lda		G_Help1_count_Time	     ;read 1 times			
		cmp		#1
		bcc		L_No_Help_Comand
		cmp		#18
		bcs		L_No_Help_Comand
		cmp		#2
		bcs		L_Help_Detect_High       ;1?
		       
        inc     G_HallStart_Count 		 ;help start delay       
        ldx     G_HallStart_Count
        cpx     #C_HelpHallStart_Count   ;
        bcc     L_Help_Detect_Low        	  
;
L_Help_Detect_High:					     ;hlp 05/29
		lda		G_Help_Comand_BufferLo+2
		sta		G_Help_Comand_BufferLo+3
		lda		G_Help_Comand_BufferLo+1
		sta		G_Help_Comand_BufferLo+2
		lda		G_Help_Comand_BufferLo
		sta		G_Help_Comand_BufferLo+1
		
		lda		G_Help_Comand_BufferHi+2
		sta		G_Help_Comand_BufferHi+3
		lda		G_Help_Comand_BufferHi+1
		sta		G_Help_Comand_BufferHi+2
		lda		G_Help_Comand_BufferHi
		sta		G_Help_Comand_BufferHi+1
		
		lda		G_Help1_count_Time	
		sta		G_Divid0
		lda		G_Help1_count				
		sta		G_Divided0
		lda		G_Help1_count+1		
		sta		G_Divided1
		
		jsr		F_16BitDivid8Bit
		
		lda		G_Divided0
		sta		G_Help_Comand_BufferLo	 ;G_Help_Comand
		
		lda		G_Divided1
		sta		G_Help_Comand_BufferHi	 ;G_Help_Comand+1			  
		
		lda		#0
		sta		G_Divided0
		sta		G_Divided1
		
		ldx		#3
L_adc_loop:	
		clc
		lda		G_Help_Comand_BufferLo,x
		adc		G_Divided0		
		sta		G_Divided0
		lda		G_Help_Comand_BufferHi,x
		adc		G_Divided1
		sta		G_Divided1
		dex		
		bpl		L_adc_loop
		
		lsr		G_Divided1
		ror		G_Divided0
		lsr		G_Divided1
		ror		G_Divided0	
		
		lda		G_Divided1
		sta		G_Help_Comand+1
		lda		G_Divided0
		sta		G_Help_Comand
		
		lda     #0
        sta     G_HallStart_Count
		set	    G_Hall_Flag,CB_HelpComand_Flag
		jmp		L_Help_Comand0     
;	
L_No_Help_Comand:						  ;clear help comand flag
		lda		#0
		sta		G_HallStart_Count	
L_Help_Detect_Low:					
		clr    G_Hall_Flag,CB_HelpComand_Flag
				
L_Help_Comand0:
		lda		#0						  ;clear help hall 1 count
		sta		G_Help1_count
		sta		G_Help1_count+1
		sta		G_Help0_count
		sta		G_Help0_count+1			  ;clear help hall 0 count
		sta		G_Help1_count_Time
L_Help_Detect_End:
        rts

;****************************************
;	Applied Body	: SPMC65P2404A
;	Firmware version: V1.0
;	Programer		: 
;	Date			: 2006/09/15	
;	Description		:  ERROR_LED ilnformation display
;	Hardware Connect: SPMC65 BLDC demo board	 
;	IDE Version		: v1.6.8	
;	BODY Version	: v1.0.2A
;****************************************         			
F_Led_Driver:  
L_Disp_Brake_Led:    
       tst		G_DISP_FLAG,CB_DispBrake_Flag	; brake?
       beq		L_Disp_Iover_Led				; no
       set		P_IOB_Data,	ERROR_LED			; 
       jmp		L_Disp_ChongDian_Led0
;      
L_Disp_Iover_Led:
       tst		G_DISP_FLAG,CB_DispIOver_Flag   ; I over?
       beq		L_Disp_Batter_Low_Led			; no
       tst		G_Time_Flag,CB_3S_Flag			; 3s?
       
       beq		L_Disp_ChongDian_Led
       tst		G_Time_Flag,CB_500Ms_Flag		; 0.5s?
       beq		L_Disp_ChongDian_Led			; 0.5s flash
       set		P_IOB_Data,	ERROR_LED			;
       jmp		L_Disp_ChongDian_Led0
;
L_Disp_Batter_Low_Led:
	   tst		G_DISP_FLAG,CB_DispBatterLow_Flag;batter low?
	   beq      L_DispNoPWM_Led					; no
	   tst		G_Time_Flag,CB_2S_Flag			; 2s?
       beq		L_Disp_ChongDian_Led			; no
       
       tst		G_Time_Flag,CB_500Ms_Flag
       beq		L_Disp_ChongDian_Led			; 0.5s flash
       set		P_IOB_Data,	ERROR_LED			; open batter low ERROR_LED	
       jmp		L_Disp_ChongDian_Led0
;
L_DispNoPWM_Led:
	   tst		G_DISP_FLAG,CB_DispNoPWM_Flag	; batter low?
	   beq      L_Disp_ChongDian_Led			; no
	   tst		G_Time_Flag,CB_500Ms_Flag		; 0.5s?
       beq		L_Disp_ChongDian_Led			; no
       set		P_IOB_Data,	LED					; open batter low led	
       jmp		L_Disp_ChongDian_Led0

L_Disp_ChongDian_Led:
	   clr		P_IOB_Data,	ERROR_LED			; close 
;
L_Disp_ChongDian_Led0:							; Display chongdian led		
		tst		G_DISP_FLAG,CB_DispCharge_Flag
		beq		L_Disp_Chongdian_End
		jmp		L_DISP_XH_LED0
;
L_Disp_Chongdian_End:
L_DISP_XH_LED0:									; Display xunhang led
		tst		G_DISP_FLAG,CB_DispConstant_Flag
		beq	    L_Disp_XH_End
		jmp		L_DISP_HP_LED0

L_Disp_XH_End:									; Display help led
L_DISP_HP_LED0:	
		tst		G_DISP_FLAG,CB_DispHelp_Flag
		beq	    L_DISP_HP_END
		set		P_IOA_Data,HP_LED
		jmp		L_Disp_Led_End
;
L_DISP_HP_END:
		clr		P_IOA_Data,HP_LED
L_Disp_Led_End:		
	   	rts	 
;
;

;****************************************
;	Applied Body	: SPMC65P2404A
;	Firmware version: V1.0
;	Programer		: 
;	Date			: 2006/09/15	
;	Description		:  Task2 : current and battery protect
;	Hardware Connect: SPMC65 BLDC demo board	 
;	IDE Version		: v1.6.8	
;	BODY Version	: v1.0.2A
;****************************************
F_Protect_Control:
		tst		G_Monitor, CB_IOverAlarm_Flag	; I over flag (NMI occur) 
		beq		L_IAD_PROCESS					; Not I over arm-->L_IAD_PROCESS: compare current ovre value 
;
		set		P_IOB_Dir, INT_OC				; Becomes PB.4 the fault indication output
		clr		P_INT_Ctrl0, CB_INT_IRQ0IE		; Disable INT0 interrupt
;
		inc		G_TMB_Delay_Cnt
		lda		G_TMB_Delay_Cnt
		cmp		#$7F
		beq		L_NMI_INT_OPEN
		jmp		L_BATTERAD_END
;
L_NMI_INT_OPEN:
		inv		P_IOB_Data, INT_OC				;PB.4 output data 取反
		lda		#$0
		sta		G_TMB_Delay_Cnt
;
L_Neg_PROCESS:
        lda     G_ADC6_Buf
        cmp     #C_INegtive_Data            	  ;I is negateive?
        bcc     L_I_NEGTIMVE_STOPMOTO       	  ;I is negateive to L_I_NEGTIMVE_STOPMOTO
        jmp     L_IAD_PROCESS
        
L_I_NEGTIMVE_STOPMOTO:
        jsr     F_Pwm_Clear
        set     G_BrakeError_Buf,CB_INegtive_Flag ;CB_INegative_Flag=5CH
        jmp     L_BATTERAD_PROCESS
;
L_IAD_PROCESS:
        clr     G_BrakeError_Buf,CB_INegtive_Flag ;clear negateive flag
;				
L_IAD_PROCESS0:		
		lda		G_ADC6_Buf
		cmp		#C_Iovre_Data	  	  ;I is Over? 
		bcc     L_BATTERAD_PROCESS    ; Cy=0 to L_BATTERAD_PROCESS
		
		lda		G_Iover_Time
		cmp		#C_IOver_Time
		bcc		L_BATTERAD_PROCESS0
		
		lda		#C_IOver_Time
		sta		G_Iover_Time
;	
		set		G_DISP_FLAG,CB_DispIOver_Flag
		set		G_BrakeError_Buf,CB_IOver_Flag
		jmp		L_BATTERAD_PROCESS0
;		
L_BATTERAD_PROCESS:
		lda		#0
		sta		G_Iover_Time
		clr		G_DISP_FLAG,CB_DispIOver_Flag
		clr		G_BrakeError_Buf,CB_IOver_Flag
		
L_BATTERAD_PROCESS0:
		lda		G_ADC7_Buf							;hlp 0619
		cmp		#C_BatterOver_Data					;hlp 0619
		bcs     L_BatterOver_Process				
		
		clr		G_SYS_Control_Flag,CB_BatterOver_Flag
																		
		tst		G_BrakeError_Buf,CB_BatterLow_Flag		
		beq		L_BATTERAD_PROCESS01				 
		
		lda		G_ADC7_Buf						
		cmp		#C_BatterLowStart_Data				
		bcs		L_BATTERAD_END0					
		jmp		L_BATTERAD_END
		
L_BATTERAD_PROCESS01:
		lda		#0
		sta		G_BatterLowStart_Time
		
		lda		G_ADC7_Buf
		cmp		#C_BatterMin_Data		
		bcc		L_BATTERAD_LOW				
		
		cmp		#C_BatterLow_Data		
		bcs     L_BATTERAD_END0			
		
		lda		G_Batter_Low_Time
		cmp		#C_BatterLow_Time
		bcc		L_BATTERAD_END
		
L_BATTERAD_LOW:	             						;;hlp 05/29	
		lda		#C_BatterLow_Time		
		sta		G_Batter_Low_Time
;
.IFDEF U_UnderVCheck

		set		G_BrakeError_Buf,CB_BatterLow_Flag
.ENDIF		
		set		G_DISP_FLAG,CB_DispBatterLow_Flag
		jmp		L_BATTERAD_END
;
L_BATTERAD_END0:
		lda		#0
		sta		G_Batter_Low_Time
		clr		G_BrakeError_Buf,CB_BatterLow_Flag
		clr		G_DISP_FLAG,CB_DispBatterLow_Flag
L_BATTERAD_END:		
		rts
;
L_BatterOver_Process:								
		set		G_SYS_Control_Flag,CB_BatterOver_Flag
		jmp		L_BATTERAD_END0
			
;****************************************		
;	Applied Body	: SPMC65P2404A
;	Firmware version: V1.0
;	Programer		: 
;	Date			: 2006/09/15	
;	Description		:  analog speed command fetch open loop control
;	Hardware Connect: SPMC65 BLDC demo board	 
;	IDE Version		: v1.6.8	
;	BODY Version	: v1.0.2A
;****************************************
F_Speed_Control:
		tst		G_BrakeError_Buf,CB_BatterLow_Flag	
		beq		L_Speed_Control0		
		jsr		F_Pwm_Clear
;		
		jmp		L_Speed_Control_End
;
L_Speed_Control0:
		tst		G_Monitor,CB_MotorBrake_Flag								
		beq 	L_Speed_Control1		 
;
		jsr		F_StopMotor_Control		
		
		jmp		L_Speed_Control_End  
;
L_Speed_Control1:						; hlp 05/29		
		tst		G_BrakeError_Buf,CB_SpeedErrorFlag
		beq		L_Speed_Control2		
		
		jsr		F_Pwm_Clear				
		
		jmp		L_Speed_Control_End
							
L_Speed_Control2:						; hlp 05/29		
		tst		G_BrakeError_Buf,CB_MotorStopUp_Flag
		beq		L_Slect_Speed_Mode		
;
		jsr		F_StopMotor_Control		
		
		jsr		F_ClearStopupFlag_Control	
		jmp		L_Speed_Control_End
;     
L_Slect_Speed_Mode:
       lda	   G_SpeedMode
       beq     L_Speed_Change_Mode
       jmp     L_Speed_Constant_Mode	
;
;     
L_Speed_Change_Mode:					
		sec
		lda		G_ADC4_Buf
		sbc		G_Speed_AD_Old			
		cmp		#C_ConstantSpeed_AD		
		bcc		L_Constant_Speed_Delay
		
		lda		G_Speed_AD_Old
		sec
		sbc		G_ADC4_Buf
		cmp		#C_ConstantSpeed_AD		
		bcc		L_Constant_Speed_Delay
		
		jmp		L_Change_Speed
;
L_Constant_Speed_Delay:												
		lda		G_5S_Count				
		cmp		#C_ConstantSpeed_Time	
		bcc		L_Change_Speed0
		lda		#0
		sta		G_5S_Count
		lda		G_ADC4_Buf
		cmp		#C_SpeedLmit_AD			
		bcc		L_Speed_Change_Mode_End
		
.IFDEF U_ConsSpeed		
		lda		#1;					    
		sta		G_SpeedMode				
		set		G_DISP_FLAG,CB_DispConstant_Flag
.ENDIF 		
		lda		G_POS_fifo				
		sta     G_SpeedComand
		lda		G_POS_fifo+1
		sta     G_SpeedComand+1
L_Speed_Change_Mode_End:
		rts	
;	
L_Speed_Constant_Mode:				    ; speed constant mode
		lda		#1
       	sta		G_SpdCtrl_Cnt		    ; speed constant mode,PWM control is speed time
		tst		G_Monitor,CB_ModeChange_Flag
										
		beq		L_Speed_Constant		; no
        lda 	G_ADC4_Buf				; yes ,change the speed				
        cmp     #80h ;C_LoosenHandGrip_AD    
        bcs     L_Speed_Change
        rts
;
;
L_Speed_Constant:
        lda 	G_ADC4_Buf
        cmp     #C_LoosenHandGrip_AD	; loosen the handgirp ?
        bcc     L_Set_Speed_Change_Flag	; yes
        rts     
;
;
L_Set_Speed_Change_Flag:				; set loosen the handgrip flag
		set		G_Monitor,CB_ModeChange_Flag	
		rts	
;
;	
L_Speed_Change:							; pwm control is speed AD command
		lda		#0
        sta		G_SpeedMode				; change to speed change mode
        clr		G_Monitor,CB_ModeChange_Flag
L_Speed_Change_End:						; clear loosen the handgrip flag
        rts
;      
;
L_Change_Speed:							
		lda		#0						; Clear cruise delay time
		sta		G_5S_Count
;
L_Change_Speed0: 
		clr		G_DISP_FLAG,CB_DispConstant_Flag	; Clear cruise flag
		clr		G_Monitor,CB_ModeChange_Flag
        
        lda  	#0   
        sta		G_SpdCtrl_Cnt
		sta		G_Speed_AD_Buf+1	
;
		lda		G_ADC4_Buf				; save the old AD
		sta		G_Speed_AD_Old
		
		cmp		#C_SpeedMax_AD
		bcs		L_AD_limit_max

		cmp		#C_SpeedLmit_AD			;0x38
		bcc		L_AD_StopMotor_L1	
		
		lda		G_ADC4_Buf
		sec
		sbc		#35h
		sta		G_Speed_AD_Buf			
;	
		asl		G_Speed_AD_Buf
		rol		G_Speed_AD_Buf+1
		asl		G_Speed_AD_Buf
		rol		G_Speed_AD_Buf+1
;
		sec
		lda		#FFH
		sbc		G_Speed_AD_Buf
		sta		G_PhaseCmd
		
		lda		#0Fh
		sbc		G_Speed_AD_Buf+1

⌨️ 快捷键说明

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