我現(xiàn)在要用51單片機驅動一個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模塊也不行,為什么?下面是我寫的兩個驅動函數(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)//網卡工作在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;
}
}
|