📄 timera.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 + -