单片机 LED动态显示问题

来源:百度知道 编辑:UC知道 时间:2024/09/21 22:12:14
显示缓冲区的数据来自与PC机发出的数据,现在问题是在单片机收到3个数据执行显示程序时,PC机又发出数据,单片机串口中断接受数据来更新显示,但是很容易收不到,谁知道怎么做才能完美的更新显示数据啊,
我的意思是单片机第一次收完显示数据后就一直在运行显示程序,然后下一次中断来的时候接收完数据RETI回去一定还在显示程序.但是这样子我经常就收不到或者漏收某个数据造成显示的不对(即3个显示缓冲字节有部分没有更新..)
ORG 0000H
SJMP START
ORG 0023H
SJMP STR
START: MOV TMOD,#20H
MOV PCON,#00H
MOV TL1,#0F4H
MOV TH1,#0F4H
SETB EA
CLR ET1
SETB ES
SETB TR1
MOV SCON,#50H
MOV R7,#3
MOV P0,#00H
MOV R0,#79H
MOV DPTR,#SEGTAB
AGA: CJNE R7,#0,AGA
MOV R7,#3
MOV R1,#0
SJMP SDL1
中断接收程序
STR: MOV A,SBUF
SUBB A,#30H
MOV @R0,A
INC R0
DEC R7
CLR RI
RETI
显示子程序
SDL1: MOV R6,#1
MOV R2,#3
MOV R0,#79H
SDL2: MOV A,@R0
MOVC A,@A+DPTR
SDL3: MOV P0,A
MOV A,R6
MOV P2,A
MOV R4,#02H
DL: MOV R5,#50H
DL6: DJNZ R5,DL6
DJNZ R4,DL
INC R0<

我的意思是单片机第一次收完显示数据后就一直在运行显示程序,然后下一次中断来的时候接收完数据RETI回去一定还在显示程序.但是这样子我经常就收不到或者漏收某个数据造成显示的不对(即3个显示缓冲字节有部分没有更新..)

答: 显示是需要不段更新的.
方法是利用用中断把显示数据存到显示缓冲里. 然后应该不断的把显示缓冲里的数据更新到显示输出.比如说10ms更新一次. 这样就算显示缓冲字节有部分没有更新也只能影响10ms的时间,下次更新显示就正常了. 10ms的错误是不影响显示效果的.

你的程序出错在中断里的 R0 没能得到及时清0, 超出范围了显示就会乱.

单片机与PC进行通讯时,最好有个开始标志,当收到标志后就开始接收,,接收完后不在接收,除非收到标志。

做个显示缓冲区,显示用定时器控制,接收到的数据先判断是否合法,合法的计算后送到显示缓冲区,不合法的丢弃,同时注意不要在接收中断中进行数据计算