標(biāo)題: 一個關(guān)于spi驅(qū)動外設(shè)的問題。 [打印本頁]

作者: sarlaga    時間: 2015-4-14 23:20
標(biāo)題: 一個關(guān)于spi驅(qū)動外設(shè)的問題。
我現(xiàn)在要用51單片機(jī)驅(qū)動一個adc(adc5310),要把cs拉低,clk發(fā)送時鐘,data發(fā)生數(shù)據(jù),數(shù)據(jù)在clk的上升沿取樣(原本是下降沿,現(xiàn)在在adc的clk前加了一個反相器),一共要發(fā)送16位數(shù)據(jù),現(xiàn)在用I/O來模擬不行,用spi模塊也不行,為什么?下面是我寫的兩個驅(qū)動函數(shù),有人能看出問題出在哪里嗎?
void writead5310()
{
signed char i;
   cs=1;
   sclk=0
Delay2us()
cs=0;
for(i=15;i>=1;i--)
{
switch(i)
{
case 1:Delay2us();sclk=0;din=0;Delay2us();sclk=1;Delay2us();sclk=0;din=0;Delay2us();sclk=1;break;
case 2:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 3:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 4:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 5:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 6:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 7:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 8:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 9:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 10:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 11:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 12:Delay2us();sclk=0;din=0;Delay2us();sclk=1;break;
case 13:Delay2us();sclk=0;din=0;Delay2us();sclk=1;break;
case 14:Delay2us();sclk=0;din=0;Delay2us();sclk=1;break;
case 15:din=0;Delay2us();sclk=1;break;
}
}
cs=1;
sclk=0;
}
  void SPI_SendByte(unsigned int dt)//網(wǎng)卡工作在SPI協(xié)議的從模式0:數(shù)據(jù)在時鐘的上升沿鎖定,下降沿輸出
{
unsigned char y;
   cs=1;
   sclk=0;
Delay2us();
cs=0;
for(y=16;y>0;y--)
{
  if(dt&0x8000)
  {
   
      din=1;

  }
  else
  {
   
      din=0;

  }
  sclk=1;
  dt <<= 1;
  sclk=0;
}
}





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1