英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 4490|回复: 1
打印 上一主题 下一主题

请教pic16f886的SPI通讯问题

[复制链接]
跳转到指定楼层
1#
发表于 2012-8-18 14:22:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我编的程序如下,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
2#
发表于 2012-8-18 14:24:46 | 只看该作者
先检测程序中的配置,ICD2应该没那么容易坏
如果之前能正常跑过的程序现在不行了,那就有可能是器件的问题了

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-4-28 07:56 , Processed in 0.052909 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表