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

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

//============================================================
//  工程名称:test7.spj
//  功能描述: FIQ有FIQ_PWM、FIQ_TMA和FIQ_TMB三个中断源,当定时器A或B
//        计满溢出时产生中断请求信号TA_TIMEOUT_INT或TA_TIMEOUT_INT,
//        CPU响应后进入中断执行相应的子程序控制二极管发光。
//  硬件连接: A口的低四位接LED灯,B口的低四位接LED灯。B6控制8个LED灯的共阴极。
// 
//  文件来源:《实验仪实验指导书》,"实验九 FIQ中断实验" 第24页
//  IDE环境:   SUNPLUS u'nSPTM  IDE 1.8.4
//
//  涉及的库:
//  组成文件:
//    	      test7.asm
//===============================================

//============================================================
// 文件名称:test7.asm
// 实现功能:  FIQ有FIQ_PWM、FIQ_TMA和FIQ_TMB三个中断源,当定时器A或B
//        计满溢出时产生中断请求信号TA_TIMEOUT_INT或TA_TIMEOUT_INT,
//        CPU响应后进入中断执行相应的子程序控制二极管发光。
//        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_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		0x000d; 
		.define		timeb_clk		0x0004;  
.DEFINE P_Watchdog_Clear    0x7012;        // Watchdog Reset

		.code
		.public _main
//============================================================= 
// 函数名称:  _main
// 功能描述: FIQ有FIQ_PWM、FIQ_TMA和FIQ_TMB三个中断源,当定时器A或B
//        计满溢出时产生中断请求信号TA_TIMEOUT_INT或TA_TIMEOUT_INT,
//        CPU响应后进入中断执行相应的子程序控制二极管发光。
//        A口的低四位接LED灯,B口的低四位接LED灯.
// 语法格式:  _main
//入口参数:     无
// 出口参数:    无
// 注意事项:    仅为用户模型
//=================================================================
_main:
		int off 
		r1=0x000f         					//IOA口低四位设为同相高电平输出口
		[P_IOA_ATTRI]=r1 
		[P_IOA_DIR]=r1 
		[P_IOA_DATA]=r1 
		r1=0x004f            				//IOB口的低4位和IOB6设置为同相高电平输出位  
		[P_IOB_DIR]=r1 
		[P_IOB_ATTRI]=r1 
		[P_IOB_DATA]=r1
		r1=0xf09f;                          	//设置计数初值
		[P_TimerA_Data]=r1;
		[P_TimerB_Data]=r1;
		r1=timea_clk;          
		[P_TimerA_Ctrl]=r1;
		r1=timeb_clk; 
		[P_TimerB_Ctrl]=r1;
		r1=0xa800           				//开中断FIQ_PWM、FIQ_TMA、FIQ_TMB
		[P_INT_CTRL]=r1
		int FIQ
loop:
		nop
		nop
		nop
		jmp loop

		.text	
		.public _FIQ		
_FIQ:
		push r1,r5 to [sp]		           	//压栈保护 
		r1=0x0800 	
		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                  	//r1=0x8000
		pop r1,r5 from [sp]   
		reti

FIQ_TMA:   
		r1=0x000f;						   //点亮接在A口低四位的四个LED灯
		[P_IOA_DATA]=r1;                         
		r2=0xffff; 				       	   //延时
delay1:	
		r1=0x0001                    	   //清看门狗
		[P_Watchdog_Clear]=r1
		r2-=1;
		jnz delay1;
		r1=0x0000; 				      	//熄灭LED
		[P_IOA_DATA]=r1; 
		r1=0x2000; 	     
		[P_INT_CLEAR]=r1; 
		pop r1,r5 from [sp];
		reti;

FIQ_TMB:
		r1=0x004f; 				         //点亮接在B口低四位的四个LED灯
		[P_IOB_DATA]=r1;                    
		r2=0xffff;     			         //延时
delay2:	
		r1=0x0001                    	 //清看门狗
		[P_Watchdog_Clear]=r1
		r2-=1;
		jnz delay2;
		r1=0x0040;                        //熄灭LED
		[P_IOB_DATA]=r1;
		r1=0x0800; 
		[P_INT_CLEAR]=r1; 
		pop r1,r5 from [sp];
		reti;

⌨️ 快捷键说明

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