搜索
bottom↓
回复: 4

【求助】51单片机模拟spi协议控制ADS1118没有反应

[复制链接]

出0入0汤圆

发表于 2015-5-27 17:55:03 | 显示全部楼层 |阅读模式
想用ADS1118测量电压,液晶显示,液晶模块调试过了,但是ADS1118有问题,求大神指教
——————————————————————————————————————————————————————分割线——————————————————————————————————————————————————————
/*ads1118.c文件*/

#include "ads1118.h"


void delay_ms(unsigned int z)
{
        unsigned int x;
        for(;z>0;z--)
        for(x=110;x>0;x--);
}

void ADS1118_Init(void)
{
        CS_H;                                           //ADS1118进行初始化
        SCLK_H;
        MOSI_L;
        Write_ADS1118(CONFIG_VALUE);
}

        void Write_ADS1118(unsigned int send_dat)
{
        unsigned char i;
        SCLK_L;                         //CPOL = 0,空闲状态为0
        CS_L;                         //片选使能
        delay_ms(1);
        for(i=0;i<16;i++)
        {
                if(send_dat & 0x8000)        //从最高位开始送信号,每次都只判断最高位
                        MOSI_H;
                else
                        MOSI_L;
                send_dat <<= 1;   //已经把最高位送给MOSI变量,进行左移,次高位变为最高位
                _nop_();  //延时一个机器周期
                SCLK_H;          //拉高时钟,此时应为读操作,这次不做操作
                _nop_();  
                SCLK_L;          //拉低时钟,此时为写操作,将最高位送入了芯片中
        }
        CS_H;
        SCLK_H;
        MOSI_L;
        MISO_L;       
}

  unsigned int Read_ADS1118()
  {
          unsigned char i;
          unsigned int rec_dat;
          SCLK_L;                         //CPOL = 0,空闲状态为0
        CS_L;                         //片选使能
        _nop_();
        for(i=0;i<16;i++)
        {
                _nop_();  //延时一个机器周期
                SCLK_H;          //拉高时钟,进行读操作
                rec_dat <<= 1;            
                if(READ_MISO)
                rec_dat |= 0x01;
                _nop_();  
                SCLK_L;          //拉低时钟,此时为写操作,这次不做事
        }
        CS_H;
        SCLK_H;
        MOSI_L;
        MISO_L;
        return(rec_dat);
  }

————————————————————————————————————————————————————————————————分割线——————————————————————————————————————————————
/*ads1118.h文件*/
#ifndef __ADS1118_H__
#define __ADS1118_H__

#include <reg52.h>
#include <intrins.h>

#define CONFIG_VALUE    0X018B       //AIN0-AIN1  4.096  128sps  pull on DOUT


sbit SCLK = P2^1;
sbit MOSI = P2^2;
sbit MISO = P2^3;
sbit CS   = P2^0;

#define SCLK_H     SCLK = 1
#define SCLK_L     SCLK = 0

#define MOSI_H     MOSI = 1
#define MOSI_L     MOSI = 0

#define MISO_H     MISO = 1
#define MISO_L     MISO = 0

#define CS_H       CS = 1
#define CS_L       CS = 0

#define READ_MISO  P2 & 0X8  

extern void ADS1118_Init(void);
extern void Write_ADS1118(unsigned int dat);
extern unsigned int Read_ADS1118();

#endif

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2015-5-27 18:52:46 | 显示全部楼层
I2C程序有问题,没看到你的ACK指令。

出0入0汤圆

发表于 2015-5-27 19:15:28 | 显示全部楼层
randyzzy 发表于 2015-5-27 18:52
I2C程序有问题,没看到你的ACK指令。

老大,人家是SPI协议……

出0入0汤圆

发表于 2015-5-27 19:33:32 | 显示全部楼层
看程序很难发现错误的,如果条件允许的话挂上示波器看波形吧。祝你早日成功

出0入0汤圆

发表于 2015-5-27 21:01:05 | 显示全部楼层
不好意思,我用过ADS1110,没仔细看。1110是I2C协议的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-11 02:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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