新手求助:两个PIC单片机通过SPI通信问题

2020-02-09 09:32发布

小人现在用两个PIC16F690单片机用SPI通信实验室,Master给slave发8位数据,slave收到数据后,用LED显示出来。

两个单片机的晶振都是32.768KHz

单片机之间的链接:

master               slave
RB5-----------------/SS
SDO-----------------SDI
SDI-----------------SDO
SCK-----------------SCK



slave的RC0 ~ RC5 分别接LED

master程序:

#include<pic.h>

__CONFIG(0x00e8);

#define nop() asm("nop")


unsigned char data_temp;

void init()
{
        TRISB4 = 1;   //SDI设置为输入
        TRISB5 = 0;   //链接片选,设置为输出
        TRISB6 = 0;   //时钟设置为输出
        TRISC7 = 0;   //SDO设置为输出
       
        SSPSTAT = 0x80;   //SPI初始化
        SSPCON = 0x30;       
}

unsigned char spi_comm(unsigned char data)
{
        SSPBUF=data;
        while(!SSPIF);
        SSPIF=0;
        data_temp=SSPBUF;

        return data_temp;
}


void delay(unsigned int x)
{
        unsigned int a,b;
        for(a=x;a>0;a--)
                for(b=50;b>0;b--);
}

void main()
{
        init();
        while(1)
        {
                RB5 = 0;
                delay(1);
                spi_comm(0xaa);     //发送程序
                delay(1);
                RB5 = 1;
        }

}

slave程序:

#include<pic.h>

__CONFIG(0x00e8);
  
#define nop() asm("nop")

unsigned char data_temp;

void init()
{
        TRISB4 = 1;   //SDI 设置为输入
        TRISB6 = 1;   //时钟设置为输入
        TRISC = 0x40;  //片选设置为输入,SDO设置为输出,连接LED的管脚也设置为输出

        SSPSTAT = 0x00;
        SSPCON = 0x34;
}


unsigned char spi_comm(unsigned char data)
{
        SSPBUF=data;
        while(!SSPIF);
        SSPIF=0;
        data_temp=SSPBUF;

        return data_temp;
}


void main()
{
        unsigned char val;
        init();
        while(1)
        {
                val = spi_comm(0);
                PORTC = PORTC|(val & 0x3f);
        }
}


上电以后,LED5(连接RC5)是亮的,其他都不亮。
这个问题困扰我好多天了,用示波器看过,Master发送的数据没有问题,不知道问题出在哪里,请高手帮忙。
万分感谢!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。