//**********************mcu端口初始化子程序*************************************
//**********************mcu端口初始化子程序*************************************
void Port_Init(void)
{
PORTA = 0xFF;
DDRA = 0xFD; // display data
PORTB = 0xFF; //PB7->SCK,PB5->SI.PB4->CS拉高 , PB6->SO拉高
DDRB = 0xB3; // PB7->SCK,PB5->SI.PB4->CS输出, PB6->SO输入
PORTC = 0xC3; //m103 output only
DDRC = 0xC2; // PC0->key1 PC1->LED PC7..6->dispaly h&l
PORTD = 0x78;
DDRD = 0x00; //
}
//***************************SPI初始化子程序************************************
void Spi_Init(void)
{
uchar temp;
SPCR |= 0x73;//0x51; //不使用SPI中断,其它同上 1/4晶振速率
SPSR = 0x00; //setup SPI 0x01双倍速率
temp = SPSR; //!!!
temp = SPDR; //清空SPI,和中断标志,使SPI空闲
}
//************************************SPI写子程序*******************************
unsigned char SPISendByte(unsigned char cData)
{
SPDR = cData;
while(!(SPSR & (1<<SPIF)));
return SPDR;
}
//************************************SPI读程序*********************************
unsigned char SPIRecvByte(void)
{
return SPISendByte(0x00); // 产生SCK时钟,读操作
}
我是使用的mega16硬件SPI,作为主机。。我SPI初始化和配置都写好了。。也检查了很多遍。。我测试SPI写一字节数据到SPDR数据寄存器中,但是写入以后,SPDR寄存器还是0xFF..不知道大家遇到这问题没有?。。有没有解决的办法?谢谢。。下面我把SPI的源代码贴出来。。大家看看:
|