关于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设置为输入,结果什么波形都没有,为高电平~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
yunyinliu
1楼-- · 2019-07-16 07:05
 精彩回答 2  元偷偷看……
diangongshi
2楼-- · 2019-07-16 11:23
yunyinliu 发表于 2011-12-5 13:51
额~马虎。问题已解决,测试仪器出问题了~嘻嘻

问题解决就好,还好我向下面看了一下,要不我就又在那想啊想啊。。。。。。。
leaveshust
3楼-- · 2019-07-16 14:20
参考一下
yshuo0906
4楼-- · 2019-07-16 18:29
借用下你的程序,老兄

一周热门 更多>