| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 546 人关注过本帖
标题:关于SPI和芯片配置,求大神看看,哪里出问题了?
只看楼主 加入收藏
zcl2013c
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-10-28
结帖率:60%
收藏
已结贴  问题点数:10 回复次数:4 
关于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; 
}
无法上传附件?
搜索更多相关主题的帖子: 通信 资料 
2013-12-30 12:04
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:4 
这个你不应该在这里问。

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-30 12:10
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:4 
是编译错误还是运行时出错?

总有那身价贱的人给作业贴回复完整的代码
2013-12-30 13:09
zcl2013c
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-10-28
收藏
得分:0 
回复 3楼 embed_xuel
是无法和芯片联通
不知哪里错误
2013-12-30 13:44
mic123
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:22
专家分:123
注 册:2013-12-23
收藏
得分:4 
1,检查IO 的输入输出配置,CS 输出,CLK输出,SDO输出,SDI输入
2,CS的使能的高低配置,看代码是 低电平有效。
3,看代码 是 SCK上升沿是输入,下降沿是输出 确认下。
4,代码中的起始位 ,一次就好了。
5,在读的过程中,SCK也变化一次就好了。
6,确认delay时间。
2013-12-31 12:44
快速回复:关于SPI和芯片配置,求大神看看,哪里出问题了?
数据加载中...
 
   



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

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