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

📄 gwdvp_m1.asm

📁 Alera 的8051 IP core的示例文件5个
💻 ASM
📖 第 1 页 / 共 4 页
字号:
          MOV    R7,#0AH
 RRD2:    MOV    A,1BH  ; 1BH中装地址
          INC    A
          CJNE   A,1AH,NOE2
          INC    A
 NOE2:    MOV    1BH,A
          MOV    R1,1CH  ; 1CH装数据
          DEC    R1
          MOV    1CH,R1
          MOV    A,@R1
          LCALL  ASC
          MOV    B,1BH
          LCALL  DISP2
          DJNZ   R7,RRD2
          RET
; JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
TESTD:    MOV    A,12H
          LCALL  ASC
          MOV    B,#0CAH
          LCALL  DISP2
          MOV    A,11H
          LCALL  ASC
          MOV    B,#0CBH
          LCALL  DISP2
          MOV    A,#2EH
          MOV    B,#0CCH
          LCALL  DISP2
          MOV    A,10H
          LCALL  ASC
          MOV    B,#0CDH
          LCALL  DISP2
          MOV    A,#25H
          MOV    B,#0CFH
          LCALL  DISP2
          RET
; KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

DIS_A:    MOV    A,@R0     ; 40H     ; 显示
          ANL    A,#0FH
          MOV    10H,A
          MOV    A,@R0
          ANL    A,#0F0H
          SWAP   A
          MOV    11H,A
          INC    R0

          MOV    A,@R0
          ANL    A,#0FH
          MOV    12H,A
          MOV    A,@R0
          ANL    A,#0F0H
          SWAP   A
          MOV    13H,A
          INC    R0

          MOV    A,@R0
          ANL    A,#0FH
          MOV    14H,A
          MOV    A,@R0
          ANL    A,#0F0H
          SWAP   A
          MOV    15H,A
          INC    R0

          MOV    A,@R0
          ANL    A,#0FH
          MOV    16H,A
          RET

  DIS_B:  MOV    A,@R0  ;  43H
          ANL    A,#0F0H
          SWAP   A
          MOV    10H,A

          INC    R0
          MOV    A,@R0    ; 44H                             ; 显示
          ANL    A,#0FH
          MOV    11H,A
          MOV    A,@R0
          ANL    A,#0F0H
          SWAP   A
          MOV    12H,A

          INC    R0
          MOV    A,@R0     ;    45H
          ANL    A,#0FH
          MOV    13H,A
          MOV    A,@R0
          ANL    A,#0F0H
          SWAP   A
          MOV    14H,A

          INC    R0
          MOV    A,@R0  ;  46H
          ANL    A,#0FH
          MOV    15H,A
          MOV    A,@R0
          ANL    A,#0F0H
          SWAP   A
          MOV    16H,A
          RET

 ; -----------------------------------功能1:测频率、测占空比、测脉宽-----------------------------(1)
 ;KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK



     ;------------------------------------------------------开始--------------------------------------------------------------------
 CLR88:   SETB   P3.7
          CLR    P3.0

          CLR    P0.4    ;  P2.4    ;  LOCK1->
          CLR    P0.5    ;  P2.5    ;  LOCK2
          CLR    P3.1
          SETB   P3.1
          CLR    P3.1

          MOV    2AH,#00H
          CLR    A
          MOV    2BH,#31H
          MOV    2DH,A    ; 用户自定制系统标志字

             ; JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
          MOV	DAT,#01H      ; CLEAR
	  LCALL	ENABLE

          CLR    P3.5
          CLR    P0.0
          MOV    79H,#00H
          RET
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
XPOS   EQU   40H                       	;定义列地址
YPOS   EQU   41H                        ;定义行地址
FIRST_COL    EQU	30H		;定义字符/汉字显示起始行
FIRST_ROW    EQU	31H		;定义字符/汉字显示起始列
HZK_WID	     EQU	32H		;定义字符/汉字显示长度
HZK_LIN	     EQU	33H		;定义字符/汉字显示行数
FIRST_ADD	EQU	34H 		;定义字符/汉字显示起始位置
START_ADD	EQU	35H       	;起始位置缓存单元
FIRST_LIN	EQU	36H		;起始行位置缓存单元
G_COLUMN	EQU	37H		;定义图形显示起始行
G_ROW		EQU	38H		;定义图形显示起始列
G_WID		EQU	39H		;定义图形显示宽度
;------------------------------------------------------------------------------------------------------
CCC:
	CLR	RW
