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

📄 main.asm

📁 飞思卡尔智能车闭环控制 18K-20K 变化
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;**************************************************************
;* This stationery serves as the framework for a              *
;* user application. For a more comprehensive program that    *
;* demonstrates the more advanced functionality of this       *
;* processor, please see the demonstration applications       *
;* located in the examples subdirectory of the                *
;* Freescale CodeWarrior for the HC12 Program directory       *
;**************************************************************

; export symbols
            XDEF Entry, main
            ; we use export 'Entry' as symbol. This allows us to
            ; reference 'Entry' either in the linker .prm file
            ; or from C/C++ later on

            XREF __SEG_END_SSTACK      ;symbol defined by the linker for the end of the stack

; include derivative specific macros
            INCLUDE 'mc9s12dg128.inc'



; variable/data section
MY_EXTENDED_RAM: SECTION
;Insert here your data definition.
need_speed1    EQU   $0486        ; need_speed中放的是需要的速度,即需要的脉冲数
need_speed2    EQU   $0487
high_speed     FDB   $0E10        ; 电机hign_speed的PWM占空比为90%
low_speed      FDB   $0320        ; 电机low_speed的PWM占空比为20%
AD_Value       EQU   $0440
ONE	           EQU   $045A
WAI1	         EQU	 $0460
MIN	           EQU	 $046A
cur_speed_h    EQU   $046C
cur_speed_l    EQU   $046E
COUNT          EQU   $046F
;speed_high     FDB  #$64         ; 高速度 (存放脉冲数)
;speed_mid      FDB  #$3c         ; 中等速度 (存放脉冲数)
;speed_low      FDB  #$19         ; 低速度 (存放脉冲数)



Counter     ds.w 1
FiboRes     ds.w 1


; code section
MyCode:     SECTION
main:
Entry:


            LDS  #__SEG_END_SSTACK     ; initialize the stack pointer
            CLI                        ; enable interrupts
            ;初始化
            

     
     
;PWM初始化
;*-------------------------------PWM初始化-------------------------------------------------------*
;*A口4分频,B口不用,PWMSCLA=50。 								*
;*Clock_A=8MHz/4=2MHz;	Clock_SA=(8MHz/4)/2*50=20KHz.						*
;*channel0:											*
;*        时钟源:Clock_SA,PWMPERO=200(周期为50Hz=Clock_SA/(2*PWMPERO))				*
;*	 功能:用着转向输出									*
;*channel1:											*
;*	 时钟源:Clock_A, PWMPER1=125(周期为8KHz=Clock_A/(2*PWMPER1))				*
;*	 功能:用着驱动输出									*
;*-----------------------------------------------------------------------------------------------*
PWM_INIT: LDAA	#%00000000
	        STAA	PWME                        ;	禁止PWM                
	        STAA	PWMCAE                      ; 左对齐
	        LDAA	#%00110000
	        STAA	PWMCTL                      ; 16位	 
          LDAA	#%00000011
	        STAA	PWMCLK                      ;	channe0、1 use Clock_SA,channel2、3 use Clock_B
	        LDAA	#02
	        STAA	PWMSCLA                     ;时钟源Clock_SA=2MHz
	        LDAA	#%00001111
	        STAA	PWMPOL                      ;channel0、1,channel2、3正极性
	        LDAA	#$9C
	        STAA	PWMPER0
	        LDAA	#$40
	        STAA	PWMPER1                     ;设置50HzPWM
	        LDAA	#$0B
	        STAA	PWMDTY0
	        LDAA	#$B8
	        STAA	PWMDTY1                     ;占空比7.5%
	        LDAA	#$0F
	        STAA	PWMPER2
	        LDAA	#$A0
	        STAA	PWMPER3                     ;设置2KHzPWM 
	        LDAA	#%00001111
	        STAA	PWME                        ;开启channel0、1,channel2、3
             ;AD初始化
