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

📄 test9.asm

📁 IRQ4中断有三个中断源:1KHz、2Kz和4KHz,每一个中断分别控制与IOA0-IOA1,IOA2-IOA3和IOA4-IOA7相连的LED灯
💻 ASM
字号:
//======================================================
//  The information contained herein is the exclusive property of
//  Sunnnorth Technology Co. And shall not be distributed, reproduced,
//  or disclosed in whole in part without prior written permission.
//              (C) COPYRIGHT 2003  SUNNORTH TECHNOLOGY CO.
//                          ALL RIGHTS RESERVED
//  The entire notice above must be reproduced on all authorized copies.
//========================================================

//============================================================
//  工程名称:test9.spj
//  功能描述:  IRQ4中断有三个中断源:1KHz、2Kz和4KHz,每一个中断分别控制与IOA0-IOA1
//        、IOA2-IOA3和IOA4-IOA7相连的LED灯。
//  文件来源:《实验仪实验指导书》,"实验十一	 IRQ4中断实验"   第33页
//  IDE环境:   SUNPLUS u'nSPTM  IDE 1.8.4
//
//  涉及的库:
//  组成文件:
//    	      test9.asm         
//===============================================

//============================================================
// 文件名称:test9.asm
// 实现功能: IRQ4中断有三个中断源:1KHz、2Kz和4KHz,每一个中断分别控制与IOA0-IOA1
//        、IOA2-IOA3和IOA4-IOA7相连的LED灯。
//============================================================

		.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;

		.ram
		.var TIME1
		.var TIME2
		.var TIME4

		.code
		.public _main
//============================================================= 
// 函数名称:  _main
// 功能描述: 初始化
// 语法格式:  _main
//入口参数:     无
// 出口参数:    无
// 注意事项:    仅为用户模型
//=================================================================
_main:
		int off;
		r1=0x00ff;      					//IOA低八位为同相高电平输出口
		[P_IOA_ATTRI]=r1;
		[P_IOA_DIR]=r1;
		[P_IOA_DATA]=r1;
		r1=0x0040;      					//IOB6为同相高电平输出口
		[P_IOB_ATTRI]=r1;
		[P_IOB_DIR]=r1;
		[P_IOB_DATA]=r1;
		r1=0x0070;  						//开中断IRQ4_4KHz、IRQ4_2KHz和
		//IRQ4_1KHz
		[P_INT_CTRL]=r1;
		r1=0;
		[TIME1]=r1;
		[TIME2]=r1;
		[TIME4]=r1;
		int irq;
loop:
		nop;
		nop;
		nop;
		nop;
		jmp loop;
	
		.text	
		.public _IRQ4
//============================================================= 
// 函数名称:  _IRQ4
// 功能描述: IRQ4中断有三个中断源:1KHz、2Kz和4KHz,每一个中断分别控制与IOA0-IOA1
//        、IOA2-IOA3和IOA4-IOA7相连的LED灯。
//入口参数:     无
// 出口参数:    无
// 注意事项:    仅为用户模型
//=================================================================
_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程序段
		r2=[TIME4];
		r2+=0x0001;
		[TIME4]= r2;    
		cmp r2,0x03ff      					//比较是否为0.25秒
		jbe LED4kHZ_OFF  				//小于等于则LED灭
		r1=0x00f0;  						//大于则LED亮 
		[P_IOA_DATA]=r1; 
		cmp r2,0x07ff      					//比较是否为0.5秒
		jbe LED4kHz_RET  					//小于等于则LED继续亮   
		r2=0x000;  						//否则,TIME4单元清零,返回中断
		[TIME4]= r2;
		jmp LED4kHz_RET
		LED4kHZ_OFF:
		r1=0x0000;				 
		[P_IOA_DATA]=r1; 
		LED4kHz_RET:
		r1=0x0040;	     
		[P_INT_CLEAR]=r1;
		pop r1,r5 from [sp]
		RETI;    	
l_irq4_2k:
		r2=[TIME2];	
		r2+=0x0001;
		[TIME2]= r2;
		cmp r2,0x03ff			    			//比较是否为0.5秒
		jbe LED2kHZ_OFF					//小于等于则LED灭	
		r1^=0x00c0;	 					//大于则LED亮		 
		[P_IOA_DATA]=r1;
		cmp r2,0x07ff			    			//比较是否为1秒
		jbe LED2kHz_RET					//小于等于则LED继续亮    
		r2=0x000;							//否则,TIME2单元清零,返回中断
		[TIME2]= r2;
		jmp LED2kHz_RET
LED2kHZ_OFF:
		r1=0x0000;				 
		[P_IOA_DATA]=r1; 
		LED2kHz_RET:
		r1=0x0020;	 
		[P_INT_CLEAR]=r1;
		pop r1,r5 from [sp]
		RETI	
l_irq4_1k:
		r2=[TIME1];
		r2+=0x0001;
		[TIME1]= r2;    
		cmp r2,0x03ff			    			//比较是否为1秒
		jbe LED1kHZ_OFF					//小于等于则LED灭
		r1=0x0003;						//大于则LED亮		 
		[P_IOA_DATA]=r1; 
		cmp r2,0x07ff			    			//比较是否为两秒
		jbe LED1kHz_RET					//小于等于则LED继续亮    
		r2=0x000;							//否则,TIME1单元清零,返回中断
		[TIME1]= r2;
		jmp LED1kHz_RET
LED1kHZ_OFF:
		r1=0x0000;				 
		[P_IOA_DATA]=r1; 
LED1kHz_RET:
		r1=0x0010;	 
		[P_INT_CLEAR]=r1;
		pop r1,r5 from [sp]
		RETI	

⌨️ 快捷键说明

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