LCD:
        LCALL   LCDRESET		;调用系统初始化程序
        CALL    HZKLIB                  ;汉字显示
        CALL    DL8X4                   ;延时
;-------------------------
        CALL    HZK_2                 ;KONXIN公司广告
        CALL    HZK_3
        CALL    HZK_4
        SJMP    CCC

        CALL    HZK_5
        CALL    DDD
        CALL    CLEAR                   ;清屏
        RET
DISP_A:
	MOV   FIRST_ADD,#00H  		;设定字符/汉字显示起始位置为第一个显示单元
        MOV   FIRST_LIN,#01H		;设定字符/汉字显示起始位置为第一行
        MOV   HZK_WID,#08H		;每行显示汉字个数
        MOV   HZK_LIN,#04H		;显示行数
        MOV   START_ADD,#00H       	;清首个显示地址缓存单元
        LCALL	HZK_DISP             	;调用汉字显示子程序
        RET



HZKLIB:  ;显示汉字子程序
        MOV   DPTR, #TAB 		;需要显示汉字机内码数据表
HZ8X4:	MOV   FIRST_ADD,#00H  		;设定字符/汉字显示起始位置为第一个显示单元
        MOV   FIRST_LIN,#01H		;设定字符/汉字显示起始位置为第一行
        MOV   HZK_WID,#08H		;每行显示汉字个数
        MOV   HZK_LIN,#04H		;显示行数
        MOV   START_ADD,#00H       	;清首个显示地址缓存单元
        LCALL	HZK_DISP             	;调用汉字显示子程序
        RET
DL8X4:  CALL    DDD                   ;延时
        MOV     A,#01H                  ;指令#01H为:清除屏幕文字,把地址指针指向00H单元
        CALL    LCDWC
        RET

HZK_2:  ;显示汉字子程序
     	MOV   FIRST_ADD,#00H  		;设定字符/汉字显示起始位置为第一个显示单元
        MOV   FIRST_LIN,#02H		;设定字符/汉字显示起始位置为第一行
        MOV   DPTR, #TAB_2 		;需要显示汉字机内码数据表
        MOV   HZK_WID,#08H		;每行显示汉字个数
        MOV   HZK_LIN,#02H		;显示行数
        MOV   START_ADD,#00H       	;清首个显示地址缓存单元
        LCALL	HZK_DISP             	;调用汉字显示子程序
        LCALL   DL8X4
        RET
HZK_3:  MOV   DPTR, #TAB_3
        CALL  HZ8X4
        SJMP  DL8X4
HZK_4:  MOV   DPTR, #TAB_4
        CALL  HZ8X4
        SJMP  DL8X4
HZK_5:  MOV   DPTR, #TAB_5
        CALL  HZ8X4
        SJMP  DL8X4


CLEAR:    ;清除图形显示CGRAM
       MOV   A,#00
       CALL  LCDFILL
       RET

LCDFILL:
       MOV    R4,A
       MOV    XPOS,#0
       MOV    YPOS,#0
LCD_A1:MOV    YPOS,#0
LCD_A2:
       MOV    A,#36H                   ;选择扩充指令集关闭图形显示
       CALL   LCDWC
       ;CALL   LCDPOS
       MOV    A,XPOS
       ADD    A,#80H
       CALL   LCDWC
       MOV    A,YPOS
       ADD    A,#80H
       CALL   LCDWC
       MOV    B,A
       MOV    A,#30H                   ;重新选择基本指令集
       CALL   LCDWC
       MOV    A,R4
       CALL   LCDWD
       CALL   LCDWD
       INC    YPOS
       MOV    A,B
       CJNE   A,#87H,LCD_A2             ;最后一列地址?87H
       INC    XPOS
       MOV    A,XPOS
       CJNE   A,#20H,LCD_A1             ;最后行地址为80H+20H=0A0H
       MOV    XPOS,#0
