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

📄 test10.asm

📁 试验仪自检程序
💻 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.
//========================================================

//============================================================
//  工程名称:test10.spj
//  功能描述:  IRQ5中断有两个中断源:2Hz和4Hz,分别控制二极管的亮灭
//        即2Hz中断控制IOA0-IOA3连接的LED灯,4Hz中断控制IOB0-IOB3连接的LED灯;
//  文件来源:《实验仪实验指导书》,"实验十二	 IRQ5中断实验"  第38页
//  IDE环境:   SUNPLUS u'nSPTM  IDE 1.8.4
//
//  涉及的库:
//  组成文件:
//    	      test10.asm         
//===============================================

//============================================================
// 文件名称:test10.asm
// 实现功能: IRQ5中断有两个中断源:2Hz和4Hz,分别控制二极管的亮灭
//        即2Hz中断控制IOA0-IOA3连接的LED灯,4Hz中断控制IOB0-IOB3连接的LED灯;
//        A口的低四位接LED灯,B口的低四位接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_CTRL_NEW	0x702D;
		.define		P_INT_CLEAR	    0x7011;

		.ram
		.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=0x000c     					//开中断IRQ5_4Hz和IRQ5_2Hz
		[P_INT_CTRL]=r1 
		[P_INT_CTRL_NEW]=r1 
		r1=0 
		[TIME2]=r1 
		[TIME4]=r1 
		int irq 
loop:
		nop 
		nop 
		nop
		nop
		jmp loop 	

		.text	
		.public _IRQ5
//============================================================= 
// 函数名称:  _IRQ5
// 功能描述:  IRQ5中断有两个中断源:2Hz和4Hz,分别控制二极管的亮灭
//        即2Hz中断控制IOA0-IOA3连接的LED灯,4Hz中断控制IOB0-IOB3连接的LED灯;
//        A口的低四位接LED灯,B口的低四位接LED灯.
//入口参数:     无
// 出口参数:    无
// 注意事项:    仅为用户模型
//=================================================================
_IRQ5:	
		push r1,r5 to [sp]				//压栈保护  
		r1=0x0008 	    
		test r1,[P_INT_CTRL] 	    	//比较是否为4Hz的中断源
		jnz l_irq5_4 			    	//是,则转至对应程序段   	
l_irq5_2:								//否,则进入2Hz程序段
		r1=0x0004      
		[P_INT_CLEAR]=r1 
		r2=[TIME2] 
		r2+=0x0001 
		[TIME2]=r2   
		cmp r2,2				    	//比较是否为1秒
		jbe LED2HZ_OFF					//小于等于则LED灭
		r1=0x000f 						//大于则LED亮					 
		[P_IOA_DATA]=r1 
		cmp r2,3				    	//比较是否为两秒
		jbe LED2Hz_RET					//小于等于则LED继续亮    
		r2=0x000 		    			//否则,TIME1单元清零,返回中断
		[TIME2]=r2 
		jmp LED2Hz_RET
LED2HZ_OFF:
		r1=0x0000 			 
		[P_IOA_DATA]=r1 
LED2Hz_RET:   
		pop r1,r5 from [sp]
		RETI    

l_irq5_4:
		r1=0x0008     
		[P_INT_CLEAR]=r1 
		r2=[TIME4] 
		r2+=0x0001 
		[TIME4]=r2    
		cmp r2,3				    	//比较是否为0.5秒
		jbe LED4HZ_OFF					//小于等于则LED灭	
		r1=0x00f0 						//大于则LED亮						 
		[P_IOA_DATA]=r1 
		cmp r2,7				   	 	//比较是否为1秒 
		jbe LED4Hz_RET					//小于等于则LED继续亮    
		r2=0x000 						//否则,TIME2单元清零,返回中断 
		[TIME4]=r2 
		jmp LED4Hz_RET
LED4HZ_OFF:
		r1=0x0000; 			 
		[P_IOA_DATA]=r1 
		LED4Hz_RET:
		pop r1,r5 from [sp]
		RETI

⌨️ 快捷键说明

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