找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2313|回复: 0
打印 上一主题 下一主题
收起左侧

一个关于spi驱动外设的问题。

[复制链接]
跳转到指定楼层
楼主
ID:76986 发表于 2015-4-14 23:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在要用51单片机驱动一个adc(adc5310),要把cs拉低,clk发送时钟,data发生数据,数据在clk的上升沿取样(原本是下降沿,现在在adc的clk前加了一个反相器),一共要发送16位数据,现在用I/O来模拟不行,用spi模块也不行,为什么?下面是我写的两个驱动函数,有人能看出问题出在哪里吗?
void writead5310()
{
signed char i;
   cs=1;
   sclk=0
Delay2us()
cs=0;
for(i=15;i>=1;i--)
{
switch(i)
{
case 1:Delay2us();sclk=0;din=0;Delay2us();sclk=1;Delay2us();sclk=0;din=0;Delay2us();sclk=1;break;
case 2:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 3:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 4:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 5:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 6:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 7:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 8:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 9:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 10:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 11:Delay2us();sclk=0;din=1;Delay2us();sclk=1;break;
case 12:Delay2us();sclk=0;din=0;Delay2us();sclk=1;break;
case 13:Delay2us();sclk=0;din=0;Delay2us();sclk=1;break;
case 14:Delay2us();sclk=0;din=0;Delay2us();sclk=1;break;
case 15:din=0;Delay2us();sclk=1;break;
}
}
cs=1;
sclk=0;
}
  void SPI_SendByte(unsigned int dt)//网卡工作在SPI协议的从模式0:数据在时钟的上升沿锁定,下降沿输出
{
unsigned char y;
   cs=1;
   sclk=0;
Delay2us();
cs=0;
for(y=16;y>0;y--)
{
  if(dt&0x8000)
  {
   
      din=1;

  }
  else
  {
   
      din=0;

  }
  sclk=1;
  dt <<= 1;
  sclk=0;
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表