打印

帮忙看下这汇编代码 有几处未定义的 怎么改呢。。?

[复制链接]
1415|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
乱舞的风|  楼主 | 2013-6-22 12:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
; 说明:在文件中定义了LCD操作地址,左半屏的写命令操作地址为2004H,写
;       数据操作地址为2005H,右半屏的写命令操作地址为2000H,写数据操
;       作地址为2001H.
;       在DP-51ProC上连线:连接A2区A15~A10插孔至A3区G2B、G2A、G1、C、B、A插孔;
;                          连接A3区/Y0插孔至B3区/CS插孔;
;                          连接A2区A0,A1,A2,P10插孔至B3区A0,A1,A2,RST插孔;
;**********************************************************************/

;**********************************************************************/
;控制位和端口
                LCD_RST                        BIT                P1.0        ;LCD复位控制,低电平复位
                LCD_LS_CMD                EQU                2004H        ;左(前)半屏的写命令操作地址
                LCD_LS_DAT                EQU                2005H        ;左(前)半屏的写数据操作地址
                LCD_RS_CMD                EQU                2000H        ;右(后)半屏的写命令操作地址
                LCD_RS_DAT                EQU                2001H        ;右(后)半屏的写数据操作地址
;控制命令字
                LCM_DISPON                EQU                3FH                ;显示开
                LCM_DISPOFF                EQU                3EH                ;显示关
                LCM_STARTROW        EQU                0C0H        ;显示起始行0,可以用LCM_STARTROW+x设置起始行。(x<64)
                LCM_ADDRSTRY        EQU                0B8H        ;页起始地址,可以用LCM_ADDRSTRY+x设置当前页(即行)。(x<8)
                LCM_ADDRSTRX        EQU                40H                ;列起始地址,可以用LCM_ADDRSTRY+x设置当前列(即更)。(x<64)       
;数据定义
                DisRAM                        XDATA        0C000H        ;显示RAM起始地址,64*8*2=1024字节,仿真器RAM起始地址       
                DisBuf                        DATA        22H     ;34D 8字节显示缓冲区 每行显示16个ASCII字符
                DPH1                        DATA        32H            ;50D 暂存DPH单元
                DPL1                        DATA        2BH            ;43D 暂存DPL单元

;**********************************************************************/
                        ORG 8000H
                        ljmp START
                        ORG 8100H
START:                mov SP,#4FH                            ;堆栈从50H开始


//                        mov TMOD,#01H                    ;T0选择方式一的定时
//                        mov TH0,#0FCH               ;1ms定时周期
//                        mov TL0,#066H
//                        setb ET0
//                        setb TR0

                        ;初始化显示
                        lcall RST_LCD                    ;复位液晶屏
            lcall Clr_DisRAM
                        lcall DisRAM2LCD

                        mov DPTR,#LCD_LS_CMD
                        mov A,#LCM_DISPON
                        movx @DPTR,A
                        mov A,#LCM_STARTROW
                        movx @DPTR,A

                        mov DPTR,#LCD_RS_CMD
                        mov A,#LCM_DISPON
                        movx @DPTR,A
                        mov A,#LCM_STARTROW
                        movx @DPTR,A
                  
                  
                   ;User自定义显示内容  
                        mov R7,#1                                ;R7确定字符起始横坐标
                        mov R6,#0                            ;R6=0 第一行
                        mov DisBuf,#1                    ;
                        mov DisBuf+1,#2                    ;
                        mov DisBuf+2,#3                    ;
                        mov DisBuf+3,#4                    ;
                        mov DisBuf+4,#5                        ;
                        mov DisBuf+5,#6                    ;
                        mov DisBuf+6,#7                        ;
                        mov DisBuf+7,#8                    ;
                        mov DisBuf+8,#9                        ;
                        mov DisBuf+9,#0         ;结束标志
                        lcall Display

                        mov R7,#1
                        mov R6,#1                                ;R6=1 第二行
                        mov DisBuf,#2                        ;
                        mov DisBuf+1,#10                ;
                        mov DisBuf+2,#11                ;
                        mov DisBuf+3,#12                ;
                        mov DisBuf+4,#13                ;
                        mov DisBuf+5,#14                ;
                        mov DisBuf+6,#15                ;
                        mov DisBuf+7,#16                ;
                        mov DisBuf+8,#0         ;结束标志
                        lcall Display

                        mov R7,#1
                        mov R6,#2                                ;第三行
                        mov DisBuf,#8                        ;
                        mov DisBuf+1,#'"'                ;
                        mov DisBuf+2,#'{'                ;
                        mov DisBuf+3,#'`'                ;
                        mov DisBuf+4,#30                ;
                        mov DisBuf+5,#31                ;
                        mov DisBuf+6,#0         ;结束标志
                        lcall Display

                        mov R7,#1
                        mov R6,#3                                ;第四行
                        mov DisBuf,#4                        ;
                        mov DisBuf+1,#5                    ;
                        mov DisBuf+2,#7                    ;
                        mov DisBuf+3,#1                    ;
                        mov DisBuf+4,#3                    ;
                        mov DisBuf+5,#6                     ;
                        mov DisBuf+6,#37
                        mov DisBuf+7,#12                 
                        mov DisBuf+8,#0                        ;结束标志
                        lcall Display
                        lcall DisRAM2LCD


                        setb P3.2
                        jb P3.2,$
                        ljmp Start
                       

               
;子程序名:Display
;功能:把Disbuf中的文字编码查表显示点阵数据,送DisRAM显示缓冲区
;入口参数:Disbuf 字符编码 ,R7:X,水平位置(0~15)   R6:y,垂直位置(0~3)
;占用资源:A,B,DPTR,R0,R7,R6,A,4字节堆栈
Display:        push ACC
                        push B
                        push PSW
                        ;计算每行输出显示的DisRAM起始地址;
                        mov A,R7
                        anl A,#07H
                        mov R7,A
                        mov A,R6
                        anl A,#03H
                        mov R6,A

                        mov DPTR,#DisRAM
                        mov A,DPH
                        add A,R6                         ;R6;y 显示行坐标 y=0~3 最多显示四行  16*4 =64
                        mov DPH,A
                        mov A,R7                         ;R7:x 显示列坐标,x=0~15 ,16列         16*8=128
                        mov B,#8
                        mul AB
                        mov DPL,A
                        mov R0,DPL                         ;暂存堆栈
                        mov R2,DPH                         ;DPTR-->R2R0 每次写入DisRAM起始地址

                        mov R1,#DisBuf
NextChr:
                        mov A,@R1
                        jz DisOver
                        dec A
                        mov B,#16
                        mul AB
                        mov DPTR,#DisCode
                        add A,DPL
                        mov DPL,A
                        mov A,B
                        addc A,DPH
                        mov DPH,A                         ;DPTR-->汉字点阵

                        mov R5,#8                         ;上半个汉字点阵
                        clr A
Dis_1:                movc A,@A+DPTR
                        mov P2,R2                         ;从R2取出保存的DisRAM地址高8位
                        movx @R0,A

                        inc R0
                        mov A,R0
                        jnz S128
                        inc R2
S128:                clr A
                        inc DPTR
                        djnz R5,Dis_1

                        mov R5,#8                               ;下半个字符点阵
                        mov A,R0                             ;R0--->A
                        add A,#128-8                         ;液晶每行128点
                        mov R0,A
                        jnc B128
                        inc R2
B128:                clr A
Dis_2:                movc A,@A+DPTR
                        mov P2,R2                         ;从R2取出保存的DisRAM地址高8位
                        movx @R0,A

                        inc R0
                        mov A,R0
                        jnz S1281
                        inc R2
S1281:                clr A
                        inc DPTR
                        djnz R5,Dis_2

                        inc R1

                        mov A,R0
                        clr C
                        subb A,#128                            ;液晶每行128点
                        mov R0,A
                        jnc $+3
                        dec R2
                        ajmp NextChr
DisOver:
                        pop PSW
                        pop B
                        pop ACC
                        ret

