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

📄 timera.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
//
//  组成文件:
//    	 		TimerA.asm/hardware.asm
//	            hardware.inc/hardware.h
//     	
//  日期:          2002-6-12
//===========================================================================================

.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 -0x1fff) 	//公式:0xFFFF-时钟源频率/定时器溢出频率 = 0xFFFF-8k/0.1k = 0xFFFF-80 = 0xFFAF
.DEFINE		P_WatchDog_CLear	0x7012

.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 |= 0x0010
[P_INT_Ctrl]=r1 
INT IRQ,FIQ               							//开IRQ中断
              
                        							//空操作
loop:
    nop;
    goto loop;
    
//=================================================================================================
//定时器A中断程序
//功能:输出10ms方波
//=================================================================================================  
.TEXT   
.PUBLIC _FIQ;    
_FIQ:	
   push r1,r5 to [sp]   							//现场保护
   r1=0x0001
   [P_WatchDog_Clear]=r1
   r1 = [flag] 			 			 
   [P_IOA_Data] = r1          						//波形输出端
                            						//方波标识位取反
   r1 ^= 0xffff;
   [flag] = r1; 
                            						//清中断
   r1 = 0x1000 
   [P_INT_Clear] = r1  
                            						//恢复现场
   pop r1,r5 from [sp]   
   reti                     						//返回
.PUBLIC _IRQ4;
_IRQ4:
   nop
   nop
   nop
?ll:
    nop
	jmp ?ll;
	
	r4 = 100;
loop1:
	r4 -= 1;
	jnz loop1;
	
	r2 = 0x0;	
	[P_IOB_Data] = r2;
	
	r4 = 0x0040;
	[P_INT_Clear] = r4;
	reti;

⌨️ 快捷键说明

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