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

📄 testsram_a1.asm

📁 AT89C58单片机的外部SRAM检测数码管显示 汇编语言编写
💻 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 + -