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

📄 main.asm

📁 2407的一些源代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;==========================================================================*
* 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"          ;头文件
        .bss  	GPR0,1              ;变量设置
        .bss    COUNT,1
        .bss    L_COUNT,1
        .bss    S_COUNT,1
        .bss    S_DATA,1
        .bss    FLAG,1
        .bss 	DATA,1
        .bss	DATA_R,1
        .bss	W_CON,1
        .bss	W_ADD,1
        .bss	W_DAT,1
        .bss    R_CON,1
        .bss	R_DAT,1 
        .bss	TEMP,1
        .bss	TEMP1,1
        .bss    TEMP2,1
        .bss    TEMP3,1
        .bss    S0,1                ;时
        .bss    S1,1
        .bss    F0,1                ;分
        .bss    F1,1
        .bss    M0,1                ;秒
        .bss    M1,1
        .bss    DAY0,1              ;天
        .bss    DAY1,1
        .bss    WEEK0,1             ;星期
        .bss    WEEK1,1
        .bss    MON0,1              ;月份
        .bss    MON1,1
        .bss    YEAR0,1             ;年
        .bss    YEAR1,1
        .bss	T_DATA,10
        
        .def  	_c_int0
;======================================================
;系统初始化
;使能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   	#0h,	GPR0              ;整体延时为0
		OUT    	GPR0,	WSGR 
	    LDP   	#SCSR1>>7
	    SPLK  	#0000000000101100B,SCSR1  ;输入时钟频率=1*fin(CPU时钟) 
                                          ;使能SPI,EVA,EVB时钟
        LDP	    #IMR>>7
	    SPLK    #0H,IMR

		LDP		#T1CON>>7
		SPLK	#1044H,T1CON              ;
		SPLK	#0080H,EVAIMRA
		SPLK    #0FFFFH,EVAIFRA
		SPLK	#200,T1PR
		SPLK	#0,T1CNT
		LDP		#COUNT
		SPLK	#0,COUNT
		SPLK	#0,DATA_R

        LDP		#MCRB>>7                  ;初始化设置MCRB,MCRB9~MCRB15必须配置成1
	    SPLK	#0FFFDH,MCRB              ;实现在线仿真功能,写0将引起不可预测后果
	    
	    LDP		#TEMP2
	    SPLK	#0FFFFH,TEMP2
	    OUT		TEMP2,4000H               ;送数据给液晶显示所对应的锁存器,04000H为负责显示锁存器所对应的地址
	    OUT     TEMP2,2000H               ;使I/O控制单元的发光二极管灭
	    OUT     TEMP2,6000H               ;使数码管灭
	    SPLK	#0H,TEMP3
	    OUT		TEMP3,0C000H
	    SPLK	#0FH,S_COUNT              ;
        CLRC	INTM                      ;开中断

MAIN
        CALL    LCD_INIT                  ;调用液晶初始化子程序
        CALL    LCD_SHOW                  ;调用液晶显示子程序
        CALL    TIME_INIT                 ;调用时间初始化子程序
LOOP
        CALL    TIME_READ                 ;调用时间读子程序
        NOP
        LDP		#S_COUNT
        LACC    S_COUNT
        SUB		#1
        SACL    S_COUNT
        BNZ     LOOP
        LDP		#FLAG
        LACC    FLAG
        BNZ     SET_1
        SPLK	#20H,S_DATA
;       CALL    S_CX
        SPLK    #01FH,S_COUNT
        SPLK	#1,FLAG
        B       LOOP
SET_1
        SPLK	#03AH,S_DATA
;       CALL    S_CX
        SPLK	#01FH,S_COUNT
        SPLK	#0,FLAG
        NOP
        NOP
        B       LOOP
;*******************闪烁*********************

;****************时钟芯片初始化**************
TIME_INIT
		LDP		#W_CON           ;复位器件
		SPLK	#0A2H,W_CON
		SPLK	#00H,W_ADD
		SPLK	#28H,W_DAT
		CALL	T_WRITE 
			
        LDP		#W_CON
        SPLK	#20H,W_DAT       ;芯片不使能
        CALL	T_WRITE 
            
                 
        LDP		#W_CON
        SPLK	#0DH,W_ADD       ;
        SPLK	#80H,W_DAT
        CALL	T_WRITE     
        
        LDP		#W_CON           ;
        SPLK	#0EH,W_ADD
        SPLK	#00H,W_DAT
        CALL	T_WRITE     
        
        LDP		#W_CON           ;SECONDS   30秒
        SPLK	#02H,W_ADD
        SPLK	#30H,W_DAT
        CALL	T_WRITE		  
        
        LDP		#W_CON           ;MINUTES   59分
        SPLK	#03H,W_ADD
        SPLK	#59H,W_DAT
        CALL	T_WRITE       
        
        LDP		#W_CON           ;HOURS     ;23时
        SPLK	#04H,W_ADD
        SPLK	#23H,W_DAT
        CALL	T_WRITE  
        
        LDP		#W_CON           ;DAYS      ;31号
        SPLK	#05H,W_ADD
        SPLK	#31H,W_DAT
        CALL	T_WRITE   
       
        LDP		#W_CON           ;week      ;星期五
        SPLK	#06H,W_ADD
        SPLK	#05H,W_DAT
        CALL	T_WRITE
        
        LDP		#W_CON           ;MONTHS    ;12月
        SPLK	#07H,W_ADD
        SPLK	#12H,W_DAT
        CALL	T_WRITE     
        
        LDP		#W_CON           ;YEAR      ;06年
        SPLK	#08H,W_ADD
        SPLK	#06H,W_DAT
        CALL	T_WRITE
         
        LDP		#W_CON           ;启动
        SPLK	#00H,W_ADD
        SPLK	#08H,W_DAT
        CALL	T_WRITE 
        RET
