微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STC12C5A60S2的SPI单主单从机通信的问题,请神们相助.......

STC12C5A60S2的SPI单主单从机通信的问题,请神们相助.......

时间:10-02 整理:3721RD 点击:

以下是主机和从机的程序,为什么从机在串口助手中显示的数据和主机发送过去的不一样呢,我试着换了几个主机发送的数据,发现从机显示的数据也会改变,但没有规律。请神门指点。
主机程序:
#include<STC12C5A60S2.H>
#define SPIF (SPSTAT & 0x80)
sbit SCLK=P1^7;
sbit MISO=P1^6;
sbit MOSI=P1^5;
sbit SS=P1^4;
sbit LED=P1^0;
void init_UART()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
PCON=0x00;
SM0=1;
SM1=1;
REN=1;
TR1=1;
EA=1;
ES=1;
ET1=1;
}
void init_SPI()
{
SPCTL=0xfd;
SPSTAT=0xc0;
SPDAT=0;
}
void main()
{
init_UART();
init_SPI();
while(1)
{
  SPDAT=15;
  while(!SPIF);
  SPSTAT=0xc0;
}
}

从机程序:
#include<STC12C5A60S2.H>
#include<stdio.h>
#define SPIF  ( SPSTAT & 0x80 )  
sbit SCLK=P1^7;
sbit MISO=P1^6;
sbit MOSI=P1^5;
sbit SS=P1^4;
sbit LED=P1^1;
unsigned int result;
void init_SPI()
{
    SPCTL=0xed;
    SPSTAT=0xc0;
    EA=1;
    IE2=0x03;
}
void Init_UART()
{
    TMOD=0x20;
    TH1=0xfd;
    TL1=0xfd;
    TR1=1;   
    REN=1;   
    SCON=0x50;
    PCON=0x00;
    SM0=1;
    SM1=1;   
    ET1=1;
    EA=1;
    ES=1;
}

void main()
{
   init_SPI();
   init_UART();
   result=0;
   while(1)
   {
      ES=0;
      TI=1;
      printf("the get is:%i\n",result);
      while(!TI);
      ES=1;
      TI=0;
   }
}
void SPI_REC() interrupt 9
{
   SPSTAT=0xc0;
   result=SPDAT;
}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top