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

📄 main.asm

📁 2407的一些源代码
💻 ASM
字号:

;==========================================================================*
* File name : main.asm *
* Author: Qu Bo *
* Data: 2006.11.19*
* Version: 2.0 *
* Organization: DSP&EMC,National Key Laboratory of Power Electronics, 
*               Zhejiang University, Hangzhou 310027, China *
* Description : PROGRAM TO CONTROL A ELECTRIC CAR USE F2407A * 

;============================================================================*
        .bss    GPR0,1     
        .bss    FLAG,1
        .bss    COUNT,1
        .bss    COUNT1,1
        .bss    TEMP1,1
        .bss    TEMP,1
        .bss    TEMP2,1
        .bss    TEMP3,1
        .bss    TEMP4,1
        .bss    DATA1,1
        .bss    DATA2,1
        .bss    DATA3,1
        .bss    DATA4,1
        .bss    AD_0,1
        .bss    AD_1,1
        .bss    AD_2,1
        .bss    AD_3,1
        .bss    COUNT_NEW,1
        .bss    COUNT_OLD,1
        .bss    FLAG1,1
        .bss    DATA_H,1
        .bss    DATA_L,1
          
        .bss    DLY_TIME,1
        .bss    SHOW_TIME,1
        .include "F2407.h" 		     ;头文件  
		.def    _c_int0,CAP_INT,time_int  

ST0             .SET   0
ST1             .SET   1
ST0_SAVE    	.usect ".blk0",1
ST1_SAVE    	.usect ".blk0",1
ACCH    	    .usect ".blk0",1
ACCL    	    .usect ".blk0",1
P_HI    	    .usect ".blk0",1
P_LO    	    .usect ".blk0",1
T_SAVE    	    .usect ".blk0",1 
;======================================================
;宏子程序
;======================================================
KICK_DOG 	.macro 				     ;看门狗
		LDP 	#00E0h 			
		SPLK 	#05555h, WDKEY
		SPLK	#0AAAAh, WDKEY
		LDP 	#0h 			
		.endm      
;======================================================
;系统初始化
;使能EVA,EVB,A/D等模块。
;====================================================== 
        .text  
        .word   #0ffffh              ;加密位
        .word	#0ffffh
        .word	#0ffffh
        .word	#0ffffh
_c_int0:
        LDP     #0H
        SETC  	INTM                 ;屏蔽总中断程序
        CLRC  	SXM                  ;符号位不作扩展
        LACC 	IFR                  ;清标志
        SACL 	IFR
        CLRC  	CNF                  ;B0为数据存储区
        SETC  	OVM
        LDP   	#WDCR>>7
	    SPLK  	#006FH,WDCR 	     ;看门狗不使能
	    KICK_DOG  
	    SPLK   	#00H,	GPR0
		OUT    	GPR0,	WSGR         ;整体延时为0
	    LDP   	#SCSR1>>7
	    SPLK  	#0000000011111100B,SCSR1;使能ADC,SCI,SPI,CAN,EVB,EVA时钟
	    LDP	  	#IMR>>7
	    SPLK  	#000AH,IMR           ;INT2,INT4使能
	    
	    
	    LDP   	#EVBIMRA>>7
	    SPLK  	#80H,EVBIMRA         ;通用定时器T1,周期中断使能
	    SPLK  	#00H,EVBIMRB         ;通用定时器T2,均不使能
	    SPLK  	#04H,EVBIMRC         ;捕获单元3中断使能
	    SPLK  	#0FFFFH,EVBIFRA      ;写1清除EVB中的所有标志位
	    SPLK  	#0FFFFH,EVBIFRB
	    SPLK  	#0FFFFH,EVBIFRC
                               
	    SPLK    #01046H,T4CON        ;0001 0000 0100 0110  连续增计数,使能定时器,使用自身周期寄存器
	    SPLK    #0,T4CNT

	    LDP		#PCDATDIR>>7
	    SPLK	#0FFFDH,PCDATDIR     ;配置相应引脚为输出,并使输出为高。
	    LDP		#MCRC>>7
	    SPLK	#0FFFFH,MCRC         ;I/O复用采用所有基本功能,使能CAP6
	    LDP     #CAPCONB>>7
	    SPLK	#1208H,CAPCONB       ;定时器4为CAP6计数器0001 0010 0000 1000
