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

📄 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 * 
;==========================================================================*
        .include "F2407.H"              ;头文件
        .def  	_c_int0,_c_int1
;===================以下定义变量和常数=======================
        .bss    GPR0,1 
        .bss    AD_0,1                  ;第一个数码管的值
        .bss    AD_1,1                  ;第二个数码管的值
        .bss    AD_2,1                  ;第三个数码管的值
        .bss    AD_3,1                  ;第四个数码管的值
        .bss    TEMP,1                  ;临时变量
        .bss    TEMP1,1                 ;临时变量
        .bss    DATA1,1                  
        .bss    DATA2,1
        .bss    DATA3,1
        .bss    DATA4,1
        .bss    COUNT,1                 ;计数值
        .bss    COUNT1,1                 ;计数值
        .bss    DLY_TIME,1              ;数码管每次显示的时间
        .bss    SHOW_TIME,1             ;循环周期             
        .bss    INT_FLAG,1
;============================================================
;系统初始化
;使能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 	#MCRA>>7
    	LACL  	MCRA
    	OR      #04H
    	SACL    MCRA
    	
        LDP   	#WDCR>>7
	    SPLK 	#006Fh,	WDCR 	        ;看门狗不使能
	    KICK_DOG  
	    SPLK   	#0FFFh,	GPR0            ;设置整体延时
		OUT   	GPR0, WSGR 
	    LDP  	#SCSR1>>7
	    SPLK  	#0000011010001100B,SCSR1;仅使能ADC EVA EVB时钟 5MHz
	    SPLK    #004Fh,SCSR2
	    LDP	 	#IMR>>7
	    SPLK  	#0001H,IMR              ;中端级1使能
;============================================================
	    LDP   	#EVBIMRA>>7
	    SPLK  	#0H,EVBIMRA             ;禁止T3的所有中断,禁止比较中断4,5,6,禁止功率驱动保护中断B(PDPINTB)                
	    SPLK  	#0H,EVBIMRB             ;禁止T4的所有中断(T4上溢下溢周期比较等)
	    SPLK  	#0H,EVBIMRC             ;禁止捕获中断(CAP4 CAP5 CAP6)
	    SPLK  	#0FFFFH,EVBIFRA         ;清除全部中断标志"写1清0"T3,比较功率保护等
	    SPLK  	#0FFFFH,EVBIFRB         ;清T4所有中断标志
	    SPLK  	#0FFFFH,EVBIFRC         ;清捕获中断标志(CAP4 CAP5 CAP6)
	    SPLK   	#0648H,GPTCONB          ;0000 0110 0100 1000全局通用定时器控制寄存器B    		
	                                    ;T4比较中断启动AD  使能所有通用定时器比较输出
	                                    ;T4比较输出高有效
	    
	    SPLK  	#0h,T3CON               ;定时器3控制寄存器不设置,T4的定时器控制寄存器4设置
	    SPLK  	#0B46H,T4CON    		;连续增减 X/8时钟 内部CPU时钟 比较使能 
                ;0000 1011 0100 0110    ;使用自身寄存器 
	    SPLK  	#0H,T3PR                ;T3周期
	    SPLK  	#02000H,T4PR       		;T4周期值
	    SPLK  	#0H,T3CMPR              ;T3比较值
	    SPLK  	#1000H,T4CMPR      	    ;T4比较值
	    SPLK  	#0H,T3CNT               ;T3计数值
	    SPLK  	#0H,T4CNT               ;T4计数值
	    SPLK  	#0H,COMCONB             ;EVB中比较控制寄存器B
	    SPLK  	#0H,ACTRB               ;EVB中比较方式控制寄存器B
	    SPLK  	#0H,DBTCONB             ;EVB中可编程死区单元
	    LDP		#COUNT
	    SPLK	#0,COUNT                ;设置计数初值
        SPLK	#100,COUNT1
        SPLK    #0,INT_FLAG
	    LDP		#MCRB>>7
	    SPLK	#0FFFDH,MCRB            ;MCRB设置为基本功能,支持在线仿真
	    LDP		#PCDATDIR>>7
	    SPLK	#0FFFDH,PCDATDIR
;============================================================
;外部中断INT    
;============================================================
	    LDP     #0E0H
        SPLK  	#01H,XINT1CR            ;#01使能外部中断2 
                                        ;#00屏蔽外部中断2  
        CLRC  	INTM                    ;INTM=0使能全局中断
                                        ;INTM=1屏蔽全局中断
;============================================================
MAIN 
        LDP	    #DATA1
        LACC    COUNT                   ;计算中断数
        SACL    TEMP                    ;存入TEMP以送显示
        LDP		#AD_0
        SPLK	#0,AD_0
        SPLK	#0,AD_1
        SPLK	#0,AD_2
        SPLK	#0,AD_3
        CALL    ZS1                     ;调用数据处理子程序
        LACC    AD_0
        SACL    DATA1
        LACC    AD_1
        SACL    DATA2
        LACC    AD_2
        SACL    DATA3
        LACC    AD_3
        SACL    DATA4
        
        SPLK	#0FFH,DLY_TIME          ;显示时间
        SPLK	#0FH,SHOW_TIME          ;循环周期
        CALL    SHOW                    ;调用显示子程序
        CALL    SHOW_DLY                ;调用显示时间
        RPT     #10
        NOP
        LDP     #INT_FLAG
        LACC    INT_FLAG
        BCND    MAIN,EQ,LT              ;标志位,等于或小于0跳转到主程序开始
        
        LDP     #COUNT1
        LACC    COUNT1
        SUB     #1
        SACL    COUNT1
        BCND    MAIN,GT                 ;大于0,跳转到主程序开始
                                        ;确保按键按下去一次只加1
        CLRC    INTM                    ;开中断
        SPLK    #120,COUNT1
        B       MAIN
