min 发表于 2012-8-18 14:22:25

请教pic16f886的SPI通讯问题

我编的程序如下,PIC16F886,SPI主控,4M晶体,用ICD2调试,当打开SPI串口后,SSPBUF寄存器无法写入数据30H,不知是什么问题,(我试过没打开SPI时是可以写入的),以前也编过这样的程序用ICD2是可以调试的,现在怎么改也没用.各位帮我看看是程序出问题了还是ICD2有问题了.





;*********** PIC16F886的初始化子程序 *****
START_ON    BSF       STATUS,RP0            
            BSF       STATUS,RP1         ;体选3
            CLRF      ANSEL            ;
            CLRF      ANSELH             ;关闭AD引脚通道,设定为数字I/O口
            BCF       STATUS,RP0         ;体选2   
            MOVLW   B'00001110'      ;
            MOVWF   WDTCON             ;WDT分频比为1:4096,溢出时间为0.1秒
            BSF       STATUS,RP0
            BCF       STATUS,RP1         ;体选1
            CLRF      INTCON             ;关闭中断
            CLRF      PIE1               ;
            CLRF      PIE2               ;关闭外设中断2
            CLRF      PCON               ;关闭RAO电压下降中断
            MOVLW   B'00001001'
            MOVWF   TRISA            ;设RA为输出
            MOVLW   B'00000000'
            MOVWF   OPTION_REG         ;设RB弱上拉
            MOVLW   B'00100000'
            MOVWF   TRISB            ;设RB为输出
            MOVLW   B'00100000'
            MOVWF   WPUB               ;关闭RB弱上拉
            CLRF      IOCB               ;关闭引脚电平变化中断功能
            MOVLW   B'10010100'
            MOVWF   TRISC            ;设RC
            CLRF      TRISE
            MOVLW   B'01000000'
            MOVWF   SSPSTAT            ;主要清除SMP位为0,时钟上升沿发送数据
;****************************************
            BCF       STATUS,RP0
            BCF       STATUS,RP1         ;体选0
            CLRF      PORTA            ;RA端口清0
            CLRF      PORTB            ;RB端口清0
            CLRF      PORTC            ;RC端口清0
            CLRF      PORTE            ;RE端口清0
            CLRF      PIR1               ;清除第1外设中断标志位
            CLRF      PIR2               ;清除第2外设中断标志位
            CLRF      ADCON0             ;关闭A/D
            CLRF      SSPCON             ;关闭SPI串行口
;*****************************************
;SPI
CCH_WR      NOP
            MOVLW   B'00100000'
            MOVWF   SSPCON             ;打开SPI串行口
    BSF   SSPCON,SSPEN
            BSF       CSN                ;关闭CC1101串行口
            NOP
            NOP
            BCF       CSN                ;启用CC1101串行口
                        
            MOVLW   30H         
            CALL      SPI_CS             ;调SPI数据收发子程序

            NOP
            .
            .
            .





;*****************************************


;*********** SPI收/发程序
SPI_CS      MOVWF   SSPBUF             ;数据送给SSPBUF后开始发送
            BSF       STATUS,RP0
            BCF       STATUS,RP1         ;体选1
            BTFSS   SSPSTAT,BF         ;查询接受/发送完成否?
            GOTO      $-3                ;否,循环查询
            BCF       STATUS,RP0         ;是,体选0
            MOVF      SSPBUF,W         ;从SSPBUF中取出收到的数据
            RETURN                     ;返回主程序

         END

star 发表于 2012-8-18 14:24:46

先检测程序中的配置,ICD2应该没那么容易坏
如果之前能正常跑过的程序现在不行了,那就有可能是器件的问题了

页: [1]
查看完整版本: 请教pic16f886的SPI通讯问题