;*-------------------------------AD初始化-----------------------------------------------------------*
;*AD0中用8个通道PROTAD0~7,AD1中用7个通道PROTAD8~14,共用15个通道		 			   *			     
;*--------------------------------------------------------------------------------------------------*          
            
 AD_INI:  LDAA #$C0
          STAA ATD0CTL2;开启AD0模块,每次读取结果寄存器后快速标志位自动清零,等待模式下禁止转换,忽略;禁止中断
	        LDAA #$00
	        STAA ATD0CTL3;结果寄存器映射到转换序列,转换通道数为8
	        LDAA #$81
          STAA ATD0CTL4;AD精度为8位,采样时间为2AD时钟周期,AD的时钟周期为2MHZ
         	LDAA #$B0
	        STAA ATD0CTL5;连续转换模式,无符号,右对齐,多通道转换,从通道0开始转换
	        LDAA #$00
	        STAA ATD0DIEN;禁止数字输入缓冲
          LDAA #$C0
          STAA ATD1CTL2;开启AD1模块,每次读取结果寄存器后快速标志位自动清零,等待模式下禁止转换,忽略;禁止中断
	        LDAA #$00
	        STAA ATD1CTL3;结果寄存器映射到转换序列,转换通道数为8
	        LDAA #$81
          STAA ATD1CTL4;AD精度为8位,采样时间为2AD时钟周期,AD的时钟周期为2MHZ
	        LDAA #$B0
	        STAA ATD1CTL5;连续转换模式,无符号,右对齐,多通道转换,从通道0开始转换
	        LDAA #$00
	        STAA ATD1DIEN;禁止数字输入缓冲	       
;调用延时子程序
         ;LDX #$32
;Delaysub:
        
          ;DBNE  X,Delaysub
;******************************************************************************
;*********************脉冲累加初始化************************************************ 
 PAI_INI: LDAA #$02     
          STAA TCTL4  ;设置通道0,1捕捉上升沿   用通道0,1级联,结果放于PACN10,单片机输入引脚为IC0
          LDAA #$40  
          STAA PBCTL  ;脉冲累加器打开,记录下降沿事件
          LDAA #$80
          STAA TSCR1  ;关闭计数器
          LDAA #$03
          STAA ICPAR  ;使能累加器
;******************************************************************************
;**********************串行口通信初始化****************************************
SCI_INI: LDY #$007A
         LDD #$1200
         LDX #$2580
         EDIV
         STY SCI0BD
         LDAA #$00
         STAA SCI0CR1
         LDAA #$0C
         STAA SCI0CR2
;******************************************************************************

;//***********数据预处理***************//
;*--------------------------------------------------------------------------------------------*
;*程序功能:最小值和次小值地址送内存单元ONE和TWO						     *
;*程序入口:AD_Value中的十个AD值								     *
;*程序出口:存放最小AD值和次小AD值的地址,送ONE和TWO中。					     *
;*--------------------------------------------------------------------------------------------*
          CLR COUNT            
  AD_VUP: LDAA  #$FF
          STAA  DDRB
          LDAA  #$00
          STAA  PORTB
          
       J0:BRCLR ATD0STAT1,#$01,J0
          LDX  #ATD0DR0L    ;将AD0转换模块的结果寄存器0的地址送入到X中
          LDY  #AD_Value+0  ;将AD_VALUE+0的地址送入到Y中
          LDAA 0,X          ;将结果寄存器中的内容送入到A中
	        STAA 0,Y          ;再将结果寄存器中的内容送到AD_value+0中
	        
	     J1:BRCLR ATD0STAT1,#$02,J1
	        LDX  #ATD0DR1L    
          LDY  #AD_Value+1  
          LDAA 0,X          
	        STAA 0,Y 
	        
	     J2:BRCLR ATD0STAT1,#$04,J2         
          LDX  #ATD0DR2L    
          LDY  #AD_Value+2 
          LDAA 0,X          
	        STAA 0,Y 
	        
	     J3:BRCLR ATD0STAT1,#$08,J3        
	        LDX  #ATD0DR3L    
          LDY  #AD_Value+3  
          LDAA 0,X         
	        STAA 0,Y
	        
	     J4:BRCLR ATD0STAT1,#$10,J4          
	        LDX  #ATD0DR4L    
          LDY  #AD_Value+4  
          LDAA 0,X          
	        STAA 0,Y 
	        
	     J5:BRCLR ATD0STAT1,#$20,J5         
          LDX  #ATD0DR5L    
          LDY  #AD_Value+5 
          LDAA 0,X         
	        STAA 0,Y 
	        
	     J6:BRCLR ATD0STAT1,#$40,J6         
	        LDX  #ATD0DR6L    
          LDY  #AD_Value+6  

⌨️ 快捷键说明

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