[PIC®/AVR®/dsPIC®产品]

PIC单片机 SPI通信作从机时 同步问题,那位大神能帮忙解决?

[复制链接]
820|0
手机看帖
扫描二维码
随时随地手机跟帖
JasonAnderson|  楼主 | 2018-10-13 13:54 | 显示全部楼层 |阅读模式
本帖最后由 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;
}


发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

22

帖子

0

粉丝