📄 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.
//======================================================================
//======================================================================
// 工程名称: ex20_asm_SRAM
// 功能描述: 《实验箱实验指导书》基础应用实验
// 片内2K SRAM读写
// 将数组中的数据写到0x0100~0x010a单元,并作检查
// 如果成功写入4个LED点亮,如果失败点亮所有的LED
// IDE环境: SUNPLUS u'nSPTM IDE 2.0.0(or later)
// 涉及的库: CMacro1016.lib
// 组成文件: main.asm
// 硬件连接: IOA口低8位连接1*8LED
// 维护记录: 2005-09-12 v1.0
//
//======================================================================
//======================================================================
// 文件名称: main.asm
// 功能描述: 将数组中的数据写到0x0100~0x010a单元,并作检查
// 如果成功写入4个LED点亮,如果失败点亮所有的LED
// 维护记录: 2005-09-12 v1.0
//======================================================================
.DEFINE P_IOA_Data 0x7000
.DEFINE P_IOA_Dir 0x7002
.DEFINE P_IOA_Attrib 0x7003
.DEFINE P_Watchdog_Clear 0x7012
.CODE
ARRAY: .DW 0x5a5a,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009
//=======================================================================
// 汇编格式: _main
// C格式: int main(void);
// 实现功能: 将数组中的数据写到0x0100~0x010a单元,并作检查
// 如果成功写入4个LED点亮,如果失败点亮所有的LED
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:r1,r2
//=======================================================================
.PUBLIC _main
_main:
r1 = 0xffff //初始化IOA端口为同相输出口
[P_IOA_Dir] = r1
r1 = 0xffff
[P_IOA_Attrib] = r1
r1 = 0x0000 //初始化IOA口输出为低电平
[P_IOA_Data] = r1
call Write_SRAM //调用数据写入子程序
call Read_SRAM //调用数据读出子程序
?Loop:
r1 = 0x0001
[P_Watchdog_Clear] = r1 //清看门狗
jmp ?Loop
//=========================================================================
// 汇编格式: Write_SRAM
// C格式: 无
// 实现功能: 数据写入子程序
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:r1,r2,bp
//==========================================================================
.PUBLIC Write_SRAM
Write_SRAM:
bp = ARRAY //待写入的数据当前存放首地址
r1 = 0x0100 //要写入数据的地址SRAM当中的地址
?Write:
r2 = [bp] //读出当前地址数据
[r1] = r2 //写数据
bp += 1 //改变地址
r1 += 1 //数据加1
cmp r1,0x010a //是否写完?
jne ?Write
retf
//===========================================================================
// 汇编格式: Read_SRAM
// C格式: 无
// 实现功能: 数据读出子程序
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:r1,r2,r3,r4,bp
//===========================================================================
.PUBLIC Read_SRAM
Read_SRAM:
bp = ARRAY
r1 = 0x0100
?Read:
r2 = [bp] //读数据
r3 = [r1] //取r1寄存器数据
cmp r2,r3 //判断读出数据是否正确
jne ?Dis //不正确转向?Dis
r4 = 0x000f //正常结束到这时的,表示读出数据都没有问题
[P_IOA_Data] = r4 //IOA0~3输出高电平
bp += 1
r1 += 1
cmp r1,0x010a //判断是否读完
jne ?Read //没有读完继续执行读操作
jmp ?Read_SRAM_Exit
?Dis:
r1 = 0x00ff //读出数据有误,IOA0~IOA7输出高电平
[P_IOA_Data] = r1
?Read_SRAM_Exit:
retf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -