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

📄 test1.asm

📁 《单片机应用系统开发实例详解》 光盘 程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
                POP     DPL
                RET
;=============写数据子程序(E1)===========================
        PR2:    PUSH    DPL
                PUSH    DPH
                MOV     DPTR,#CRADD1    ; 设置读状态字地址
        PR21:   MOVX    A,@DPTR         ; 读状态字
                JB      ACC.7,PR21      ; 判"忙"标志为"0"否, 否再读
                MOV     DPTR,#DWADD1    ; 设置写显示数据地址
                MOV     A,DAT1          ; 取数据
                MOVX    @DPTR,A         ; 写数据
                POP     DPH
                POP     DPL
                RET
;=============读数据子程序(E1)===========================
        PR3:    PUSH    DPL
                PUSH    DPH
                MOV     DPTR,#CRADD1    ; 设置读状态字地址
        PR31:   MOVX    A,@DPTR         ; 读状态字
                JB      ACC.7,PR31      ; 判"忙"标志为"0"否, 否再读
                MOV     DPTR,#DRADD1    ; 设置读显示数据地址
                MOVX    A,@DPTR         ; 读数据
                MOV     DAT1,A           ; 存数据
                POP     DPH
                POP     DPL
                RET
;=============写指令子程序(E2)===========================
        PR4:    PUSH    DPL
                PUSH    DPH
                MOV     DPTR,#CRADD2	; 设置读状态字地址
        PR41:   MOVX    A,@DPTR         ; 读状态字
                JB      ACC.7,PR41      ; 判"忙"标志为"0"否, 否再读
                MOV     DPTR,#CWADD2    ; 设置写指令代码地址
                MOV     A,COM           ; 取指令代码
                MOVX    @DPTR,A         ; 写指令代码
                POP     DPH
                POP     DPL
                RET
;=============写数据子程序(E2)===========================
        PR5:    PUSH    DPL
                PUSH    DPH
                MOV     DPTR,#CRADD2	; 设置读状态字地址
        PR51:   MOVX    A,@DPTR         ; 读状态字
                JB      ACC.7,PR51      ; 判"忙"标志为"0"否, 否再读
                MOV     DPTR,#DWADD2    ; 设置写显示数据地址
                MOV     A,DAT1           ; 取数据
                MOVX    @DPTR,A         ; 写数据
                POP     DPH
                POP     DPL
                RET
