📄 main.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.
//=======================================================================
//=======================================================================
// 工程名称: ex08_asm_SYSTEM_CLOCK
// 功能描述: 《实验仪实验指导书》基础应用实验
// 系统时钟
// 延时采用指令延时的方法,通过改变系统时钟,改变延时的长短,用
// IOA口的低8位接的LED的闪烁显示出来
// IDE环境: SUNPLUS u'nSPTM IDE 2.0.0(or later)
// 涉及的库: CMacro1016.lib
// 组成文件: main.asm
// 硬件连接: 将LED_SEG接口的IOA0~7分别与a~h相连;
// LED_DIG接口的IOB6与DIG5相连
// 维护记录: 2005-09-12 v1.0
//
//=========================================================================
//=========================================================================
// 文件名称: main.asm
// 功能描述: 延时采用指令延时的方法,通过改变系统时钟,改变延时的长短,用
// IOA口的低8位接的LED的闪烁显示出来
// 维护记录: 2005-09-12 v1.0
//=========================================================================
.DEFINE C_Fosc 0x0000
.DEFINE C_Fosc_Div_2 0x0001
.DEFINE C_Fosc_Div_4 0x0002
.DEFINE C_Fosc_Div_8 0x0003
.DEFINE C_Fosc_Div_16 0x0004
.DEFINE C_Fosc_Div_32 0x0005
.DEFINE C_Fosc_Div_64 0x0006
.DEFINE C_Sleep 0x0007
.DEFINE C_PLL_24 0x0000
.DEFINE C_PLL_20 0x0020
.DEFINE C_PLL_32 0x0040
.DEFINE C_PLL_40 0x0060
.DEFINE C_PLL_49 0x0080
.DEFINE P_IOA_Data 0x7000
.DEFINE P_IOA_Dir 0x7002
.DEFINE P_IOA_Attrib 0x7003
.DEFINE P_IOB_Data 0x7005
.DEFINE P_IOB_Dir 0x7007
.DEFINE P_IOB_Attrib 0x7008
.DEFINE P_Watchdog_Clear 0x7012
.DEFINE P_SystemClock 0x7013
.RAM
.VAR Sum
.CODE
//===========================================================================
// 汇编格式: _main
// C格式: int main(void);
// 实现功能: 延时采用指令延时的方法,通过改变系统时钟,改变延时的长短,用
// IOA口的低8位接的LED的闪烁显示出来
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:r1,r2
//===========================================================================
.PUBLIC _main
_main:
r1 = 0x0040 //初始化IOB6为高电平输出
[P_IOB_Dir] = r1
[P_IOB_Attrib] = r1
[P_IOB_Data] = r1
r1 = 0x00ff //初始化IOA低八位口为输出口
[P_IOA_Dir] = r1
r1 = 0x00ff
[P_IOA_Attrib] = r1
r1 = 0x0000 //初始化IOA低八位口输出为低电平
[P_IOA_Data] = r1
// r1 = C_Fosc | C_PLL_49
// r1 = C_Fosc | C_PLL_49 //选择系统时钟49MHz,1分频
// r1 = C_Fosc_Div_2 | C_PLL_49 //选择系统时钟49MHz,2分频
// r1 = C_Fosc_Div_4 | C_PLL_49 //选择系统时钟49MHz,4分频
// r1 = C_Fosc_Div_8 | C_PLL_49 //选择系统时钟49MHz,8分频
r1 = C_Fosc_Div_16 | C_PLL_49 //选择系统时钟49MHz,16分频
// r1 = C_Fosc_Div_32 | C_PLL_49 //选择系统时钟49MHz,32分频
// r1 = C_Fosc_Div_64 | C_PLL_49 //选择系统时钟49MHz,64分频
// r1 = C_Sleep | C_PLL_49 //选择系统时钟49MHz,睡眠
// r1 = C_Fosc | C_PLL_20 //选择系统时钟20.48MHz,1分频
// r1 = C_Fosc | C_PLL_24 //选择系统时钟24.576MHz,1分频
// r1 = C_Fosc | C_PLL_32 //选择系统时钟32.768MHz,1分频
// r1 = C_Fosc | C_PLL_40 //选择系统时钟40.96MHz,1分频
// r1 = C_Fosc | C_PLL_49 //选择系统时钟49.152MHz,1分频
[P_SystemClock] = r1
?Loop:
r1 = 0x00ff
[P_IOA_Data] = r1 //IOA口低八位输出,当其中某些位输出高电平时,与其连接的LED点亮
call F_Delay //延时
r1 = 0x0000
[P_IOA_Data] = r1 //与IOA低八位连接的8个LED熄灭
call F_Delay //延时
jmp ?Loop
//==============================================================================
// 汇编格式: F_Delay
// C格式: 无
// 实现功能: 延时
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:r1,r3,r4
//==============================================================================
.PUBLIC F_Delay
F_Delay:
r4 = 0x0004
?LoopOut:
r3 = 0xffff
?LoopIn:
r1 = 0x0001
[P_Watchdog_Clear] = r1 //清看门狗
r3 -= 1
jnz ?LoopIn
r4 -= 1
jnz ?LoopOut
retf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -