英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流
标题:
请教pic16f886的SPI通讯问题
[打印本页]
作者:
min
时间:
2012-8-18 14:22
标题:
请教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
先检测程序中的配置,ICD2应该没那么容易坏
如果之前能正常跑过的程序现在不行了,那就有可能是器件的问题了
欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/)
Powered by Discuz! X3.2