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

📄 main.asm

📁 飞思卡尔智能车闭环控制 18K-20K 变化
💻 ASM
📖 第 1 页 / 共 2 页
字号:
          LDAA 0,X          
	        STAA 0,Y  
	        
	     J7:BRCLR ATD0STAT1,#$80,J7       
	        LDX  #ATD0DR7L    
          LDY  #AD_Value+7  
          LDAA 0,X         
	        STAA 0,Y 
	        
	     J8:BRCLR ATD1STAT1,#$01,J8         
          LDX  #ATD1DR0L    
          LDY  #AD_Value+8  
          LDAA 0,X          
	        STAA 0,Y  
	        
	     J9:BRCLR ATD1STAT1,#$02,J9      
	        LDX  #ATD1DR1L   
          LDY  #AD_Value+9  
          LDAA 0,X          
	        STAA 0,Y
	        
	    J10:BRCLR ATD1STAT1,#$04,J10         
          LDX  #ATD1DR2L    
          LDY  #AD_Value+10 
          LDAA 0,X          
	        STAA 0,Y             ;传感器的值传送结束
	        
  START1: MOVB #$FF,MIN        ;将MIN中取$FF
   START:	LDAB #$0B
	        LDX  #AD_Value       ;将指针指向AD_Value
    LOOP:	LDAA 0,X             ;将AD_Value中内容送A
	        CMPA MIN             ;将(A)与(MIN)比较
	        BHI NEXT             ;若(A)≥(MIN),转NEXT
	        STAA MIN             ;将小值送MIN中
	        STX ONE              ;将小值地址送(ONE:ONE+1)
    NEXT:	INX                  ;指向AD_Value+1
	        DBNE B,LOOP          ;若(B)-1≠0,转LOOP
	        lDAA MIN
	        CMPA #$CC
	        BHS  PWM_SET
	        			
	        
AD_CB:   LDAA 	ONE+1       ;左边传感器地址低8位送A
	       ANDA 	#$0F        ;保留左边传感器地址低4位
	       LDAB   #5
	       MUL    	       
	       EXG  B,X           ;B中放的是乘积之后的低8位
	       INX 	       	       
	       LDAA 	AD_Table,X  ;将查询到的值送入到A中
	       STAA 	WAI1+6    
	       INX
	       LDAA 	AD_Table,X
	       STAA   WAI1+7      ;舵机PWM给定 ;舵机PWM给定 ;舵机PWM给定 ;舵机PWM给定 ;舵机PWM给定 ;舵机PWM给定 ;舵机PWM给定 ;舵机PWM给定
	       INX
	       LDAA  AD_Table,X   ;需要的速度(脉冲数)高8位放在WAI1+8寄存器中
	       STAA  WAI1+8       ;WAI1+8 中放脉冲数,即速度设定
	       INX
	       LDAA 	AD_Table,X  ;需要的速度(脉冲数)低8位放在WAI1+9寄存器中
	       STAA   WAI1+9      
	       JMP    PWM_SET        
AD_Table:
         ;FCB $63,$0D,$97,$19,$00  ;0
.        ;FCB $4E,$0D,$97,$19,$00  ;1   
	       ;FCB $34,$0D,$5C,$19  ;2  脉冲数25   对应speed_low
	       ;FCB $20,$0D,$34,$3c  ;3
	       ;
	       ;FCB $07,$0C,$A8,$3c  ;4   脉冲数60   对应speed_mid
	       ;FCB $07,$0C,$A8,$3c  ;5   脉冲数60   对应speed_mid
	       ;
	       ;FCB $0C,$0B,$B8,$64  ;6   脉冲数100  对应speed_high
	       ;FCB $0C,$0B,$B8,$64  ;7   脉冲数100  对应speed_high 
	       ;FCB $0C,$0B,$B8,$64  ;8   脉冲数100  对应speed_high 
	       ; 
	       ;FCB $27,$0B,$99,$3c  ;9 
	       ;FCB $27,$0B,$99,$3c  ;10
	       ;
	       ;FCB $42,$0A,$DE,$3c  ;11
	       ;FCB $5C,$0A,$63,$19  ;12
	       ;FCB $75,$09,$EA,$19,$00  ;13 
	       ;FCB $75,$09,$D8,$19,$00  ;14
	       ;
	       FCB $63,$0F,$A0,$0F,$64
         FCB $4E,$0F,$A0,$0F,$64 
	       FCB $34,$0E,$10,$0F,$64
	       ;
	       FCB $20,$0C,$80,$00,$64
	       FCB $07,$0C,$80,$00,$64
	       ;
	       FCB $0C,$0B,$B8,$00,$64
	       ; 
	       FCB $27,$0A,$F0,$00,$64
	       FCB $42,$0D,$A4,$00,$64
	       ;
	       FCB $5C,$0D,$AC,$00,$64
	       FCB $75,$07,$D0,$00,$64
	       FCB $75,$07,$D0,$00,$64                 
