本帖最后由 JasonAnderson 于 2018-10-13 13:55 编辑
在调试PIC单片机硬件SPI是遇到 从同步问题。
PIC型号:PIC16F1933/1936,PIC18F25K80
遇到的问题:
调用硬件SPI作为从机接收数据,出现数据移位现象(无法同步) 使能SS引脚还是不能同步。
以下是PIC18F25K80的源代码,请帮忙分析原因,是硬件机制问题还是代码问题。
#include "htc.h"
#include "spi.h"
// SPI
#define SPI_CLK LATC3 //输入口
#define SPI_SDO LATC5 //输出口
#define SPI_SDI LATC4 //输入口
#define SPI_SS LATA6 //输入口
unsigned char SPI_Receive_Buf[SPI_Receive_Buf_Len];
unsigned char SPI_Receive_Count=0;//SPI单帧接收长度
unsigned char SPI_active_count=0;//SPI单帧结束计数器
unsigned char SPI_Connect_Count=0;//SPI断开连接计数器
//函 数 名: SPI_Init()
//功能描述: 初始化SPI 口的工作模式
void SPI_Init(void)
{
unsigned char dat;
// SPI CLK==RC3 SDO==RC5 SDI=RC4
TRISC &= 0b11011111; //RC5设为输出口
TRISC |= 0b00011000; //RC3、RC4设为输入口
TRISA |= 0b01000000; //RA6设为输入口
dat=SSPBUF;
SSPSTAT|=0b00000000; //
SSPSTAT&=0b01111111;
SSPCON1 =0b00110100; //bit2:0 (0100:ss->EN) (0101>ss->GPIO)
// SSPCON3|=0x10;
// TRISA &= 0b11111111; //RA0设为输出口 LED
// SSPOD=0;
SSPIE=1; //充许SPI中断
SSPIF=0;
// INTCON|= 0b11000000; //允许全局中断
SSPIP=1; //中断优先级高
}
//SPI 中断入口处理程序(放中断)
void SPI_Int(void)
{
SSPIF=0;
SSPIE=0;
SPI_Connect_Count=0;
SPI_active_count=0;
SPI_Receive_Buf[SPI_Receive_Count]=SSPBUF;
SPI_Receive_Count++;
if(SPI_Receive_Count>(SPI_Receive_Buf_Len-1))SPI_Receive_Count=0;
SSPIE=1;
}
|