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

📄 main.asm

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 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.
//======================================================================

//======================================================================
//	工程名称:	ex10_asm_IRQ0_IRQ1_IRQ2
//	功能描述:	《实验箱实验指导书》基础应用实验
//              IRQ0/IRQ1/IRQ2中断
//				使用IRQ1、IRQ2中断使LED按照设定周期闪烁
//  IDE环境:   SUNPLUS u'nSPTM  IDE 2.0.0(or later)
//	涉及的库:	CMacro1016.lib
//	组成文件:	main.asm
//	硬件连接:	IOA口低4位连接1*8LED的4位,IOB口低4位连接1*8LED的4位
//	维护记录:	2005-09-12	v1.0
//
//=======================================================================

//=======================================================================
//	文件名称:	main.asm
//	功能描述:	使用IRQ1、IRQ2中断使LED按照设定周期闪烁
//	维护记录:	2005-09-12	v1.0
//=======================================================================
.DEFINE	P_IOA_Data			0x7000
.DEFINE	P_IOA_Buffer		0x7001
.DEFINE P_IOA_Dir			0x7002
.DEFINE P_IOA_Attrib		0x7003
.DEFINE P_IOB_Data			0x7005
.DEFINE	P_IOB_Buffer		0x7006
.DEFINE P_IOB_Dir			0x7007
.DEFINE P_IOB_Attrib        0x7008

.DEFINE P_TimerA_Data		0x700A
.DEFINE P_TimerA_Ctrl		0x700B
.DEFINE P_TimerB_Data		0x700C
.DEFINE P_TimerB_Ctrl		0x700D
.DEFINE P_INT_Ctrl			0x7010
.DEFINE P_INT_Clear			0x7011
.DEFINE P_Watchdog_Clear	0x7012

.DEFINE C_IRQ2_TMB			0x0400
.DEFINE C_IRQ1_TMA			0x1000
.DEFINE C_IRQ0_PWM			0x4000

.DEFINE	C_4096Hz			0x0004
.DEFINE	C_A1				0x0005
.DEFINE	C_2048Hz			0x0000
.DEFINE	C_B1				0x0030

.CODE

//=========================================================================
//	汇编格式:	_main
//	C格式:		int main(void);
//	实现功能:	使用IRQ1、IRQ2中断使LED按照设定周期闪烁
//	入口参数:	无
//	出口参数:	无
//	破坏寄存器:r1,r2
//=========================================================================

.PUBLIC	_main
_main:
	int off							//关闭中断
	
	r1 = 0x000f						//设置IOA口低4位为同相高电平输出
	[P_IOA_Dir] = r1
	[P_IOA_Attrib] = r1
	[P_IOA_Data] = r1
	 
	r1 = 0x000f
	[P_IOB_Dir] = r1
	[P_IOB_Attrib] = r1
	[P_IOB_Data] = r1
	
	r1 = C_4096Hz | C_B1			//时钟源选择4096Hz,定时2秒,初值为0xdfff
	[P_TimerA_Ctrl] = r1
	r1 = 0xdfff
	[P_TimerA_Data] = r1
	
	r1 = C_4096Hz					//时钟源选择4096Hz,定时1秒,初值为0xefff
	[P_TimerB_Ctrl] = r1
	r1 = 0xefff
	[P_TimerB_Data] = r1
	
	r1 = C_IRQ2_TMB | C_IRQ1_TMA	//打开TimerA的IRQ1中断,TimerB的IRQ2中断
	[P_INT_Ctrl] = r1
	
	int irq							//打开IRQ总中断,关闭FIQ总中断
?Loop:
	r1 = 0x0001
	[P_Watchdog_Clear] = r1
	jmp ?Loop

.TEXT
//========================================================
//	汇编格式:	_IRQ0
//	C格式:		无
//	实现功能:	IRQ0中断服务程序
//	入口参数:	无
//	出口参数:	无
//	破坏寄存器:无
//========================================================
.PUBLIC _IRQ0
_IRQ0:
	push r1,r5 to [sp]
	r1 = C_IRQ0_PWM
	[P_INT_Clear] = r1               //清IRQ0中断
	pop r1,r5 from [sp]
	reti
//========================================================
//	汇编格式:	_IRQ1
//	C格式:		无
//	实现功能:	IRQ1中断服务程序
//	入口参数:	无
//	出口参数:	无
//	破坏寄存器:无
//========================================================
.PUBLIC _IRQ1
_IRQ1:
	push r1,r5 to [sp]

	r1 = [P_IOA_Buffer]
	r1 ^= 0x000f                 //IOA口低四位电平翻转
	[P_IOA_Data] = r1            //输出
	
	r1 = C_IRQ1_TMA
	[P_INT_Clear] = r1           //清IRQ1中断
	pop r1,r5 from [sp]
	reti
//========================================================
//	汇编格式:	_IRQ2
//	C格式:		无
//	实现功能:	IRQ2中断服务程序
//	入口参数:	无
//	出口参数:	无
//	破坏寄存器:无
//========================================================
.PUBLIC _IRQ2
_IRQ2:
	push r1,r5 to [sp]
	
	r1 = [P_IOB_Buffer]
	r1 ^= 0x000f                 //IOB口低四位电平翻转
	[P_IOB_Data] = r1            //输出
	
	r1 = C_IRQ2_TMB
	[P_INT_Clear] = r1           //清IRQ2中断
	pop r1,r5 from [sp]
	reti

⌨️ 快捷键说明

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