求此程序的执行流程图

fengleigood   2007-12-31 00:35 楼主

                   RS EQU P3.7         ;RS <---->P3.7
                   RW EQU P3.6         ;R/W <--->P3.6
                   E  EQU P3.5         ;E <----->P3.5
                   ORG 0000H
                   AJMP INT
;
;=======================模块初始化================================
INT:    MOV P1,#01H                ;清屏
        ACALL ENABLE
        MOV P1,#38H                ;工作方式设置
        ACALL ENABLE
        MOV P1,#0EH                ;显示状态设置
        ACALL ENABLE
        MOV P1,#06H                ;输入方式设置
        ACALL ENABLE
;
;=====以下是一个循环显示xuehao
;==================在第一行前8位显示字符==================
MAIN1:        MOV P1,#80H                  ;1 0000000,设定DDRAM地址为00H
;                                 实际是设定从显示屏的第1位开始显示
        ACALL ENABLE
        MOV P1,#0FH                ;这P1口仅作为辅助指示用
        MOV DPTR,#TAB1
        MOV R1,#00H
A1:     MOV A,R1
        MOVC A,@A+DPTR
        MOV P1,A                ;把取到的数据送给模块显示
        ACALL WRITER
        INC R1
        ACALL DELAY1S
        CJNE A,#00H,A1        ;遇00H结束
;
;==================在第一行后前8位显示字符===================
MAIN2:  MOV P1,#0C0H         ;1 1000000,设定DDRAM地址为40H
;                                 实际是设定从显示屏的第9位开始显示
        ACALL ENABLE
        MOV P1,#0F0H                ;这P1口仅作为辅助指示用
        MOV DPTR,#TAB2
        MOV R1,#00H
A2:     MOV A,R1
        MOVC A,@A+DPTR
        MOV P1,A                ;把取到的数据送给模块显示
        ACALL WRITER
        INC R1
        ACALL DELAY1S
        CJNE A,#00H,A2        ;遇00H结束
        ACALL DELAY1S
;
;==============重复显示=======================================
        MOV P1,#01H                ;清屏
        ACALL ENABLE
        AJMP MAIN1
;
;======================显示模块前后8位字符表===================
TAB1:    DB "105263010440";xuehao
        DB 00H
;
;======================显示模块后8位字符表======================
TAB2:   DB "weiwei jinshuan"        ;xingming
         DB 00H
;
;
;

;
;===================模块的各个子程序============================
;
;
;========RS=0,RW=0,E=1,使模块工作并准备接收控制指令===========
ENABLE: CLR RS
        CLR RW
        CLR E
        ACALL WAIT
        SETB E
        RET
;
;=======读BF的值,对模块进行任何操作前必须判断模块是否“忙”(BF=1)====
;            如果不“忙”(BF=0)才可以进行各种操作
WAIT:   MOV P1,#0FFH
        CLR RS
        SETB RW
        CLR E
        NOP
        SETB E
        JB P1.7,WAIT
        RET
;
;================RS=1,RW=0,E=1,写显示数据到模块指令============
WRITER: SETB RS
        CLR RW
        CLR E
        ACALL WAIT
        SETB E
        RET
;
;==============延时=============================
DELAY1S:MOV     R5,#04
DL4_PA: MOV     R6,#100
DL4_PB: MOV     R7,#100
        DJNZ    R7,$
        DJNZ    R6,DL4_PB
        DJNZ    R5,DL4_PA
        RET
;===========================================
END



不一定要流程图的,具体的说一下执行过程就行了,谢谢各位大侠了。
因为我很久没有接触汇编了。不太熟悉了。

回复评论 (6)

今天放假哈。。。


LZ是做课设?

那您先扛几天,学学,要是不会

到时候在和你说说。。。
点赞  2007-12-31 16:26
把编译后的HEX或BIN文件载入IDA试试~~~~
点赞  2008-1-1 10:59
大哥,你需要先学习一下LCD的工作流程,你可以下载一些LCD的模块的使用说明书,上面讲得非常清楚的,先设置哪一些位,再设置哪一些位。。。呵呵
点赞  2008-1-3 00:14
点阵显示而已
点赞  2008-1-3 09:34
先给LCD相关寄存器初始化,然后分别显示两组字符.要说明的是,ENABLE子函数是写寄存器指令的,WRITER子函数是写显示数据的,在LCD模块手册上可以找到说明,体现在RS端子的电平上,H写数据,L写指令.该模块采用6800总线,读写是通过RW与E的时序来实现的,RW为L,且E在上升沿时写入.在显示字符时先确定了起始位置,写字符数据采用的方法不用再说了吧
点赞  2008-1-5 10:26
等待牛人来答.
点赞  2008-5-1 03:34
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复