;========================中断处理============================
_c_int1:
        
		LDP  	#0E0H
    	LACL	PIVR
		LDP  	#0E0h
	    LACL    XINT1CR
	    OR      #08000H                 ;清中断标志
	    SACL 	XINT1CR	 
	    LDP		#COUNT
	    LACC    COUNT
	    ADD     #1
	    SACL    COUNT
	    SPLK    #1,INT_FLAG
	    RET
;===============数据处理子程序(转化为10进制)=================
ZS1
		LDP     #TEMP
		LACC	TEMP
		SUB     #1000
		SACL	TEMP
		BCND	XS1,LT                  ;LT,ACC<0
		LDP		#AD_0
		LACC	AD_0
		ADD		#1
		SACL	AD_0
		B       ZS1
XS1
        ADD     #1000                   ;<1000,恢复为原值
        SACL    TEMP
XS_1
        LACC	TEMP
		SUB     #100
		SACL	TEMP
		BCND	XS2,LT
		LDP		#AD_1
		LACC	AD_1
		ADD		#1
		SACL	AD_1
		B       XS_1
XS2     
        ADD     #100
        SACL    TEMP
XS_2
        LACC	TEMP
		SUB     #10
		SACL	TEMP
		BCND	XS3,LT
		LDP		#AD_2
		LACC	AD_2
		ADD		#1
		SACL	AD_2
		B       XS_2
XS3
        ADD     #10
        SACL    AD_3	
        RET
;=====================显示子程序=========================
SHOW   
        LDP		#DATA1
        LACC    DATA1
        SACL    TEMP
        CALL    SEARCH                  ;加偏移量
        CALL    S_LED1                  ;送数码管显示
        
        LACC    DATA2
        SACL    TEMP
        CALL    SEARCH
        CALL    S_LED2
        
        LACC    DATA3
        SACL    TEMP
        CALL    SEARCH
        CALL    S_LED3
        
        LACC    DATA4
        SACL    TEMP
        CALL    SEARCH
        CALL    S_LED4
        
        SPLK    #00FFh,TEMP1
	 	OUT     TEMP1,06000h           ;此地址为使能端,低电平使能
        RET	                           ;这里置高使数码管均不亮  

SEARCH                                 ;置偏移量子程序
        LDP		#TEMP
        LACC    TEMP
        AND     #00FFH                 ;清高位
		ADD     #TABLE
		TBLR    TEMP 
		RET

S_LED1 
		LDPK    TEMP1
		RPT     #0FH
		NOP
		SPLK    #0E0h,TEMP1            ;LED1片选 
	 	OUT     TEMP1,06000h           ;送数据使能LED1
	 	OUT     TEMP,8000h             ;数据线显示数据
		CALL    DELAY                  ;调用延时
		SPLK    #0000h,TEMP1
		OUT     TEMP1,8000h            ;数据线置零
		RET
S_LED2
		RPT     #0FH
		NOP
		SPLK    #0D0h,TEMP1	           ;LED2片选	
	 	OUT     TEMP1,06000h
		OUT     TEMP,8000h
		CALL    DELAY
		SPLK    #0000h,TEMP1
		OUT     TEMP1,8000h
		RET
S_LED3
	 	RPT     #0FH
		NOP
		SPLK    #0B0h,TEMP1            ;LED3 片选
	 	OUT     TEMP1,06000h
		OUT     TEMP,8000h
		CALL    DELAY
		SPLK    #0000h,TEMP1
		OUT     TEMP1,8000h
		RET
S_LED4	 	
	 	RPT     #0FH
		NOP	
		SPLK    #070h,TEMP1            ;LED4片选
	 	OUT     TEMP1,06000h
	 	OUT     TEMP,8000h
		CALL    DELAY
		SPLK    #0000h,TEMP1
		OUT     TEMP1,8000h
		RET

DELAY:
	    CLRC	SXM                    ;允许符号位扩展
	    LDP		#DLY_TIME
	    LACC    DLY_TIME               ;显示时间

DELAY1:
	    SUB		#01                    ;延时子程序
	    RPT		#0FH
	    NOP
	    BCND	DELAY1,NEQ
	    NOP
	    NOP
        RET

SHOW_DLY:
	    CLRC	SXM
	    LDP		#SHOW_TIME
	    LACC    SHOW_TIME

DELAY2:
	    SUB		#01
	    RPT		#0FH
	    NOP
	    BCND	DELAY2,NEQ
	    NOP
	    NOP
        RET

DEAD_LOOP:
        
        NOP
        NOP
        NOP
        B		DEAD_LOOP

;============================================================
;数码管显示字符代码 
;            _1
;          6|  |2
;            _7
;          5|  |3
;            _4    .8
;
;============================================================      
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
            
                   

⌨️ 快捷键说明

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