LCD_A3:MOV    YPOS,#0
LCD_A4:
       MOV    A,#36H
       CALL   LCDWC
       MOV    A,XPOS
       ADD    A,#80H
       CALL   LCDWC
       MOV    A,YPOS
       ADD    A,#88H
       CALL   LCDWC
       MOV    B,A
       MOV    A,#30H                    ;重新选择基本指令集
       CALL   LCDWC
       MOV    A,R4
       CALL   LCDWD
       CALL   LCDWD
       INC    YPOS
       MOV    A,B
       CJNE   A,#8FH,LCD_A4              ;最后一列地址为8FH
       INC    XPOS
       MOV    A,XPOS
       CJNE   A,#20H,LCD_A3              ;最后行地址为80H+20H=0A0H
       RET

CHR_DISP:  ;字符显示子程序
          MOV  R0,#50H
	  MOV R1,HZK_WID
CHR10:	  LCALL	  LCDPOS		 ;调用调整地址单元子程序
          MOV   A,#89H
;	  MOV A, START_ADD		 ;设定DDRAM地址,显示位置地址
          LCALL LCDWC
CHR11:    MOV  A,@R0			 ;读取显示字符
          LCALL LCDWD			 ;显示单个字符
          INC R0
          DJNZ	R1,CHR11
          RET
;=========
;例:在第1行、第2列 显示10个数字
CHR_01:
          ACALL  TTT_1
          MOV    FIRST_LIN,#1
          MOV    FIRST_ADD,#0
          MOV    HZK_WID,#10
          LCALL  CHR_DISP
          RET
TTT_1:
          MOV    A,#30H
          MOV    R1,#50H
          MOV    R2,#10H
TTT_L1:   MOV    @R1,A
          INC    R1
          INC    A
          DJNZ   R2,TTT_L1
          RET

HZK_DISP:   ;汉字显示子程序
	  MOV R1,HZK_WID
HZK10:	  LCALL	  LCDPOS		 ;调用调整地址单元子程序
	  MOV A, START_ADD		 ;设定DDRAM地址,显示位置地址
          LCALL LCDWC
HZK11:   CLR A				 ;因为要连续输入机内码高位(区码)、低位(位码)
          MOVC A, @A+DPTR		 ;所以要输入两次数据,如果是字符就是输入两个字符字符代码可以看说明书
          LCALL LCDWD			 ;DATA	LCDWC
          INC DPTR			 ;显示地址会自动加一,如果连续写就不用再输入地址,空白可用某空白汉字或字符代替
          CLR A
          MOVC A, @A+DPTR
          LCALL LCDWD
          LCALL DELAY03
          INC DPTR
          DJNZ	R1,HZK11
          MOV	R1,HZK_WID		;调整显示长度
          INC	FIRST_LIN          	;跳到下一行
          DJNZ	HZK_LIN,HZK10
          RET
LCDRESET:
        LCALL DDD              	;延时

					;首先选择基本指令集
        MOV A, #30H			;30---基本指令操作
        LCALL  LCDWC
        MOV    A,#30H                   ;使用8位控制界面
	LCALL  LCDWC
        MOV A, #01H			;指令#01H为:清除屏幕文字,把地址指针指向00H单元
        LCALL  LCDWC			;
        LCALL  DDD
        LCALL  DDD
        MOV A, #06H			;指定在资料写入或读取时,设定游标的移动方向及指定显示的移位
        LCALL  LCDWC
        MOV    A,#0CH
        CALL   LCDWC
        LCALL  DDD
        RET