;*----------------改写通道占空比寄存器PWMDTY0的值--------------------------------*
;*程序功能:将T0中值写入道占空比寄存器PWMDTY0*
;*程序入口:T0_Vallue*
;*程序出口:T0_Vallue中T0写入PWMDTY0*
;*-------------------------------------------------------------------------------*
PWM_SET:   LDAA	#$00;
           STAA	PWME           ;关PWM通道
           LDAA	#$9C
	         STAA	PWMPER0
	         LDAA	#$40
	         STAA	PWMPER1        ;设置50HzPWM
	         LDAA WAI1+6
           STAA	PWMDTY0        ;T0送通道占空比寄存器,产生所需占空比PWM波
           LDAA WAI1+7
           STAA PWMDTY1
           LDAA	WAI1+8
	         STAA	need_speed1    ;给需要的速度
	         LDAA	WAI1+9
	         STAA need_speed2 
	         LDAA	#%00001111     ;
	         STAA	PWME;开启channel0、1:channel2、3
;******************************************************************************
           INC COUNT
           LDAA COUNT
           CMPA #$64            ;程序运行到100次了就处理1次舵机
           BEQ PWMDTY23_CONTROL ;如果相等就跳转
           JMP  AD_VUP                      
;*******************测速模块***********************************************
;将需要的脉冲数(speed_high speed_mid speed_low)放到need_speed中,速度即可稳定在need_speed上
 PWMDTY23_CONTROL:
        CLR COUNT
        LDAA #$00
        STAA ICPAR            ;关闭累加器
 speed1:LDAA need_speed1
        LDAB PACN1
        STAB cur_speed_h
        CMPA cur_speed_h 
        BEQ speed2            ;如果相等就跳转
        BHS  big1             ;如果大于or相等,跳转
        LDD low_speed         ;电机low_speed的PWM占空比为20%
        STD PWMDTY23
        BRA next_text_speed
   big1:LDD high_speed        ;电机hign_speed的PWM占空比为90%
        STD PWMDTY23
        BRA next_text_speed
 speed2:LDAA need_speed2
        LDAB PACN0
        STAB cur_speed_l
        CMPA cur_speed_l 
        BHS  big2              ;如果大于或等于,跳转
        LDD low_speed          ;电机low_speed的PWM占空比为20%
        STD PWMDTY23
        BRA next_text_speed
   big2:LDD high_speed         ;电机hign_speed的PWM占空比为90%
        STD PWMDTY23 
next_text_speed:
        CLR PACN0
        CLR PACN1
        LDAA #$03
        STAA ICPAR             ;打开累加器
;***************************************************************************** 
        JMP  AD_VUP           
;**********************主程序结束,循坏进入AD_VUP******************************
;******************************************************************************

EndlessLoop:
            LDX   #1                   ; X contains counter
CouterLoop:                            
            STX   Counter              ; update global
            BSR   CalcFibo             
            STD   FiboRes              ; store result
            LDX   Counter              
            INX                        
            CPX   #24                  ; larger values cause overflow
            BNE   CouterLoop           
            BRA   EndlessLoop          ; restart.


; Function to calculate fibonacci numbers. Argument is in X.


DelaySub:   ldx   #$01
Delay:      ldaa  #$01
Delay1:     ldab  #$01
Delay2:      
            nop
            dbne  b,Delay2
            dbne  a,Delay1
            dbne  x,Delay
            rts         
          
          
          
CalcFibo:                       
            LDY   #$00                 ; second last
            LDD   #$01                 ; last
            DBEQ  X,FiboDone           ; loop once more (if X was 1, were done already)
FiboLoop:                              
            LEAY  D,Y                  ; overwrite second last with new value
            EXG   D,Y                  ; exchange them -> order is correct again
            DBNE  X,FiboLoop           
FiboDone:                              
            RTS

⌨️ 快捷键说明

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