icando778 发表于 2011-3-22 09:33:55

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的时序是自己会给的,我觉得不可能。

chenyuqiu 发表于 2011-3-22 11:14:35

看了一下楼主的代码,看来楼主还不是很了解AVR的功能模块,建议楼主先好好看看数据手册!!

icando778 发表于 2011-3-22 14:27:05

回复【1楼】chenyuqiu 小陈
-----------------------------------------------------------------------
我觉得我设置的是对的,应该是时序给的不对,但是我改了很多次还是不对。能说具体点吗?
页: [1]
查看完整版本: SPI主机发数据从机接收实现流水灯