;****************读取时钟信息********************
TIME_READ  

;===================MIAO=====================     
		LDP		#W_CON
		SPLK	#0A2H,W_CON
		SPLK	#0A3H,R_CON
		SPLK	#02H,W_ADD             ;秒
		CALL	T_READ
		LDP		#R_DAT
		LACC	R_DAT
		SACL    TEMP
		AND     #0FH
		OR      #030H
		SACL    M0
		LACC    R_DAT
		RPT     #3H
		SFR
		AND     #07H
		OR      #030H
		SACL    M1
		CALL	DELAY2
				
;===================FEN=======================
		LDP		#W_CON
		SPLK	#0A2H,W_CON
		SPLK	#0A3H,R_CON
		SPLK	#03H,W_ADD             ;分
		CALL	T_READ
		LDP		#R_DAT
		LACC	R_DAT
		AND     #0FH
		OR      #030H
		SACL    F0
		LACC    R_DAT
		RPT     #3H
		SFR
		AND     #07H
		OR      #030H
		SACL    F1
		CALL	DELAY2

;==============SHI========================
		
		LDP		#W_CON
		SPLK	#0A2H,W_CON
		SPLK	#0A3H,R_CON
		SPLK	#04H,W_ADD             ;时
		CALL	T_READ
		LDP		#R_DAT
		LACC	R_DAT
		AND     #0FH
		OR      #030H
		SACL    S0
		LACC    R_DAT
		RPT     #3H
		SFR
		AND     #03H
		OR      #030H
		SACL    S1
		CALL	DELAY2
		
;==============day========================
		
		LDP		#W_CON
		SPLK	#0A2H,W_CON
		SPLK	#0A3H,R_CON
		SPLK	#05H,W_ADD             ;天
		CALL	T_READ
		LDP		#R_DAT
		LACC	R_DAT
		AND     #0FH
		OR      #030H
		SACL    DAY0
		LACC    R_DAT
		RPT     #3H
		SFR
		AND     #03H
		OR      #030H
		SACL    DAY1
		CALL	DELAY2
		
;==============week========================
		
		LDP		#W_CON
		SPLK	#0A2H,W_CON
		SPLK	#0A3H,R_CON
		SPLK	#06H,W_ADD             ;星期
		CALL	T_READ
		LDP		#R_DAT
		LACC	R_DAT
		AND     #07H
		SFL
		ADD     #TABLE2
		TBLR    WEEK1
		ADD     #1
		TBLR    WEEK0
		CALL	DELAY2		
		
;==============months========================
		
		LDP		#W_CON
		SPLK	#0A2H,W_CON
		SPLK	#0A3H,R_CON
		SPLK	#07H,W_ADD             ;月份
		CALL	T_READ
		LDP		#R_DAT
		LACC	R_DAT
		AND     #0FH
		OR      #030H
		SACL    MON0
		LACC    R_DAT
		RPT     #3H
		SFR
		AND     #01H
		OR      #030H
		SACL    MON1
		CALL	DELAY2		
		
;==============YEAR========================
		
		LDP		#W_CON
		SPLK	#0A2H,W_CON
		SPLK	#0A3H,R_CON
		SPLK	#08H,W_ADD             ;年
		CALL	T_READ
		LDP		#R_DAT
		LACC	R_DAT
		AND     #0FH
		OR      #030H
		SACL    YEAR0
		LACC    R_DAT
		RPT     #3H
		SFR
		AND     #0FH
		OR      #030H
		SACL    YEAR1
		CALL	DELAY2

;============================================
        LDP		#TEMP1
		SPLK	#91H,TEMP1
		CALL	ADD_SET
		
		LDP		#TEMP1
		LACC    S1
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		LACC    S0
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		LACC    S_DATA
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		LACC    F1
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		LACC    F0
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		LACC    S_DATA
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		LACC    M1
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		LACC    M0
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		SPLK	#9EH,TEMP1         ;DAY
		CALL	ADD_SET
		
		LDP		#TEMP1
		LACC    DAY1
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		LACC    DAY0
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		SPLK	#8EH,TEMP1         ;WEEK
		call	ADD_SET
		
		LDP		#TEMP1
		LACC    WEEK1
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		LACC    WEEK0
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		SPLK	#9CH,TEMP1          ;MONTHS
		call	ADD_SET
		
		LDP		#TEMP1
		LACC    MON1
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		LACC    MON0
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		SPLK	#9AH,TEMP1          ;YEAR
		CALL	ADD_SET
		
		LDP		#TEMP1
		LACC    YEAR1
		SACL    TEMP1
		CALL    DATA_SET
		
		LDP		#TEMP1
		LACC    YEAR0
		SACL    TEMP1
		CALL    DATA_SET
		RET
		
		
	 
;****************时钟芯片写数据******************
T_WRITE
		NOP
		NOP
		CALL	START
		LDP		#W_CON
		LACC	W_CON
		SACL	DATA
		CALL	WRITE
		CALL	ACK
		LDP		#W_CON
		LACC	W_ADD
		SACL    DATA
		CALL	WRITE
		CALL	ACK
		LDP		#W_DAT
		LACC	W_DAT
	    SACL	DATA
		CALL	WRITE
		CALL	ACK
		CALL	STOP 
		CALL	DELAY2
		RET 
;*****************WRITE END**************************

;***************时钟芯片读数据***********************		
T_READ	;             
		CALL	START
		LDP		#W_CON
		LACC	W_CON
		SACL	DATA
		CALL	WRITE
		CALL	ACK
		LDP		#W_ADD
		LACC	W_ADD
		SACL	DATA
		CALL	WRITE
		CALL	ACK 
		CALL	START
		LDP		#R_CON

⌨️ 快捷键说明

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