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

📄 more_int.asm

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 ASM
字号:
//=================================================================================
//来源:   《SPCE061单片机原理及应用技术》  第五章  中断系统
//描述:    FIQ有FIQ_PWM、FIQ_TMA和FIQ_TMB三个中断源,当定时器A或B
//          计满溢出时产生中断请求信号TA_TIMEOUT_INT或TA_TIMEOUT_INT,
//          CPU响应后进入中断执行相应的子程序控制二极管发光。
//日期:    2003/05/20
//=================================================================================

.define		P_IOA_Data  	0x7000;
.define		P_IOA_Dir   	0x7002;
.define		P_IOA_Attri 	0x7003;
.define		P_IOB_Data  	0x7005;
.define		P_IOB_Dir   	0x7007;
.define		P_IOB_Attri		0x7008;
.define		P_INT_Ctrl		0x7010;
.define		P_INT_Clear		0x7011;
.define		P_TimerA_Data	0x700A;
.define		P_TimerA_Ctrl	0x700B;
.define		P_TimerB_Data	0x700C;
.define		P_TimerB_Ctrl	0x700D;
.define		timea_clk		0x020d; //1024hz
.define		timeb_clk		0x0004; //4096hz
.ram

.var TA_Flag
.var TB_Flag

.code
.public _main
_main:
	int off 
	R1 = 0xffff 				//IOA口为输出口;
	[P_IOA_Attri] = R1 
	[P_IOA_Dir] = R1 
	R1 = 0x0000 
	[P_IOA_Data] = R1 
	
	R1 = 0xffff 				//B口的低8位设置为输出  
    [P_IOB_Dir] = R1 
	[P_IOB_Attri] = R1 
	R1 = 0x0000 
	[P_IOB_Data] = R1
	
	R1 = 0xff9f;
	[P_TimerA_Data] = R1;
	[P_TimerB_Data] = R1;
	R1 = timea_clk;	 
	[P_TimerA_Ctrl] = R1;
	
	R2 = 0x0004 			  	//开中断IRQ0_TMA、IRQ1_TMA、IRQ1_TMB
	R1 = 0x2000 			  	//开中断FIQ_PWM、FIQ_TMA、FIQ_TMB
	R1 |= R2;
	[P_INT_Ctrl] = R1
   

	int IRQ,FIQ;

loop:
	nop
	nop
	nop
	jmp loop

.text	
.public _FIQ		
_FIQ:
   push R1,R5 to [sp]		//压栈保护 
   

   R1 = 0x0800 
   R2 = [P_INT_Ctrl]	    
   test r1,[P_INT_Ctrl] 	//比较是否为FIQ_TMB	 
   jnz  FIQ_TMB	 			//是,则转至对应程序段 
   r1 = 0x2000 	    
   test R1,[P_INT_Ctrl] 	//否,则比较是否为FIQ_TMA
   jnz  FIQ_TMA 			//是,则转至对应程序段 
 	    
   
FIQ_PWM:					//否,则进入FIQ_PWM中断
	R1 = 0x8000 	     
	[P_INT_Clear] = R1 
	
	pop R1,R5 from [sp]   
	reti

FIQ_TMA:
   R1 = [TA_Flag]
   
   R1 ^= 0xffff 			 			 
   [P_IOA_Data] = R1   
   [TA_Flag] = R1
   R1 = 0x2000 	     
   [P_INT_Clear] = R1 
   pop R1,R5 from [sp]
   reti 

FIQ_TMB:
   
   R1 = 0x0800  	     
   [P_INT_Clear] = R1 
   pop R1,R5 from [sp]
   reti

    	            
.text	
.public _IRQ5
_IRQ5:	
	push R1,R5 to [sp]		//压栈保护    
    R1 = 0x0008 	    
	test R1,[P_INT_Ctrl] 	//比较是否为4Hz的中断源
    jnz l_irq5_4 			//是,则转至对应程序段
   	
l_irq5_2:
     nop;
     nop;
     nop
    //r1 = 0xffff				//否,则进入2Hz程序段			 
	//[P_IOA_DATA]=r1   
    jmp l_irq5_2;

LED2Hz_RET:
    //r1=0x0004      
	//[P_INT_CLEAR]=r1 
    pop R1,R5 from [sp]
    RETI    
l_irq5_4:    
	//[P_INT_CLEAR]=r1 
    pop R1,R5 from [sp]
    RETI

⌨️ 快捷键说明

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