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

📄 main.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_TimerA.spj
//  功能描述:    在IOA0脚输出一10ms方波
//               
//  文件来源:  《SPCE061单片机原理及应用技术》第五章 中断系统,第185页
//  IDE环境:  	 SUNPLUS u'nSPTM  IDE 1.8.0(or later)
//
//  涉及的库:	CMacro.lib
//
//  组成文件:
//    	 		main.asm/hardware.asm
//	            hardware.inc/hardware.h
//     	
//  日期:          2003-9-5
//===========================================================================================

.INCLUDE	hardware.inc
.DEFINE		TIMERA_CLKA_8K		0x0003;  			//时钟源A 选择8096Hz 
.DEFINE     TIMERA_CLKB_1       0x0030;  			//时钟源B 选择1;
.DEFINE     RUN_TIMERA          0x2000   			//定义启动定时器
.DEFINE     TIMER_DATA_FOR_8KHZ (0xffff -0x0050) 	//公式:0xFFFF-时钟源频率/定时器溢出频率 = 0xFFFF-8k/0.1k = 0xFFFF-80 = 0xFFAF
.DEFINE		P_WatchDog_Clear	0x7012
.DEFINE     P_INT_Ctrl_New      0x702d

.RAM    
.VAR    	flag             						//方波标识,1,IOA0为高,0,IOA0为低
.CODE
.PUBLIC 	_main
_main:                         						//定义IOA0为高电平输出端
	r1 = 0x0001;
	[P_IOA_Dir] = r1;				 
	[P_IOA_Attrib] = r1;
	[P_IOA_Data] = r1;
                         							//初始化10ms 方波输出标识位
	[flag] = r1;	
                         							//定义定时器A预置数,公式:0xFFFF-时钟源频率/定时器溢出频率 = 0xFFFF-8k/0.1k = 0xFFFF-80 = 0xFFAF
	r1 = TIMER_DATA_FOR_8KHZ
	[P_TimerA_Data] = r1
                         							//定义使用的时钟源频率 时钟源A为8096Hz时钟源B为1	
	r1 = TIMERA_CLKA_8K + TIMERA_CLKB_1
	[P_TimerA_Ctrl] = r1 
                        							//开放定时器A的中断
	r1 = RUN_TIMERA
	r1 |= 0x2000
	[P_INT_Ctrl_New]=r1 
	FIQ  on             							//开IRQ中断
loop:
	r1=0x0001
   	[P_WatchDog_Clear]=r1
    nop
    jmp loop
    
//=================================================================================================
//定时器A中断程序
//功能:输出10ms方波
//=================================================================================================  
.TEXT   
.PUBLIC _FIQ;    
_FIQ:	
   push r1,r5 to [sp]   							//现场保护
   r1 = [flag] 			 			 
   [P_IOA_Data] = r1          						//波形输出端
   r1 ^= 0xffff;
   [flag] = r1; 
   r1 = 0x2000 
   [P_INT_Clear] = r1  								//恢复现场			
   pop r1,r5 from [sp]   
   reti                     						//返回

⌨️ 快捷键说明

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