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

📄 main.asm

📁 电压控制程序,符合各种设备需要,核心程序,IBm专属
💻 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.
//======================================================================

//======================================================================
//	工程名称:	ex15_asm_IRQ3_KEY_WAKEUP
//	功能描述:	《实验仪实验指导书》基础应用实验
//              键唤醒
//				实现触键唤醒功能,按键S20(接在IOA0)进入睡眠状态,然后
//				按S21(接在IOA1)唤醒
//  IDE环境:   SUNPLUS u'nSPTM  IDE 2.0.0(or later)
//	涉及的库:	CMacro1016.lib
//	组成文件:	main.asm
//	硬件连接:	KEYPAD接口的IOA7~6分别与COL1~2连接,IOA8与ROW连接
//				IOB8~15与LED_SEG接口的a~h连接
//				LED_DIG接口的IOB6与DIG5连接
//	维护记录:	2005-09-12	v1.0
//
//======================================================================

//======================================================================
//	文件名称:	main.asm
//	功能描述:	实现触键唤醒功能,按键S20进入睡眠状态,然后按S21键唤醒
//	维护记录:	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_IOA_Latch			0x7004
.DEFINE P_IOB_Data			0x7005
.DEFINE P_IOB_Buffer		0x7006
.DEFINE P_IOB_Dir			0x7007
.DEFINE P_IOB_Attrib		0x7008

.DEFINE P_INT_Ctrl			0x7010
.DEFINE P_INT_Clear			0x7011
.DEFINE P_Watchdog_Clear	0x7012
.DEFINE P_SystemClock		0x7013

.DEFINE C_IRQ3_KEY			0x0080
.DEFINE C_IRQ3_EXT1			0x0100
.DEFINE C_IRQ3_EXT2			0x0200

.RAM

.CODE

//=======================================================================
//	汇编格式:	_main
//	C格式:		int main(void);
//	实现功能:	实现触键唤醒功能,按键S20进入睡眠状态,
//				然后按S21键唤醒
//	入口参数:	无
//	出口参数:	无
//	破坏寄存器:r1,r2
//========================================================================

.PUBLIC	_main
_main:
	int off							//关闭中断

	r1 = 0xff40						//设置IOB7~15为低电平输出,IOB6高电平输出
	[P_IOB_Dir] = r1
	r1 = 0xff40
	[P_IOB_Attrib] = r1
	r1 = 0x0040
	[P_IOB_Data] = r1
?Loop:
	r1 = 0x0100						//设置IOA7~6为下拉输入, IOA8输出高
	[P_IOA_Dir] = r1
	[P_IOA_Attrib] = r1
	[P_IOA_Data] = r1
	
	r1 = 0x0001
	[P_Watchdog_Clear] = r1			//清看门狗
	
	r1 = [P_IOA_Data]
	test r1,0x0080					//IOA7接的键是否按下?
	jz ?Loop						//否则循环
?LoopKeyUp:						
	r1 = 0x0001						
	[P_Watchdog_Clear] = r1
	r1 = [P_IOA_Data]
	test r1,0x0080					//IOA7接的键是否还在按下?
	jnz ?LoopKeyUp					//如还按下,则跳转循环等待放开
	
	r1 = [P_IOA_Attrib]				//仅使能IOA6的键唤醒(其他位设为屏蔽唤醒的悬浮输入)
	r1 |= 0x00bf
	[P_IOA_Attrib] = r1
	r1 = [P_IOA_Buffer]
	r1 |= 0x00bf
	[P_IOA_Data] = r1
	
	r1 = C_IRQ3_KEY
	[P_INT_Clear] = r1				//先清触键唤醒中断标志
	 	
	r1 = C_IRQ3_KEY					//使能触键唤醒中断
	[P_INT_Ctrl] = r1

	int irq							//打开IRQ总中断,同时关闭FIQ总中断

	r1 = 0x0040
	[P_IOB_Data] = r1				//IOB8~15输出低电平
	
	r1 = [P_IOA_Latch]				//锁存IOA口低8位数据,用于唤醒
	r1 = 0x0007
	[P_SystemClock] = r1			//进入睡眠

	r1 = 0x0001
	[P_Watchdog_Clear] = r1         //清看门狗
	goto ?Loop

.TEXT
//========================================================
//	汇编格式:	_IRQ3
//	C格式:		无
//	实现功能:	IRQ3中断服务程序
//	入口参数:	无
//	出口参数:	无
//	破坏寄存器:无
//========================================================
.PUBLIC _IRQ3
_IRQ3:
	push r1,r5 to [sp]
	r1 = C_IRQ3_KEY
	test r1,[P_INT_Ctrl]            //判断是不是键唤醒中断
	jz	?Exit                       //不是,转向?Exit
	r1 = [P_IOB_Buffer]
	r1 |= 0xff00					//IOB高八位输出高电平
	[P_IOB_Data] = r1
?Exit:
	int off							//关中断
	r1 = C_IRQ3_KEY
	[P_INT_Clear] = r1              //清键唤醒中断标志
	pop r1,r5 from [sp]
	reti

⌨️ 快捷键说明

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