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

📄 systeminital.asm

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 ASM
字号:
//==================================================================================//
// 文件名:    SystemInital.asm
// 描  述:   用于初始化IO,以及D12芯片,系统时钟、中断等。
// 日  期:   2003/04/03
// 库文件:   NONE
//==================================================================================//

.include hardware.inc; 

.PUBLIC _SP_GetCh;
.public _System_Initial0; 
.public	F_System_Initial0;	
.public F_Interrupt_On; 
.public _Interrupt_On;
.public _Interrupt_On_True
.public _Delay1;
.public F_Delay1; 
.public _Interrupt_Off; 
.public F_Interrupt_Off; 
.public _Interrupt_Off_True
.public _SP_InitWriteSRAM
.public F_SP_InitWriteSRAM 
.public F_SP_InitReadSRAM 
.public _SP_InitReadSRAM 
.PUBLIC F_SP_WriteSRAM
.PUBLIC F_SP_ReadSRAM

.define FoscCLK_20 	0x00;		  		//Fosc=20.480MHz
.define FoscCLK_24 	0x20;		  		//Fosc=24.576MHz
.define FoscCLK_32 	0x40;		  		//Fosc=32.768MHz
.define FoscCLK_40 	0x60;		  		//Fosc=40.960MHz
.define FoscCLK_49 	0x80;		  		//Fosc=49.152MHz

.define CPUCLK_Fosc      0x00;    		//CPUClk选Fosc
.define CPUCLK_Fosc2     0x01;    		//CPUClk选Fosc/2
.define CPUCLK_Fosc4     0x02;    		//CPUClk选Fosc/4
.define CPUCLK_Fosc8     0x03;    		//CPUClk选Fosc/8
.define CPUCLK_Fosc16    0x04;    		//CPUClk选Fosc/16
.define CPUCLK_Fosc32    0x05;    		//CPUClk选Fosc/32
.define CPUCLK_Fosc64    0x06;    		//CPUClk选Fosc/64

.define Fosc_CLK_RATE 	FoscCLK_49;     //选择不同Fosc信号频率
.define CPU_CLK_RATE    CPUCLK_Fosc;  	//改变CPUClk频率

.code 	

//=====================================================================
// 函数:    System_Initial0
// 语法:    void System_Initial0(void)        (for c language)
// 描述:    用于初始化IO,以及D12芯片,系统时钟、中断
// 参数:    无
// 返回:    无
//=====================================================================
_System_Initial0: .PROC
F_System_Initial0:
    push r1,r1 to [sp];
    int off;
    r1=0x0100; 				//开中断IRQ3_EXT1
    [R_InterruptStatus]=R1;
    [P_INT_Ctrl_New]=r1; 
    R1=Fosc_CLK_RATE;       //Fosc
	R1|=CPU_CLK_RATE;       //CPUClk       	
    [P_SystemClock]=R1;	
    r1=0x00f0; 				//设置IOA8-IOA15为带上拉电阻地输入
	[P_IOA_Dir]=r1;        
	[P_IOA_Attrib]=r1;     
	r1=0xfff0;            
	[P_IOA_Data]=r1; 
	//************************************************//
	//***IOB0,IOB1为同相高电平输出********************//
	//***IOB2=INT_N=1为带上拉电阻的输入**************//
	//***IOB3=RESET_N=1为同相高电平输出***************//
	//***IOB4=RD_N=1,IOB5=WR_N=1为同相高电平输出****//
	//***IOB6=ALE=0为同相低电平输出******************//
	//***IOB7为带下拉电阻输入*************************//
	//***IOB8=CS_N=0同相低电平输出*******************//
	//************************************************//
    r1=0x017b;              //CS_N=IOB8=0,ALE=IOB6=0,WR_N=IOB5=1,RD_N=IOB4=1;
    [P_IOB_Dir]=r1;         //IOB3=RESET_N=1,IOB2=INT_N=1,IOB0、IOB1输出
	[P_IOB_Attrib]=r1;      //为选中D12
	r1=0x003F ;             
    [P_IOB_Data]=r1;     

    
    r1=0x0037; 
    [P_IOB_Data]=r1;   		//CS_N=0,ALE=0,WR_N=1,RD_N=1,RESET_N=0,INT_N=1
    call F_Delay1;      	//系统复位延时。
    r1=0x003f;
    [P_IOB_Data]=r1;   		//CS_N=0,ALE=0,WR_N=1,RD_N=1,RESET_N=1,INT_N=1
    

	pop r1,r1 from [sp];
   	retf; 
.endp;

//=====================================================================
// 函数:    Interrupt_On
// 语法:    void Interrupt_On(void)        (for c language)
// 描述:    开IRQ中断
// 参数:    无
// 返回:    无
//=====================================================================
_Interrupt_On: .PROC
F_Interrupt_On:
	IRQ ON
    retf; 
.endp; 
//=====================================================================
// 函数:    Interrupt_Off
// 语法:    void Interrupt_Off(void)        (for c language)
// 描述:    关IRQ中断
// 参数:    无
// 返回:    无
//=====================================================================
_Interrupt_Off: .PROC
F_Interrupt_Off:
    
    IRQ OFF
    retf;
.endp; 
_Interrupt_On_True: .PROC
F_Interrupt_On_True:
    INT FIQ,IRQ
    retf; 
.endp; 

_Interrupt_Off_True: .PROC
F_Interrupt_Off_True:
     INT OFF
    retf;
.endp; 

//=====================================================================
// 函数:    Delay1
// 语法:    void Delay1(void)        (for c language)
// 描述:    延时
// 参数:    无
// 返回:    无
//=====================================================================
_Delay1: .proc
F_Delay1: 
    push r1,r2 to [sp];
    r2=0x000f;
Loop1:
    r1=0xffff;
Loop2:    
    r1-=1;
    jnz Loop2;
    r2-=1;
    jnz Loop1;
    nop;
    pop r1,r2 from [sp];
    retf;
.endp
//----------------------------
// FOR SRAM
//----------------------------
_SP_InitWriteSRAM: .proc
F_SP_InitWriteSRAM:
		push r1 to [sp]
	    pop r1 from [sp]
        retf 
        .endp
_SP_InitReadSRAM: .PROC
F_SP_InitReadSRAM:
		push r1 to [sp]
        pop r1 from [sp]
        retf 
        .ENDP
F_SP_WriteSRAM:	.proc
        push r1,r3 to [sp]
        pop r1,r3 from [sp]
        retf 
        .endp
        
F_SP_ReadSRAM: .proc
        push r2,r4 to [sp]
        pop r2,r4 from [sp]     // don't pop r1(return value)   
        retf 
        .endp

_SP_GetCh:					
        r1 = [P_IOA_Data];
        r1&=0x0007;
        retf;
.public	 _SP_ClrWatchDog;
_SP_ClrWatchDog:
		push r1 to [sp];
		r1=0x0001;
		[P_Watchdog_Clear]=r1;
		pop r1 from [sp];
		retf;

⌨️ 快捷键说明

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