初学者:双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