关于SPI通信问题

2019-07-16 06:36发布

求助~我使用的是STC12C5A60单片机,它自身带有SPI接口,我程序如下:
void main(void)
{
BYTE8bit i;

BYTE8bit temp;
Initial_Uart();
Initial_SPI();
IE2|=ESPI;
//ES=1;
EA=1;
while(1)
  {
   #ifdef MASTER
   ACC=Recv_Uart();
   SPISS=0;
   SPDAT=ACC;
   #endif
  }
}
void spi_isr() interrupt 9 using 1
{
SPSTAT=SPIF|WCOL;
#ifdef MASTER
  SPISS=1;
  Send_Uart(SPDAT);
#else
  SPDAT=SPDAT;
#endif
}

void Initial_Uart(void)
{
SCON=0x50;     //set UART mode as 8-bit variable baudrate
TMOD|=0x20;     //timer1 as 8 bit auto reload mode
AUXR=0x40;
//AUXR=0x10; //BRT enable,s2mod=0,brtX12=0,T1X12=0
//PCON&=0x7F; //SMOD=0
TH1=TL1=0xFD;     //11.0592 9600
TR1=1;
}

void Initial_SPI(void)
{
SPDAT=0;     //initial SPI data
SPSTAT=SPIF|WCOL;   //clear SPI status
SPISS=1;
#ifdef MASTER
SPCTL=SSIG|SPEN|MSTR|CPOL;   //master mode
#else
SPCTL=SPEN;     //slave mode
#endif
}

void Send_Uart(BYTE8bit dat)
{
SBUF=dat;  //send current data
while(!TI)  //wait pre-data sent
TI=0;   //clear ti flag
}

BYTE8bit Recv_Uart(void)
{
while(!RI);
RI=0;
return SBUF;
}

BYTE8bit SD_Init(void)
{
BYTE8bit retry,temp;
BYTE8bit i;
BYTE8bit CMD[]={0x40,0x00,0x00,0x00,0x00,0x95};
do
{
SPISS=1;
for(i=0;i<10;i++)
{
  SPDAT=0xff;
}
temp=Write_Cmd_SD(CMD);
}while((temp!=1)&&(retry<300));
SPISS=1;
return(temp);

}
我直接把从机拿掉想测试MOSI/CLK波形~发现CLK有波形8个周期的波形,但MOSI无输出一直为低电平~

有哪位高人指点一下~

看了网上很多说要设置P口模式,推挽输入,输出或漏极什么的,怎么设置啊?

我把MOSI/CLK设置为推挽输出,MISO设置为输入,结果什么波形都没有,为高电平~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。