SPI主机发数据从机接收实现流水灯
我想用SPI通信,通过主机控制从机,在从机的PC口实现流水灯。但是我从机没有接收到数据,大家帮我看看程序哪里有问题。还有就是SCK的这个时序我有点不清楚。//****发送机
#include <mega16.h>
#define uint unsigned int
#define uchar unsigned char
uchar table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delay(uint x)
{
uint j,k;
for(j=x;j>0;j--)
for(k=1140;k>0;k--);
}
#define mosi PORTB.5
#define miso PORTB.6
#define ss PORTB.4
#define sckPORTB.7
void main()
{
uint i;
DDRB=0XB0;//SS,MOSI,SCK为输出
SPCR=0X50;//
SPSR=0X00;
while(1)
{
for(i=0;i<8;i++)
{
SCK=0;
ss=0;
SCK=1;
SCK=0;
SPDR=table;
while(!SPIF);
ss=1;
delay(1000);
}
//****接收机
#include <mega16.h>
#define uint unsigned int
#define uchar unsigned char
#define mosi PORTB.5
#define miso PORTB.6
#define ss PORTB.4
#define sckPORTB.7
uchar receive()
{
while(!SPIF);
return SPDR;
}
void main()
{
DDRB=0X40; //MOSI,SS,SCK 为输入
PORTB=0X00; //上拉
SPCR|=0x40;
DDRC=0XFF; //流水灯输出口
PORTC=0XFF;
while(1)
{
receive();
PORTC=SPDR;
}
}
大家帮我看看这个程序,这个程序肯定是不对的。我问了下别人,人家说那个SCK的时序是自己会给的,我觉得不可能。 看了一下楼主的代码,看来楼主还不是很了解AVR的功能模块,建议楼主先好好看看数据手册!! 回复【1楼】chenyuqiu 小陈
-----------------------------------------------------------------------
我觉得我设置的是对的,应该是时序给的不对,但是我改了很多次还是不对。能说具体点吗?
页:
[1]