;使能CAP6,CAP6选用通用定时器2;CAP4,CAP5选用通用定时器1;CAP6检测下降沿.
	    SPLK	#0,CAPFIFOB          ;所有捕获单元的栈均为空
;======================================================
	    SPLK    #0041H,GPTCONB       ; 
	    SPLK    #164Ch,T3CON         ;16
	    SPLK    #134Ch,T4CON
	    SPLK    #0FH,T3PR            ;定时器1周期寄存器
        SPLK    #0FFFFH,T4PR
	    SPLK    #00H,T3CNT           ;定时器1计数器
	    SPLK    #164CH,T4CNT         ;定时器2计数器
	    SPLK    #1010111000000000B,COMCONB;   
	    SPLK    #00H,ACTRB           ;PWM1-6输出控制
	    SPLK    #0FC0H,DBTCONB       ;死区设置
	    
	    LDP		#MCRB>>7
	    SPLK	#0FFFDH,MCRB
	    LDP		#PCDATDIR>>7
	    SPLK	#0FFFDH,PCDATDIR
	    LDP     #COUNT
	    SPLK	#3,COUNT
	    SPLK    #0fH,COUNT1
        SPLK    #0,DATA_L
        SPLK    #0,DATA_H
        LDP     #TEMP3
        SPLK    #0H,TEMP3
        OUT     TEMP3,6000H          ;使能数码管
        SPLK    #0FFFFH,TEMP4
        OUT     TEMP4,2000H          ;不使能I/O控制单元发光二极管
;======================================================
	    CLRC 	INTM                 ;开中断
PP:     
        NOP
 		NOP
  		NOP
	    B       PP                  
time_int
        LDP     #ST0_SAVE
        SST     #ST0,ST0_SAVE
        SST     #ST1,ST1_SAVE
        LDP		#ACCH
        SACH    ACCH
        SACL    ACCL
        
        LDP     #COUNT
        LACC    COUNT
        BZ      SH1
        SUB     #1
        BZ      SH2
        SUB     #1
        BZ      SH3
        SUB     #1
        BZ      SH4
        B       TIME_END
SH1
        CALL    S_LED4
        B       TIME_END
SH2
        CALL    S_LED3
        B       TIME_END
SH3
        CALL    S_LED2
        B       TIME_END
SH4
        CALL    S_LED1
TIME_END
        LACC    COUNT
        SUB     #1
        SACL    COUNT
        BCND    CNT_END,GT,EQ  ;ACC>0,ACC=0跳转
        SPLK    #3,COUNT
CNT_END
        LDP     #EVBIFRA>>7
        SPLK  	#0FFFFH,EVBIFRA 
        LDP		#ACCH
        LACC    ACCH,16
        ADDS    ACCL
        LDP		#ST1>>7
        LST     #ST1,ST1_SAVE
        LST     #ST0,ST0_SAVE
        CLRC    INTM
        RET
;======================================================
CAP_INT:
;=======================保护现场=======================
        LDP     #ST0_SAVE
        SST     #ST0,ST0_SAVE
        SST     #ST1,ST1_SAVE
        LDP		#ACCH
        SACH    ACCH
        SACL    ACCL
        CLRC    SXM
        LDP	    #T4CNT>>7
        LACC    T4CNT
        LDP		#COUNT_NEW
        SACL    COUNT_NEW
        SUB     COUNT_OLD
        SACL    FLAG1
        LACC    COUNT_NEW
        SACL    COUNT_OLD
        LDP     #EVBIMRA>>7
        SPLK	#04H,EVBIFRC
        LACC    EVBIFRC
        SACL    EVBIFRC
        LDP     #FLAG1
        LACC    DATA_L
        ADD     DATA_H,16
        ADD     FLAG1
        SACL    DATA_L
        SACH    DATA_H
        LACC    COUNT1
        SUB     #1
        SACL    COUNT1
        BNZ     CAP_END
        LACC    DATA_L
        ADD     DATA_H,16
        SFR
        SFR  
        SFR
        SFR
        SFR
        SFR
        SFR
        SACL    FLAG
        SPLK    #128,COUNT1
        SPLK    #0,DATA_L
        SPLK    #0,DATA_H
        CALL    SHOW_L