;---------------------------------------------------------
;SEARCH ADDRESS                                          -
;目的是为了转换地址单元为DDRAM地址单元,以方便           -
;定义显示位置                                            -
;汉字显示DDRAM位置为:第一行:80H----87H                 -
;                     第二行:90H----97H                 -
;		      第三行:88H----8FH                 -
;		      第四行:98H----9FH                 -
;---------------------------------------------------------
LCDPOS: PUSH	DPH			;地址转换子程序
	PUSH   	DPL
	PUSH	A
	MOV	DPTR,#LINE_ADD		;LINE-ADD为地址表指针
	MOV	A,FIRST_LIN
	MOVC	A,@A+DPTR
	ADD	A,FIRST_ADD
	MOV	START_ADD,A
	POP	A
	POP	DPL
	POP	DPH
	RET
LINE_ADD:
	DB  	00H,80H,90H,88H,98H,00H
;READ:   MOV     P3, #0FBH       	;读数据子程序
					;P3--CONTRAL	I/O
        NOP				;P3=11111011B   RS=1	R/W=1   READ DATA
        SETB E				;E=E(I/O)
        LCALL  DDD
        MOV A, P1			;P1=DATA(I/O)
        NOP
        CLR E
        RET



CHK_BUSY:
         LCALL  DDT9
         RET

PUSH    ACC
         CLR     RS			;读忙状态子程序
         SETB    RW
         SETB    E
CHK_B:   NOP
         JB   P0.7,CHK_B
         CLR  E
         POP  ACC
         RET


LCDWD:   ;写数据子程序
        LCALL	CHK_BUSY		;P3--CONTRAL	I/O
        NOP				;RS=1	RW=0  WRITE DATA
        SETB	RS
        CLR	RW
        SETB    E                       ;E=1
        MOV     P1, A			;P1=DATA(I/O)
        NOP
        CLR     E
        NOP
        MOV     P1,#0FFH
        LCALL   DDD
        RET



LCDWC:    ;写指令子程序
        LCALL	CHK_BUSY		;以确保上一指令/数据模块已经接收处理完
        NOP				;RS=0	WRITE	INSTRUTION
        CLR 	RS                      ;RW=0
        CLR	RW
        SETB E				;E=1
        MOV P1, A			;P1=DATA(I/O)
        NOP
        CLR E
        NOP
        MOV     P1,#0FFH
        LCALL   DDD
        RET

DELAY01: MOV  R6, #50
DE_A:   MOV  R7, #0
DE_B:   DJNZ R7, DE_B
        DJNZ R6, DE_A
        RET

DELAY02: MOV  R6, #6
DE_A1:   MOV  R7, #18h
DE_B1:   DJNZ R7, DE_B1
         DJNZ R6, DE_A1
         RET
DELAY03: MOV  R5,#02H
DE_6:	 MOV  R6,#0BFH
DE_4:    MOV  R7,#0BFH
DE_5:    DJNZ R7,DE_5
         DJNZ R6,DE_4
         NOP
         NOP
         DJNZ R5,DE_6
         RET

TAB:    DB  "杭州康芯电子公司"
        DB  "  热情为您服务  "
        DB  "www.kx-soc.com  "
        DB  "TEL0571-88914587"
TAB_2:  DB  "曾经沧海难为水  "
        DB  "  除却巫山不是云"
TAB_3:  DB  "GW-48EDA实验系统"
        DB  "  SOPC实验系统  "
        DB  "Nios实验开发系统"
        DB  "现代DSP 实验系统"

TAB_4:  DB  "现代计算机组成与"
        DB  "体系结构实验系统"
        DB  "嵌入式实验系统  "
        DB  "电子设计竞赛板  "

TAB_5:  DB  "高精度合成信号源"
        DB  "采用FPGA-DDS技术"
        DB  "具有ASK FSK PSK "
        DB  "AM/FM/PM调制输出"

          END

          END
;----------------------------------------------------------------------------------------

⌨️ 快捷键说明

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