;=============读数据子程序(E2)===========================
        PR6:    PUSH    DPL
                PUSH    DPH
                MOV     DPTR,#CRADD2	; 设置读状态字地址
        PR61:   MOVX    A,@DPTR         ; 读状态字
                JB      ACC.7,PR61      ; 判"忙"标志为"0"否, 否再读
                MOV     DPTR,#DRADD2    ; 设置读显示数据地址
                MOVX    A,@DPTR         ; 读数据
                MOV     DAT1,A           ; 存数据
                POP     DPH
                POP     DPL
                RET
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;  初始化子程序INT
;  内部调用子程序:PR1,PR4
;  程序调用入口: INT
;  程序调用变量:无
      INT:      MOV     COM,#0E2H	; 复位
                LCALL   PR1
                LCALL   PR4
                MOV     COM,#0A4H	; 关闭等待状态
                LCALL   PR1
                LCALL   PR4
                MOV     COM,#0A9H	; 设置1/32占空比
                LCALL   PR1
                LCALL   PR4
                MOV     COM,#0A0H	; 正向排序设置
                LCALL   PR1
                LCALL   PR4
                MOV     COM,#0C0H	; 设置显示起始行为第一行
                LCALL   PR1
                LCALL   PR4
                MOV     COM,#0AFH	; 开显示设置
                LCALL   PR1
                LCALL   PR4
                RET
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
; 清显示RAM 区(清屏)子程序CLEAR
; 占用内部寄存器:R3,R4
; 内部调用子程序:PR1,PR2,PR4,PR5
; 程序调用入口:CLEAR
        CLEAR:  MOV     R4,#00H		; 页面地址暂存器设置
        CLEAR1: MOV     A,R4            ; 取页地址值
                ORL     A,#0B8H		; "或"页面地址设置代码
                MOV     COM,A		; 页面地址设置
                LCALL   PR1
                LCALL   PR4
                MOV     COM,#00H	; 列地址设置为"0"
                LCALL   PR1
                LCALL   PR4
                MOV     R3,#50H         ; 一页清80个字节
        CLEAR2: MOV     DAT1,#00H        ; 显示数据为"0"
                LCALL   PR2
                LCALL   PR5
                DJNZ    R3,CLEAR2       ; 页内字节清零循环
                INC     R4		; 页地址暂存器加1
                CJNE    R4,#04H,CLEAR1	; RAM 区清零循环
                RET
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
; 西文字符写入子程序CW_PR
;  程序参数选择:PARA1
;  占用内部资源: O_XL,O_YL,CODE,COUNT1,A,B,DPTR
;  内部调用子程序:PR1,PR2,PR4,PR5
;  连接字库: CHTAB
;  程序调用入口: CW_PR
;   程序输入变量:  O_XL,O_YL,CODE
;--------------------------------------------------------------------
        CW_PR:  MOV     DPTR,#CHTAB	; 确定字符字模块首地址
                MOV     A,CODE		; 取代码
                MOV     B,#08H		; 字模块宽度为8个字节
                MUL     AB		; 代码x8
                ADD     A,DPL		; 字符字模块首地址
		MOV     DPL,A		; = 字模库首地址 + 代码x 8
                MOV     A,B
                ADDC    A,DPH
                MOV     DPH,A
                MOV     CODE,#00H       ; 借用为间址寄存器
                MOV     A,O_YL          ; 读页地址寄存器
                JB      ACC.7,CW_1	; 判字符体
                MOV     COUNT1,#06H	; 6x8点阵
                LJMP    CW_2
        CW_1:   MOV     COUNT1,#08H	; 8x8点阵
        CW_2:   ANL     A,#03H		; 取页地址值
                ORL     A,#0B8H		; "或"页地址指令代码
                MOV     COM,A		; 写页地址指针
                LCALL   PR1
                LCALL   PR4
                MOV     A,O_XL		; 读列地址寄存器
                CLR     C
                SUBB    A,#PARA1        ; 列地址-模块参数
                JC      CW_3		; 〈0为左半屏显示区域(E1)
                MOV     O_XL,A		; ≥0为右半屏显示区域(E2)
                MOV     A,O_YL
                SETB    ACC.3		; 设置区域标志位.
                MOV     O_YL,A		; "0"为E1,"1"为E2
        CW_3:   MOV     COM,O_XL	; 设置列地址值
                MOV     A,O_YL		; 判区域标志以确定设置哪个控制器
                JNB     ACC.3,CW_4
                LCALL   PR4		; 区域E2
                LJMP    CW_5
        CW_4:   LCALL   PR1		; 区域E1
        CW_5:   MOV     A,CODE          ; 取间址寄存器值
                MOVC    A,@A+DPTR	; 取字符字模数据
                MOV     DAT1,A		; 写数据
                MOV     A,O_YL		; 判区域标志
                JNB     ACC.3,CW_6
                LCALL   PR5		; 区域E2
                LJMP    CW_7
        CW_6:   LCALL   PR2		; 区域E1
        CW_7:   INC     CODE            ; 间址加1
                INC     O_XL		; 列地址加1
                MOV     A,O_XL		; 判列地址是否超出区域范围
                CJNE    A,#PARA1,CW_8
        CW_8:   JC      CW_9		; 未超出则继续
                MOV     A,O_YL		; 超出则判是否在区域E2
                JB      ACC.3,CW_9      ; 在区域E2则退出
                SETB    ACC.3		; 在区域E1则修改成区域E2
                MOV     O_YL,A
		            MOV     COM,#00H	; 设置列地址为"0"
                LCALL   PR4
        CW_9:   DJNZ    COUNT1,CW_5      ; 循环
                RET
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;16*16点阵中文写入子程序CCW_PR
;  程序参数选择:PARA1
;  占用内部资源:O_XL,O_YL,CODE,COUNT1,A,DPTR
;  内部调用子程序:PR1,PR2,PR4,PR5
;  连接字库:      CCTAB
;  程序调用入口:  CCW_PR
;  程序输入变量:  O_XL,O_YL,CODE
        CCW_PR: MOV     DPTR,#CCTAB     ; 确定字符字模块首地址
                MOV     A,CODE          ; 取代码
                MOV     B,#20H          ; 字模块宽度为32个字节
                MUL     AB              ; 代码x32
                ADD     A,DPL           ; 字符字模块首地址
                MOV     DPL,A           ; = 字模库首地址 + 代码x 32
                MOV     A,B
                ADDC    A,DPH
                MOV     DPH,A
                PUSH    O_XL		; 列地址入栈
                PUSH    O_XL		; 列地址入栈
                MOV     CODE,#00H	; 代码寄存器借用为间址寄存器
        CCW_1:  MOV     COUNT1,#10H	; 计数器设置为16
                MOV     A,O_YL		; 读页地址寄存器
                ANL     A,#03H
                ORL     A,#0B8H		; "或"页地址设置代码
                MOV     COM,A		; 写页地址设置指令
                LCALL   PR1
                LCALL   PR4
                POP     O_XL		; 取列地址值
                MOV     A,O_XL	; 读列地址寄存器
                CLR     C
                SUBB    A,#PARA1       ; 列地址-模块参数
                JC      CCW_2           ; 〈0为左半屏显示区域(E1)
                MOV     O_XL,A        ; ≥0为右半屏显示区域(E2)
                MOV     A,O_YL
                SETB    ACC.3           ; 设置区域标志位.
                MOV     O_YL,A          ; "0"为E1,"1"为E2
        CCW_2:  MOV     COM,O_XL      ; 设置列地址值
                MOV     A,O_YL          ; 判区域标志以确定设置哪个控制器
                JNB     ACC.3,CCW_3
                LCALL   PR4		; 区域E2
                LJMP    CCW_4
        CCW_3:  LCALL   PR1		; 区域E1
        CCW_4:  MOV     A,CODE		; 取间址寄存器值
                MOVC    A,@A+DPTR	; 取汉字字模数据
                MOV     DAT1,A		; 写数据

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -