(100分高分悬赏,答对还有追加) 单片机 SPI 传送出现乱码问题

发送数据的间隔很短的话(不超过10秒),不会出现乱码
但是发数的间隔一旦过了10秒,就出现乱码了

我用的PIC单片机,想问下哪位大侠有此方面的经验,在此谢过
MELCOCA可能理解错了:发送的时间间隔是人工自己设置的,发送间隔就是这么长
NINGLING__21:是一个当前发送的数据块和下一个将要发送的数据块的时间间隔
SD_JACK:用的是定时器,能否将调试的步骤说具体一些?~~~

我用过PIC16F877的SPI方式向数码管发送数据,间隔一秒都用不到,没有任何问题!
你的原因我想可能是你的程序写的有点问题,我这里有一个调试过的小程序,你把它烧到板子里实验一下,理解了代码就没什么问题了!
list p=16F877A
include "p16F877A.inc"
COUNTER EQU 30H
N EQU 20H
M EQU 21H

org 0000H
;* * * * * * * * * * * * * * * *
NOP
MAIN NOP
BSF STATUS,RP0
MOVLW B'11000111' ;设RC5,RC4,RC3为输出口
MOVWF TRISC
BCF INTCON,GIE ;关中断
CLRF SSPSTAT ;清除SMP,CKE位,BF位
BCF STATUS,RP0
MOVLW B'00110010' ;SPI主控,CKP=1,Fosc/64
MOVWF SSPCON
CLRF COUNTER ;计数器清零
NEXT
MOVF COUNTER,0
CALL CONVERT ;查表子程序
MOVWF SSPBUF
BTFSS PIR1,SSPIF
GOTO $-1
BCF PIR1,SSPIF
BCF PORTC,4
NOP
BSF PORTC,4

CALL DELAY
INCF COUNTER,1
MOVLW 0FH
ANDWF COUNTER,1
GOTO NEXT
GOTO $
;* * * * * * * * * * * * * * * *
CONVERT
ADDWF PCL,1
RETLW 3FH ;0的笔段码
RETLW 06H ;1
RETLW 5BH ;2
RETLW 4FH ;3
RETLW 66H ;4
RETLW 6DH ;5
RETLW 7DH ;6
RETLW 07H ;7
RETLW 7FH ;8
RETLW 6FH ;9的笔段码
RETLW 77H ;A
RETLW 7CH ;B
RETLW 39H ;C
RETLW 5EH ;D
RETLW 79H ;E
RETLW 71H ;F
;* * * * * * * * * * * * * * * *
DELAY
movlw d'250' ;
movwf N
movlw d'250'
movwf M
loop1 decfsz N,1
goto loop1
loop2
decfsz M,1
goto loop1
return

;* * * * * * * * * * * * * * * *
END

这个程序是我亲手调试过的,连线正确的话,数码管显示没有问题!其中的延时程序不是太专业,可以自己加一个!
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-05-17
10秒钟对于电信号是一个非常大的时间间隔。不应该停顿这么长时间。怀疑是接收芯片的硬件焊接、电压等问题造成。还有就是对使用的I/O口输入状态或输出状态没有确定指配。
第2个回答  2009-05-18
你说的间隔,是一个字节与一个字节之间的间隔?
如果说是一位与一位之间的间隔,那太长了肯定不行的。

如果是块与块之间的话,应该是程序问题,或是干扰引起
第3个回答  2009-05-19
你的“发数的间隔”是如何实现的,定时器?延时循环?
无论如何,如果真的如你所说“一旦过了10秒,就出现乱码”,那么问题多半出在定时环节上,例如一旦定时时间超过10秒,某个变量或标志会被意外修改,变量或者寄存器溢出、超出表示范围,以及程序的流程意外改变,某个中断被意外允许或者屏蔽等等。
嘿嘿,这中问题不看具体东西是说不清楚的,调试的方法大家都会,关键是如何找到问题所在。

(100分高分悬赏,答对还有追加) 单片机 SPI 传送出现乱码问题
我用过PIC16F877的SPI方式向数码管发送数据,间隔一秒都用不到,没有任何问题!你的原因我想可能是你的程序写的有点问题,我这里有一个调试过的小程序,你把它烧到板子里实验一下,理解了代码就没什么问题了!list p=16F877A include "p16F877A.inc"COUNTER EQU 30H N EQU 20...

c“一百分高分悬赏,答对还有追加”(请问MATLAB高手一个如何实现一个迭加...
for k=1:numel(m) a=m(k)*binopdf(0:m(k),100,0.01); s(k)=sum(a(:)); end; 这样函数就可以接受矩阵了。 然后在命令行输入 >>m=0:50; >>y=fun1(m); >>plot(m,y)你的函数参数要求是数值,但命令行输入的时候给函数传递的是一个向量0:50。 所以函数内部在for循环那里,for k=0:m里面...

高分悬赏。答对追加分。最少100
单曲音乐要不?

英语单词辨析(100分高分悬赏,有好的再追加分)
请帮忙列出尽可能多的英语单词辨析例如traveltriptourjourney之间的区别;beatstrikehitknock之间的区别等,当然这些还不够,我需要尽可能全面的,高中范围的,100分高分悬赏,有好的... 请帮忙列出尽可能多的英语单词辨析例如travel trip tour journey之间的区别;beat strike hit knock之间的区别等,当然这些还不够,我需要尽...

相似回答
大家正在搜