|
这是相关代码,这些代码在我另一块实验板上可以正常读到EN25T80的ID:0X1C 0X51 0X14,可是弄到这块实验板上后就读成0X18 0X00 0X06了,时钟都是24M
//Data is shifted out on the falling edge of the CLK.
//D0(数据输出)采样于CLK的下降沿
//器件默认为SPI模式0,时钟空闲时为低。
unsigned char SPI_ReadByte(void){
unsigned char i,j=0;
for(i=0;i<8;i++){
j<<=1;
SPI_CLK=0;
_nop_();
_nop_();
_nop_();
_nop_();
if(SPI_SDO) j++;
SPI_CLK=1;
// j<<=1;
}
SPI_CLK=0; //MODE 0,时钟空闲时为低。
return j;
}
//Data is shifted in on the rising edge of the CLK.
//DI(数据输入)采样于CLK的上升沿
//器件默认为SPI模式0,时钟空闲时为低。
void SPI_WriteByte(unsigned char wByte){
unsigned char i;
for(i=0;i<8;i++){
SPI_CLK=0;
if(wByte&0x80) {SPI_SDI=1;}
else {SPI_SDI=0;}
wByte<<=1;
SPI_CLK=1;
_nop_();
}
SPI_CLK=0; //MODE 0,时钟空闲时为低。
}
void readid()
{
SPI_CLK=0; //MODE 0,在CS变低之前,时钟变成低电平
_nop_(); //MODE 0,在CS变低之前,时钟变成低电平
_nop_();
SPI_CS=0; //
SPI_WriteByte(0x9f); //READ ID
ss[0]=SPI_ReadByte();
// SPI_WriteByte(255); //dummy.8个CLK
ss[1]=SPI_ReadByte();
// SPI_WriteByte(255);
ss[2]=SPI_ReadByte();
SPI_CLK=0; //MODE 0,在CS变高之前,时钟变成低电平
_nop_(); //MODE 0,在CS变高之前,时钟变成低电平
_nop_();
SPI_CS=1; //MODE 0,在CS变高之前,时钟变成低电平
}
void main(void)
{ unsigned char nn,n2,tt,mm,qq,pg;
// unsigned long lp=0;
// unsigned char *p;
delay();
for(mm=0;mm<8;mm++)
for(nn=0;nn<128;nn++)
LCDRAM[mm][nn]=0;
lcdreset(); //初始化液晶显示控制器
while(1)
{ pg=0;
while(pg<8)
{ qq=0;
readid();
for(nn=0;nn<3;nn++)
{ mm=ss[nn];
tt=mm/16;
tt=tt*5;
for(n2=0;n2<5;n2++)
LCDRAM[pg][qq++]=ASC_57[tt++];
tt=mm%16;
tt=tt*5;
for(n2=0;n2<5;n2++)
LCDRAM[pg][qq++]=ASC_57[tt++];
qq+=4;//空4列;
}
mypute12864();
pg++;
delay();
delay();
delay();
delay();
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|