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

📄 key_wakeup.asm

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 ASM
字号:
//======================================================================================
//
//        The information contained herein is the exclusive property of
//      Sunplus Technology Co. And shall not be distributed, reproduced,
//      or disclosed in whole in part without prior written permission.
//
//            (C) COPYRIGHT 2001   SUNPLUS TECHNOLOGY CO.
//                           ALL RIGHTS RESERVED
//
//    The entire notice above must be reproduced on all authorized copies.
//
//========================================================================================
//  工程名称:  book_Keyup.spj
//  功能描述:   检测触键唤醒的功能
//              进入睡眠状态后,触任意键唤醒,点亮8个LED
//	硬件连接:	A口低8位接键盘;高8位接8个LED              
//  文件来源: 《SPCE061单片机原理及应用技术》第五章 中断系统,第191页
//  IDE环境:  	SUNPLUS u'nSPTM  IDE 1.8.0(or later)
//
//  涉及的库:	CMacro.lib
//
//  组成文件:
//    	 		main.asm/hardware.asm
//	            hardware.inc/hardware.h
//     	
//  日期:          2002-6-12
//===========================================================================================
.INCLUDE	hardware.inc

.DEFINE 	P_IOA_RL   			0x7004
.DEFINE 	RUN_KEYWAKEUP_INT 	0x0080

.CODE
.PUBLIC 	_main
_main:

                              		//初始化A口低8位为带下拉电阻的输入,高8位为低电平输出
              
    r1 = 0xff00 
	[P_IOA_Dir] = r1
	[P_IOA_Attrib] = r1    
	r1 = 0x0000
	[P_IOA_Data] = r1  
	

    r1 = RUN_KEYWAKEUP_INT     		//开放触键唤醒中断
    [P_INT_Ctrl] = r1   
    
    r1 = [P_IOA_RL]              	//激活A口唤醒功能
    INT IRQ                    		//开中断   
    r1 = 0x0007
    [P_SystemClock] = r1       		//进入睡眠状态
    
                             		//当有键唤醒时继续执行程序
     
Loop:                    
   r1 = [P_IOA_Data]        
   r1 |= 0xff00;
   [P_IOA_Data] = r1;        		//点亮8个发光二极管
   goto Loop;
    
//********************************//

//键唤醒中断   
 
//*******************************//
.TEXT  
.PUBLIC _IRQ3
_IRQ3:
    int off
    push r1,r4 to [sp]      		//现场保护
    r1 = 0x0080
    test r1,[P_INT_Ctrl]    		//是否为键唤醒中断
    jz L_NotKeyArouse       		//否,外部中断
                            		//触键唤醒中断的处理
L_KeyArouse:              
    r1 = 0x0080      
    goto Exit_INT;
                            		//外部中断的处理
L_NotKeyArouse: 
    r1 = 0x0100
    test r1,[P_INT_Ctrl]
    jnz L_EXT1;             		//判断是否外部中断1
    r1 = 0x0200             		//外部中断2      
L_EXT1:
Exit_INT:
    [P_INT_Clear] = r1       		//清中断   
    pop r1,r4 from [sp]    			//恢复现场
    int irq
    reti
.end

⌨️ 快捷键说明

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