导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→初学者:双CPU控制点阵显示屏,请求各位指教!!!

* 3931: 初学者:双CPU控制点阵显示屏,请求各位指教!!!

   xdkjason 
xdkjason发表的帖子 

 初学者:双CPU控制点阵显示屏,请求各位指教!!!
主CPU为89C52,主要完成从RAM取出字模;从CPU 为89C2051,完成显示。现在在单步运行或
延时很慢扫描时,两CPU 的显示都正常,但全速运行时,在移位时每半个字中间都停一下,
可是数据都正常。显示中用中断来接收8952传来的数据。原程序如下:
;function: Achieve to display,It be stored in 2051
;sources: interrupt one
          ORG    0000H
          LJMP   MAIN
          ORG    0013H
          LJMP   INTER1         ;Achieve to receive
MAIN:
        MOV     P1,#0FFH
        MOV     SCON,#00H
        MOV     71H,#80H
        MOV     R1,#40H
        MOV     R7,#20H
        MOV     A,#00H
CLRBUF:
        MOV     @R1,A
        INC     R1
        DJNZ    R7,CLRBUF
        CLR     P3.7
        SETB    EA              ;CPU interrupt
        SETB    IT1             ;INT1 is down
        SETB    EX1             ;peripheral interrupt
WAIT:
        MOV     70H,#00H        ;30H USED COUNTE(0-4)
        MOV     R0,#40H         ;display buffer block (40H-5FH为显示缓冲区,7FH
为列控制位)
        MOV     R1,#40H         ;INTERRUPT
LP:
        MOV     A,R1
        CJNE    A,#60H,LP       ;送完32个字节
        CALL    DISPLAY
        LJMP    WAIT

;显示8点阵16列子程序
DISPLAY:
        CLR     P3.7
W1:
        CALL    SENDATA         ;显示第一个字的第(7FH)列
        CJNE    A,#04H,W1
        MOV     70H,#00H        ;该字的四列送完
        CALL    SENDCOT         ;送列控制字
W2:
        CALL    SENDATA
        CJNE    A,#04H,W2
        MOV     70H,#00H
        CALL    SENDCOT
W3:
        CALL    SENDATA
        CJNE    A,#04H,W3
        MOV     70H,#00H
        CALL    SENDCOT
W4:
        CALL    SENDATA
        CJNE    A,#04H,W4
        MOV     70H,#00H
        CALL    SENDCOT
W5:
        CALL    SENDATA
        CJNE    A,#04H,W5
        MOV     70H,#00H
        CALL    SENDCOT
W6:
        CALL    SENDATA
        CJNE    A,#04H,W6
        MOV     70H,#00H
        CALL    SENDCOT
W7:
        CALL    SENDATA
        CJNE    A,#04H,W7
        MOV     70H,#00H
        CALL    SENDCOT
W8:
        CALL    SENDATA
        CJNE    A,#04H,W8
        MOV     70H,#00H
        CALL    SENDCOT
        SETB    P3.7            ;送完一屏的第(71)列
        MOV     A,71H
        RR      A
        MOV     71H,A
        RET

;接收8052传来的数据
INTER1:
        PUSH    ACC
        PUSH    PSW
        MOV     A,P1
        MOV     @R1,A           ;Receive data and send to display buffer
        INC     R1
        POP     PSW
        POP     ACC
        RETI

;将显示缓冲区的内容送去显示
SENDATA:
        MOV     A,@R0          ;显示一个字的第(71H)列
        INC     R0
        MOV     SBUF,A
        JNB     TI,$
        CLR     TI
        INC     70H
        MOV     A,70H
        RET

;送控制位
SENDCOT:
        MOV     A,71H
        MOV     SBUF,A
        JNB     TI,$
        CLR     TI
        RET
        END



发表时间:2001年12月25日9:46:00

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:C51编程:问题老古:请教一个问题,KEIL C51能否编译和仿真RAM为256 
[下一篇帖子]:硬件:哪位做过plcc44的编程器?手头上只有dip40的编程器,可是开发项目用的是plcc44的M