;======================恢复保护========================  
CAP_END      
        LDP		#ACCH
        LACC    ACCH,16
        ADDS    ACCL
        LDP		#ST1>>7
        LST     #ST1,ST1_SAVE
        LST     #ST0,ST0_SAVE
        CLRC    INTM
        RET
;======================================================
SHOW_L  
        CLRC    SXM 
        LDP	    #DATA1
        SPLK	#4cH,TEMP2
        LACC    TEMP2,16
        ADD     #04b40H
        RPT     #15
        SUBC    FLAG
        SACL    TEMP
        CALL    ZS1
        LDP		#AD_0
        LACC    AD_0
        SACL    DATA1
        LACC    AD_1
        SACL    DATA2
        LACC    AD_2
        SACL    DATA3
        LACC    AD_3
        SACL    DATA4
        RET
ZS1
        CLRC    SXM
        LDP     #TEMP
        LACC    TEMP
        SUB     #9999
        BCND    CON1,LT,EQ      ;ACC<0,ACC=0跳转
        SPLK	#09999,TEMP     
CON1                            ;数据处理,转化为十进制形式
        SPLK	#1000,TEMP2
        LACC    TEMP
        RPT     #15
        SUBC    TEMP2           ;/1000
        SACL    AD_0             
        SACH    TEMP
        
        SPLK	#100,TEMP2
        LACC    TEMP
        RPT     #15
        SUBC    TEMP2           ;/100
        SACL    AD_1
        SACH    TEMP
        
        SPLK	#10,TEMP2
        LACC    TEMP
        RPT     #15
        SUBC    TEMP2           ;/10
        SACL    AD_2
        SACH    AD_3            ;存个位
        RET                    


S_LED1 
		SPLK    #0000h,TEMP1
		OUT     TEMP1,08000h     ;数据线置零
		RPT     #07H
		NOP		
		LDPK    TEMP1
		SPLK    #00E0h,TEMP1     ;LED1 片选 
	 	OUT     TEMP1,06000h
	 	LACC    DATA1
        AND     #00FFH  
		ADD     #TABLE
		TBLR    TEMP
		LACC    TEMP
	 	ADD     #80H
	 	SACL    TEMP             ;加小数点
	 	OUT     TEMP,08000h      ;数据线显示数据
		RET
S_LED2
		SPLK    #0000h,TEMP1
		OUT     TEMP1,08000h
		RPT     #07H
		NOP		
		SPLK    #00d0h,TEMP1	   ;LED2 片选	
	 	OUT     TEMP1,06000h
        LACC    DATA2
		ADD     #TABLE
		TBLR    TEMP	
		OUT     TEMP,08000h
		RET
S_LED3	 	
		SPLK    #0000h,TEMP1
		OUT     TEMP1,08000h
		RPT     #07H
		NOP	 	
		SPLK    #00b0h,TEMP1    ;LED3 片选
	 	OUT     TEMP1,06000h
	 	LACC    DATA3  
		ADD     #TABLE
		TBLR    TEMP
		OUT     TEMP,08000h
		RET
S_LED4	 	
	 	SPLK    #0000h,TEMP1
		OUT     TEMP1,08000h	
		RPT     #07H
		NOP
		SPLK    #0070h,TEMP1    ;LED4 片选
	 	OUT     TEMP1,06000h
	 	LACC    DATA4  
		ADD     #TABLE
		TBLR    TEMP
	 	OUT     TEMP,08000h
		RET
;===============================================		   
TABLE:
	.word	#003Fh      ;0
	.word	#0006h      ;1
	.word	#005Bh      ;2
	.word	#004Fh      ;3
	.word	#0066h      ;4
	.word	#006Dh      ;5
	.word	#007Dh      ;6
	.word	#0007h      ;7
	.word	#007Fh      ;8
	.word	#006Fh      ;9
    .word	#0077h      ;A
	.word	#007Ch      ;B
	.word	#0039h      ;C
	.word	#005Eh      ;D
	.word	#0079h      ;E
	.word	#0071h      ;F	     

    .end       
        

            
            
            
                   

⌨️ 快捷键说明

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