;子程序名:DisRAM2LCD
;功能:显示缓冲区DisRAM数据输出到LCD的显示RAM
;占用资源:DPTR,A ,P2,R0,R6,R7
DisRAM2LCD:        mov R7,#0
                        mov DPTR,#DisRAM
NextPage:
                        mov P2,#HIGH(LCD_LS_CMD) ;P2+R0-->LCD左半屏命令端口
                        mov R0,#LOW(LCD_LS_CMD)
                        mov A,#LCM_ADDRSTRY                 ;设置页起始行
                        add A,R7
                        movx @R0,A
                        mov P2,#HIGH(LCD_RS_CMD) ;P2+R0-->LCD右半屏命令端口
                        mov R0,#LOW(LCD_RS_CMD)
                        movx @R0,A

                        mov P2,#HIGH(LCD_LS_CMD) ;P2+R0-->LCD左半屏命令端口
                        mov R0,#LOW(LCD_LS_CMD)
                        mov A,#LCM_ADDRSTRX                 ;设置列起始行
                        movx @R0,A
                        mov P2,#HIGH(LCD_RS_CMD) ;P2+R0-->LCD右半屏命令端口
                        mov R0,#LOW(LCD_RS_CMD)
                        movx @R0,A

                        mov R6,#64
                        mov P2,#HIGH(LCD_LS_DAT) ;P2+R0-->LCD左半屏数据端口
                        mov R0,#LOW(LCD_LS_DAT)
NextDat1:        ;连续左半屏写入64字节 一行128/2 一页
                        movx A,@DPTR
                        movx @R0,A
                        inc DPTR
                        djnz R6,NextDat1

                        mov R6,#64
                        mov P2,#HIGH(LCD_RS_DAT);P2+R0-->LCD左半屏数据端口
                        mov R0,#LOW(LCD_RS_DAT)
NextDat2:        ;连续右半屏写入64字节 一页
                        movx A,@DPTR
                        movx @R0,A
                        inc DPTR
                        djnz R6,NextDat2

                        inc R7
                        cjne R7,#8,$+3
                        jc NextPage                   ;<8 转移
                        ret                                       ;>=8 8页(1024字节)已经传送完

;延时子程序
;子程序名:Delay
;功能:延时 1000 ms
;占用资源:R3,R4,R5
Delay:                mov R3,#20
Del1:                mov R4,#200
Del2:                  mov R5,#123
                   nop
Del3:                  djnz R5,Del3
                   djnz R4,Del2
                           djnz R3,Del1                                     ret

;复位LCD子程序
;子程序名:RST_LCD
;功能:复位LCD,在RST引脚加低电平
;占用资源:R3,R4,R5
RST_LCD:        clr LCD_RST
                        lcall Delay
                        setb LCD_RST
                        ret
;清零DisRAM
;子程序名:Clr_DisRAM
;功能:清零DisRAM
;占用资源:DPTR,R7,R6,A
Clr_DisRAM:        push PSW
                        push ACC
                        push DPL
                        push DPH

                        mov R7,#8
                        clr A
                        mov DPTR,#DisRAM

Next_C:                mov R6,#128
Next_Clr:        movx @DPTR,A
                        inc DPTR
                        djnz R6,Next_Clr
                        djnz R7,Next_C

                        pop DPH
                        pop DPL
                        pop ACC
                        pop PSW
                        ret
DisCode:#include“1.txt”
        END         

相关帖子

沙发
乱舞的风|  楼主 | 2013-6-22 13:06 | 只看该作者
P1.2  p2  p3.3 怎么弄啊   

使用特权

评论回复
板凳
受不了了| | 2013-6-22 16:03 | 只看该作者
看液晶显示的程序就头大,哥发誓一辈子都不会再碰这个:lol

使用特权

评论回复
地板
jerkoh| | 2013-6-24 14:01 | 只看该作者
汇编下  编译通过啊。  

使用特权

评论回复
5
天风立马| | 2013-6-25 16:32 | 只看该作者
想问什么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