|
經(jīng)過兩天摸索,總算有了點結(jié)果,MISO,MOSI,SCLK三個角需要串限流電阻,因為用作SPI時是強推挽模式,其次我將CPHA設(shè)置成了1(我用的是STC12C5A60S2,我看別人的例程里設(shè)置成0也行,他用的15系列,我看看手冊里寫的是SSIG=1時,CPHA=0操作未定義,所有我設(shè)置成了1),但現(xiàn)在還有一個問題就是,接收到的數(shù)據(jù)有時候正確,有時候錯誤(我懷疑是不是我采用杜邦線串電阻的方式連接主機和從機導(dǎo)致的,如果有大神知道可以指導(dǎo)下),等新買的單片機到手打算在進(jìn)一步驗證下(現(xiàn)在手上就2個STC12C5A60S2最小系統(tǒng))。
remark:下面是我改過之后的程序,現(xiàn)在驗證收到數(shù)據(jù)有時正確,有時錯誤,如果有大神知道原因,希望可以指導(dǎo)下
主機
#include "STC12C5A60S2.H"
sbit led=P0^1;
sbit kg=P0^2;
char cksj;
char spifs,spijs;
char flag;
void Delays(int xms) /*1ms*/
{
int i,j;
for(i=xms;i>0;i--)
for(j=125;j>0;j--);
}
void send(int SS)
{
TI=0;
SBUF=SS;
while(!TI);
TI=0;
}
void pkou()
{
P0M0=0X00;
P0M1=0X00;
P1M0=0X00;
P1M1=0X00;
P2M0=0X00;
P2M1=0X00;
P3M0=0X00;
P3M1=0X00;
}
void ini()
{
TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
PCON=0x00;
SCON=0x50;
TR1=1;
flag=0;
spijs=0x12;
kg=1;
EA=0;
}
void inispi()
{
SPDAT=0;
SPSTAT=0XC0;
SPCTL=0XFC;
}
void main()
{
pkou();
ini();
inispi();
while(1)
{
if(RI)
{
while(RI==0);
spifs=SBUF;
RI=0;
kg=0;
SPDAT=spifs;
flag=0;
while(flag==0)
{
flag=SPSTAT;
flag=flag&0x80;
}
SPSTAT=0xc0;
spijs=SPDAT;
kg=1;
send(spijs);
send(0x11);
Delays(10);
}
}
}
從機
#include "STC12C5A60S2.H"
sbit led=P0^1;
char cksj;
char spifs,spijs;
char flag;
void pkou()
{
P0M0=0X00;
P0M1=0X00;
P1M0=0X00;
P1M1=0X00;
P2M0=0X00;
P2M1=0X00;
P3M0=0X00;
P3M1=0X00;
}
void ini()
{
TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
PCON=0x00;
SCON=0x50;
IE2=0X02;
TR1=1;
EA=1;
flag=0;
}
void inispi()
{
SPDAT=0;
SPSTAT=0XC0;
SPCTL=0X6C;
}
void main()
{
pkou();
ini();
inispi();
while(1);
}
void Spi()interrupt 9
{
SPSTAT=0xc0;
spijs=SPDAT;
SPDAT=spijs;
}
|
評分
-
查看全部評分
|