2688|1

5

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

我这个51单片机模拟的读写程序有错么? [复制链接]

#include <C8051F410.h>
#include <intrins.h>

sbit SPI_Clk = P0^2;
sbit SPI_Out = P0^3;
sbit SPI_In  = P0^6;
sbit SPI_Cs  = P0^7;

void System_Setup(void);
void SPI_Write(unsigned int SPI_Data);
unsigned int SPI_Read(void);


void main(void)
{
 unsigned int j = 0;
 unsigned char k = 0;

 System_Setup();

    SPI_Clk = 0;
       SPI_Cs=1;
       SPI_Cs=0;
       SPI_Write(0x5853);
    SPI_Cs=1;
    SPI_Cs=0;
       SPI_Read();
    SPI_Cs=1;
   
}

void SPI_Write(unsigned int SPI_Data)           //SPI写
{
 bit j;

 j = ((SPI_Data >> 15) & 0x01);
 SPI_Out = j;
  
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0;
 _nop_();

 j = ((SPI_Data >> 14) & 0x01);
 SPI_Out = j;

 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0;
 _nop_();
 
 j = ((SPI_Data >> 13) & 0x01);
 SPI_Out = j;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0;
 _nop_();

 j = ((SPI_Data >> 12) & 0x01);
 SPI_Out = j;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0;
 _nop_();
 
 j = ((SPI_Data >> 11) & 0x01);
 SPI_Out = j;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0;
 _nop_();

 j = ((SPI_Data >> 10) & 0x01);
 SPI_Out = j;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0;
 _nop_();

 j = ((SPI_Data >> 9) & 0x01);
 SPI_Out = j;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0;
 _nop_();

 j = ((SPI_Data >> 8) & 0x01);
 SPI_Out = j;
 
 SPI_Clk = 1;
 _nop_();
    SPI_Clk = 0;
 _nop_();

 j = ((SPI_Data >> 7) & 0x01);
 SPI_Out = j;
 _nop_();

 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0;
 _nop_();

 j = ((SPI_Data >> 6) & 0x01);
 SPI_Out = j;

 SPI_Clk = 1;
 _nop_();
    SPI_Clk = 0;
 _nop_();

 j = ((SPI_Data >> 5) & 0x01);
 SPI_Out = j;
 
 SPI_Clk = 1;
 _nop_();
    SPI_Clk = 0;
 _nop_();

 j = ((SPI_Data >> 4) & 0x01);
 SPI_Out = j;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0;
 _nop_();

 j = ((SPI_Data >> 3) & 0x01);
 SPI_Out = j;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0;
 _nop_();

 j = ((SPI_Data >> 2) & 0x01);
 SPI_Out = j;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0;
 _nop_();

 j = ((SPI_Data >> 1) & 0x01);
 SPI_Out = j;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0;
 _nop_();

 j = ((SPI_Data >> 0) & 0x01);
 SPI_Out = j;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0;
 _nop_();

 SPI_Out = 0;
}  

unsigned int SPI_Read(void)   //SPI读
{
 unsigned int Read_Data = 0;
 bit j;

 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0; 
 _nop_();

 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0; 
 _nop_();

 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0; 
 _nop_();
 
 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0; 
 _nop_();
 
 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0; 
 _nop_();
 
 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0; 
 _nop_();

 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;
 
 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0; 
 _nop_();
 
 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;

 SPI_Clk = 1;
 _nop_(); 
 SPI_Clk = 0; 
 _nop_();
 
 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;

 SPI_Clk = 1;
 _nop_(); 
 SPI_Clk = 0; 
 _nop_();
 
 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;

 SPI_Clk = 1;
 _nop_(); 
 SPI_Clk = 0; 
 _nop_();
 
 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;

 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0; 
 _nop_();
 
 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;

 SPI_Clk = 1;
 _nop_(); 
 SPI_Clk = 0; 
 _nop_();

 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;

 SPI_Clk = 1;
 _nop_(); 
 SPI_Clk = 0; 
 _nop_();

 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;

 SPI_Clk = 1;
 _nop_();
 SPI_Clk = 0; 
 _nop_();
 
 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;

 SPI_Clk = 1;
 _nop_(); 
 SPI_Clk = 0; 
 _nop_();
 
 j = SPI_In;
 Read_Data = Read_Data | j;
 Read_Data = Read_Data<<1;
 
 SPI_Clk = 1;
 _nop_(); 
 SPI_Clk = 0; 
 _nop_();
 
 j = SPI_In;
 Read_Data = Read_Data | j; 

 return(Read_Data);
}

void System_Setup(void)
{
 PCA0MD &= ~0x40;                                //第6位置0,看门狗定时器被禁止
    PCA0MD = 0x00;                           //Disable Watchdog timer

 OSCICN  = 0x87;                       // 内部振荡器不分频,Set clock to 24.5 MHz
    RSTSRC  = 0x04;                        // 使能时钟丢失检测器,Enable missing clock detector
 
 P0MDIN  = 0xff;                                 //P0不配置为模拟输入 
 P0MDOUT = 0x0c;                                 // P0.2、P0.3配置为推挽方式,p0.2 p0.3 as push-pull
 P1MDOUT = 0xff;                                 //P1口设置成推挽方式
 XBR1    = 0x40;                                 //交叉开关使能 

 

 

 

读到的数据不是我想要的数据啊?这是为什么呢?大家帮忙分析下。刚接触单片机啊。谢谢。

此帖出自51单片机论坛
点赞 关注
 

回复
举报

5

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
其实没多少内容,就是一个读、一个写的程序。大家帮忙看看。
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表