| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4238 人关注过本帖
标题:关于SPI和芯片配置,求大神看看,哪里出问题了?
只看楼主 加入收藏
zcl2013c
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-10-28
结帖率:60%
收藏
已结贴  问题点数:10 回复次数:2 
关于SPI和芯片配置,求大神看看,哪里出问题了?

写了段spi与芯片通信的代码,不知到哪里出错,求大神看看
附件有代码和芯片资料
#include "REG51.h"
#include "intrins.h"
#include <stdio.h>
#include <string.h>   

#define uchar  unsigned char
/*************************
    模拟SPI接口I/O定义
*************************/
sbit    spi_cs=P2^7;  
sbit    spi_di=P4^4;  
sbit    spi_clk=P4^1;
sbit    spi_do=P4^5;
void SomeNOP()
{
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
 }
/*******************************
    向SPI器件写入一个字节数据
*******************************/
void spi_write(unsigned char spi_dat)  
{  
    unsigned  char  i;  
    spi_cs=0;  
    for  (i=0;i<8;i++)  
    {   
        spi_clk=0;
        if((spi_dat & 0x80)==0x80)
        {
            spi_di=1;  //写入最高位
        }
        else
            spi_di=0;
        SomeNOP();  
        spi_clk=1;   
        spi_dat=(spi_dat<<1);  //左移一位,依次写入
    }
    spi_clk=0;  
    //spi_cs=1;
}  
/********************************
  从SPI器件读出一个字节数据
********************************/
unsigned char spi_read()  
{  
    unsigned char i,spi_dat;  
    spi_cs=0;
    spi_clk=1;  
    for (i=0;i<8;i++)                     
    {                                 
        spi_clk=0;                                    
        spi_dat=(spi_dat<<1);  //xxxxxxx0
        spi_clk=1;                                                                 
        if(spi_do==1)
        {
            spi_dat|=0x01;  //xxxxxxx0|00000001         
        }
        else
        {
            spi_dat&=~0x01;  //xxxxxxx0&11111110                 
        }
    spi_clk=0;                      //从高到低位依次移入
    //spi_cs=1;
    }
    return spi_dat;  
}



void spiwrite_start()
{
    EA = 0;
    spi_cs = 0;
    spi_clk = 0;
    spi_di = 1;
    SomeNOP();
    spi_clk = 1;
    SomeNOP();
    spi_clk = 0;
    spi_di = 0 ;
    SomeNOP();
    spi_clk = 1;
    //spi_cs = 1;
}
void spiread_start()
{
    EA = 0;
    spi_cs = 0;
    spi_clk = 0;
    spi_do = 1;
    SomeNOP();
    spi_clk = 1;
    SomeNOP();
    spi_clk = 0;
    spi_do = 1;
    SomeNOP();
    spi_clk = 1;
    //spi_cs = 1;
}


//写一个数据
void Write_OneByte(unsigned char addr,unsigned char ddata)
{
    spiwrite_start();
    SomeNOP();
    spi_write(addr);
    SomeNOP();
    spi_write(ddata);
    spi_cs = 1;
    SomeNOP();
}


//读一个数据
unsigned char Read_OneByte(unsigned char addr)
{
    uchar temp;
    spiread_start();
    SomeNOP();
    spi_write(addr);  //先写入地址,设置写
    SomeNOP();
    //spiread_start();
    //SomeNOP();
    temp = spi_read();
    spi_cs = 1;
    SomeNOP();
    return temp;  
}
搜索更多相关主题的帖子: include 接口 通信 资料 
2013-12-30 13:47
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
关注

DO IT YOURSELF !
2013-12-30 15:35
小xiong
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:388
专家分:1722
注 册:2013-2-8
收藏
得分:5 
#include "REG51.h"
 #include "intrins.h"
 #include <stdio.h>
 #include <string.h>   

#define uchar  unsigned char
/*************************
     模拟SPI接口I/O定义
 *************************/
 sbit    spi_cs=P2^7;  
 sbit    spi_di=P3^4;  ////
 sbit    spi_clk=P3^1;////
 sbit    spi_do=P3^5; ////
void SomeNOP()
 {
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
 }
/*******************************
     向SPI器件写入一个字节数据
 *******************************/
 void spi_write(unsigned char spi_dat)  
 {  
     unsigned  char  i;  
     spi_cs=0;  
     for  (i=0;i<8;i++)  
     {   
         spi_clk=0;
         if((spi_dat & 0x80)==0x80)
         {
             spi_di=1;  //写入最高位
         }
         else
            spi_di=0;
         SomeNOP();  
         spi_clk=1;   
         spi_dat=(spi_dat<<1);  //左移一位,依次写入
     }
     spi_clk=0;  
     //spi_cs=1;
 }  
 /********************************
   从SPI器件读出一个字节数据
 ********************************/
 unsigned char spi_read()  
 {  
     unsigned char i,spi_dat;  
     spi_cs=0;
     spi_clk=1;  
     for (i=0;i<8;i++)                     
    {                                 
         spi_clk=0;                                    
         spi_dat=(spi_dat<<1);  //xxxxxxx0
        spi_clk=1;                                                                 
         if(spi_do==1)
         {
             spi_dat|=0x01;  //xxxxxxx0|00000001         
         }
         else
         {
            spi_dat&=~0x01;  //xxxxxxx0&11111110                 
         }
     spi_clk=0;                      //从高到低位依次移入
     //spi_cs=1;
     }
     return spi_dat;  
 }
 


void spiwrite_start()
 {
     EA = 0;
     spi_cs = 0;
     spi_clk = 0;
     spi_di = 1;
     SomeNOP();
     spi_clk = 1;
     SomeNOP();
     spi_clk = 0;
     spi_di = 0 ;
     SomeNOP();
     spi_clk = 1;
     //spi_cs = 1;
 }
 void spiread_start()
 {
     EA = 0;
     spi_cs = 0;
     spi_clk = 0;
     spi_do = 1;
     SomeNOP();
     spi_clk = 1;
     SomeNOP();
     spi_clk = 0;
     spi_do = 1;
     SomeNOP();
     spi_clk = 1;
     //spi_cs = 1;
 }
 

//写一个数据
 void Write_OneByte(unsigned char addr,unsigned char ddata)
 {
     spiwrite_start();
     SomeNOP();
     spi_write(addr);
     SomeNOP();
     spi_write(ddata);
     spi_cs = 1;
     SomeNOP();
 }
 

//读一个数据
 unsigned char Read_OneByte(unsigned char addr)
 {
     uchar temp;
     spiread_start();
     SomeNOP();
     spi_write(addr);  //先写入地址,设置写
     SomeNOP();
     //spiread_start();
     //SomeNOP();
     temp = spi_read();
     spi_cs = 1;
     SomeNOP();
     return temp;  
 }
int main(void)
{
return 0;

}

没看见附件呢
2014-01-04 10:42
快速回复:关于SPI和芯片配置,求大神看看,哪里出问题了?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.065943 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved