我用过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
这个程序是我亲手调试过的,连线正确的话,数码管显示没有问题!其中的延时程序不是太专业,可以自己加一个!
温馨提示:答案为网友推荐,仅供参考