📄 testsram_a1.asm
字号:
; =================================================================
; 深圳思瑞科技 SRI Technology Studio.
; http://www.sri.cn, http://www.sricn.com
; mail: support@sri.cn, xjb@sri.cn
;
; 转载请注明该出处
;
; -----------------------------------------------------------------
; 源文件名: TestSARM.ASM
; 程序名称: 测试外部SRAM
; 实现方法: 向外部SRAM写入数据然后读出,判断写入与读出的是否相同,
; 如果错误则在数码管显示错误的地址,如果正确则显示4个"-"
; 学习目的: 1、操作外部SRAM
; 2、在Keil C中常量表示式的运算
; 3、综合数码管应用
; =================================================================
; -----------------------------------------------------------------
EX_SRAM_SIZE EQU 32*1024 ; 外部SRAM大小
; -----------------------------------------------------------------
; 代码段
org 0000h ; 单片机复位的入口地址
jmp Main ; 跳转到主程序
org 0030h
$include (..\..\library\libseg.inc)
Main:
EnDataBus
mov 0x8E, #2 ; 只访问外部RAM,禁止ALE输出脉冲
; jmp Check
; 关闭四位数码管显示
setb SEGCOM1
setb SEGCOM2
setb SEGCOM3
setb SEGCOM4
; 写入
mov DPTR, #0 ; 初始化指针
Write_Loop:
mov A, DPL
xrl A, DPH
movx @DPTR, A ; 将A写到外部存储器
inc DPTR
mov A, DPH
; EX_SRAM_SIZE常量是一个16位的数值,要分别取其前后
; 8位进行判断,在Keil C中是允许使用C语法的表达式对
; 常量赋值前进行运算,如MOV A, #(EX_SRAM_SIZE >> 8)
; 则该指令被翻译成MOV A, #80h,因为EX_SRAM_SIZE的高
; 8位是80h,以下指令与此同样原理
cjne A, #(EX_SRAM_SIZE >> 8), Write_Loop
mov A, DPL
cjne A, #(EX_SRAM_SIZE & 0xFF), Write_Loop
Check:
; 读出校验
mov DPTR, #0 ; 初始化指针
Check_Loop:
movx A, @DPTR ; 从外部存储器读入到A
mov B, A
mov A, DPL
xrl A, DPH
cjne A, B, Check_Error
inc DPTR
mov A, DPH
; EX_SRAM_SIZE常量是一个16位的数值,要分别取其前后
; 8位进行判断,在Keil C中是允许使用C语法的表达式对
; 常量赋值前进行运算,如MOV A, #(EX_SRAM_SIZE >> 8)
; 则该指令被翻译成MOV A, #80h,因为EX_SRAM_SIZE的高
; 8位是80h,以下指令与此同样原理
cjne A, #(EX_SRAM_SIZE >> 8), Check_Loop
mov A, DPL
cjne A, #(EX_SRAM_SIZE & 0xFF), Check_Loop
mov R0, #SEG_CHR_LINE
mov R1, #SEG_CHR_LINE
mov R2, #SEG_CHR_LINE
mov R3, #SEG_CHR_LINE
Show1:
call ShowSegment ; 在数码管上显示
jmp Show1
Check_Error:
; 错误
; 将错误的位置显示出来
mov R6, DPH
mov R7, DPL
Show2:
call ShowSegmentBCD
jmp Show2
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -