如题,我在网上看了很多有关msp430和nrf905的收发程序,发现几乎有一个共同点,就是都喜欢用单片机的io口模拟spi口。
程序如下:
//*****************SPI 读**********************************//
uchar SPI_READ(void)
{ uchar bit_ctr,byte; for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit { byte = (byte << 1); IO_Set_SCK(); // Set SCK high.. if((MISO & P3IN)==MISO) byte |=1; else byte&=~1; IO_Clear_SCK(); // ..then set SCK low again } return(byte); // return read byte
}
//***********************SPI 写***************************//
void SPI_WRITE(uchar byte)
{ uchar bit_ctr; for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit { if(BIT7 == (byte & 0x80)) IO_Set_MOSI(); else IO_Clear_MOSI(); IO_Set_SCK(); byte = (byte << 1); // shift next bit into MSB.. IO_Clear_SCK(); } }
但是大部分msp430系列本来就带有spi口,不知道他们为何要用I/O口模拟SPI口。spi口速度肯定要比那些模拟的速度快啊,小弟为此十分迷茫。
另外这个帖子 http://www.microcontrol.cn/bbs/a/a.asp?B=100&ID=32059&q=1&r=19795,
那位老大曾经用spi调试出来过 程序如下:
//===============NRF905 SPI读函数==================
uchar SpiRead(void)
{ U1TXBUF=0; while(!(U1TCTL&TXEPT)); return U1RXBUF;
}
//==============NRF905 SPI写函数==================
void SpiWrite(uchar send)
{ U1TXBUF=send; while(!(U1TCTL&TXEPT)); //等待发送器为空
}
但小弟没有调试成功 不知道是否是晶振的问题 偶的晶振是32768hz
试问 nrf905能否直接用spi发送接收数据呢 谢谢各位大哥大姐们指教 |