|
我想用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 sck PORTB.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 sck PORTB.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的时序是自己会给的,我觉得不可能。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|