微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于SPI通信问题

关于SPI通信问题

时间:10-02 整理:3721RD 点击:
求助~我使用的是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设置为输入,结果什么波形都没有,为高电平~

额~马虎。问题已解决,测试仪器出问题了~嘻嘻

问题解决就好,还好我向下面看了一下,要不我就又在那想啊想啊。

参考一下

借用下你的程序,老兄

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

网站地图

Top