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

📄 test11.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.
//========================================================

//============================================================
//  工程名称:test11.spj
//  功能描述:  IRQ6中断有两个中断源:IRQ6_TMB1和IRQ6_TMB2,分别控制A口低4位连接的LED灯
//        和B口低4位连接的LED灯
//  文件来源:《实验仪实验指导书》,"实验十三	IRQ6中断实验"   第42页
//  IDE环境:   SUNPLUS u'nSPTM  IDE 1.8.4
//
//  涉及的库:
//  组成文件:
//    	      test11.asm
//===============================================

//============================================================
// 文件名称:test11.asm
// 实现功能: IRQ6中断有两个中断源:IRQ6_TMB1和IRQ6_TMB2,分别控制A口低4位连接的LED灯
//        和B口低4位连接的LED灯
//============================================================

		.define		tmb1clk_8Hz 		0x0000 
		.define		tmb1clk_16Hz 		0x0001 
		.define		tmb1clk_32Hz 		0x0002 
		.define		tmb1clk_64Hz 		0x0003 
		.define		tmb2clk_128Hz		0x0000 
		.define		tmb2clk_256Hz 		0x0004 
		.define		tmb2clk_512Hz 		0x0008 
		.define		tmb2clk_1024Hz 	    0x000c
		.define		tmb1_clk  		tmb1clk_64Hz
		.define		tmb2_clk  		tmb2clk_128Hz 
		.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_Timebase_setup	0x700e	 
		.define		P_Timebase_clear	0x700f	 

		.ram
		.var TIME1
		.var TIME2
 
		.code
		.public _main
//============================================================= 
// 函数名称:  _main
// 功能描述: 初始化
// 语法格式:  _main
//入口参数:     无
// 出口参数:    无
// 注意事项:    仅为用户模型
//=================================================================
_main:
		int off 
		r1=0x000f 							//设置IOA0-IOA3口为同相高电平输出口
		[P_IOA_ATTRI]=r1 
		[P_IOA_DIR]=r1  
		[P_IOA_DATA]=r1 
		r1=0x004f 							//设置IOB0-IOB3,IOB6口为同相高电平输出口
		[P_IOB_ATTRI]=r1 
		[P_IOB_DIR]=r1 
		[P_IOB_DATA]=r1 
		r1=tmb1_clk
		r1|=tmb2_clk
		[P_Timebase_setup]=r1
		r1=0x0003 						   //开中断IRQ6_TMB1和IRQ6_TMB2
		[P_INT_CTRL]=r1 
		r1=0 
		[TIME1]=r1 
		[TIME2]=r1 
		int	irq;
loop:
		nop 
		nop 
		nop
		nop
		jmp loop 
	
		.text	
		.public _IRQ6
//============================================================= 
// 函数名称:  _IRQ6
// 功能描述: IRQ6中断有两个中断源:IRQ6_TMB1和IRQ6_TMB2,分别控制A口低4位连接的LED灯
//        和B口低4位连接的LED灯
//入口参数:     无
// 出口参数:    无
// 注意事项:    仅为用户模型
//=================================================================
_IRQ6:	
		push r1,r5 to [sp]					//压栈保护     
		r1=0x0001 	    
		test r1,[P_INT_CTRL] 				//比较是否为IRQ6_TMB2的中断源
		jnz l_irq6_tmb2						//是,则转至对应程序段
l_irq6_tmb1:							    //否,则进入IRQ6_TMB1程序段
		r2=[TIME1] 
		r2+=0x0001 
		[TIME1]=r2   
		cmp r2,64							//比较是否为1秒
		jbe LED1_OFF						//小于等于则LED灭
		r1=0x000f 						    //大于则LED亮					 
		[P_IOA_DATA]=r1 
		cmp r2,128						    //比较是否为两秒
		jbe LED1_RET						//小于等于则LED继续亮    
		r2=0x000 						    //否则,TIME1单元清零,返回中断
		[TIME1]= r2 
		jmp LED1_RET
LED1_OFF:
		r1=0x0000 			 
		[P_IOA_DATA]=r1 
LED1_RET:
		r1=0x0002      
		[P_INT_CLEAR]=r1 
		pop r1,r5 from [sp]
		RETI    
 
l_irq6_tmb2:
		r2=[TIME2] 
		r2+=0x0001 
		[TIME2]=r2   
		cmp r2,64							//比较是否为0.5秒
		jbe LED2_OFF					  	//小于等于则LED灭	
		r1=0x004f 					  	    //大于则LED亮						 
		[P_IOB_DATA]=r1 
		cmp r2,128						    //比较是否为1秒
		jbe LED2_RET						//小于等于则LED继续亮    
		r2=0x0000						    //否则,TIME2单元清零,返回中断
		[TIME2]= r2 
		jmp LED2_RET

LED2_OFF:
		r1=0x0040 			 
		[P_IOB_DATA]=r1 

LED2_RET:
		r1=0x0001     
		[P_INT_CLEAR]=r1 
		pop r1,r5 from [sp]
		RETI

⌨️ 快捷键说明

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