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

📄 ints.asm

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 ASM
字号:
//////////////////////////////////////////////////
//描述:利用定时器B 定时0.5s 使A口低四位的LED闪烁
//利用时基信号1024Hz 中断定时1s,使IOA4--IOA7连接的LED闪烁
//硬件连接:IOA0--IOA3接4个LED 
//         IOA4--IOA7接4个LED 
///////////////////////////////////////////////////
.INCLUDE    hardware.inc
.DEFINE     RUN_TIMERB           0x0400   		//定义启动定时器
.DEFINE     TIMER_DATA_FOR_4KHZ (0xffff - 2048) //定时0.5秒F
.DEFINE     RUN_TIMEBASE_1024    0x0010   		//时基信号1024hz中断位
.DEFINE		TIMER_CLKA_4096		 0x0004;  		//时钟源A 选择4096Hz 
.RAM    
.VAR    	C_IOA_LED1,C_IOA_LED2      			//C_C_IOA_LED1为定时器B LED亮灭数据,C_IOA_LED2为时基信号LED亮灭的数据       
.VAR    	C_Clock_Cnt;       					//时基信号的计数器
.CODE
.PUBLIC 	_main
_main:
	int off 
	r1=0xffff 									//IOA口为输出口
	[P_IOA_Attrib]=r1 
	[P_IOA_Dir]=r1 
	r1=0x00ff 
	[P_IOA_Data]=r1;	
	[C_IOA_LED1] = r1;     
	[C_IOA_LED2] = r1;
                         						//定时器B的预置数
	r1 = TIMER_DATA_FOR_4KHZ
	[P_TimerB_Data]=r1
                         						//定义使用的时钟源频率时钟源A为4096Hz时
	r1 = TIMER_CLKA_4096
	[P_TimerB_Ctrl]=r1 
                         						//开放定时器B中断和时基信号1024hz中断
	r1 = RUN_TIMEBASE_1024 +  RUN_TIMERB  
	[P_INT_Ctrl]=r1 
	INT IRQ                  					//开IRQ中断
              
                         						//空操作
loop:
    nop;
    goto loop;
    
//==================================================================
//定时器A中断程序
//功能:使IOA0--IOA3位接的4个LED0.5s闪烁
//=================================================================== 
.text   
.public _IRQ2;    
_IRQ2:	
   	push r1,r5 to [sp]   						//现场保护   
   
  	r1 = [C_IOA_LED1]             				//LED 赋值
  	r1 &= 0x000f;
   	r2 = [P_IOA_Data]
   	r2 &= 0x00f0;
   	r1|=r2
   	[P_IOA_Data]=r1          
                            
  	 r1 ^= 0xffff;
   	[C_IOA_LED1] = r1; 
                            					//清中断
   	r1=0x0400 
   	[P_INT_Clear]=r1  
                            					//恢复现场
   	pop r1,r5 from [sp]   
   	reti                     					//返回
 //===================================================================
 //1024Hz时基信号中断
 //功能:使IOA4--IOA7接的4个LED 1秒闪烁
 //===================================================================
   
.text	
.public _IRQ4
_IRQ4:	
	push r1,r5 to [sp]							//压栈保护;
	r1=0x0010;
	test r1,[P_INT_Ctrl];						//比较是否为1KHz的中断源;
	jnz l_irq4_1k;								//是,则转至对应程序段;
	r1=0x0020;				
	test r1,[P_INT_Ctrl]    					//否,则比较是否为2KHz的中断源;	 
	jnz l_irq4_2k;								//是,则转至对应程序段;
	
l_irq4_4k:                  					//否,则进入4KHz程序段;
   	r1 = 0x0040;
   	goto exit_int;   
           
l_irq4_2k:
   	goto exit_int;
   
l_irq4_1k:
   	r1 = [C_Clock_Cnt]
   	cmp r1,1024;
   	je LED_pro;
   	r1 += 1;
   	[C_Clock_Cnt] = r1;
   	r1 = 0x0010
   	goto exit_int;
                      							//LED赋值
 LED_pro:
   	r1 = [C_IOA_LED2]    
	r1 &= 0x00f0
   	r2 = [P_IOA_Data]
   	r2 &= 0x000f
   	r1 |= r2
	[P_IOA_Data]=r1          
   	r1 ^= 0xffff;
   	[C_IOA_LED2] = r1; 
   	r1 = 0x0000
   	[C_Clock_Cnt] = r1;  						//清时基计数器
   	r1 = 0x0010
exit_int:
   	[P_INT_Clear] = r1;   
  	 pop r1,r5 from [sp]
   	reti;                      

⌨️ 快捷键说明

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