搜索
bottom↓
回复: 0

哪位大神用过ADS8361??为什么我的SPI只用第一次能读到数据?

[复制链接]

出0入0汤圆

发表于 2011-7-27 20:25:48 | 显示全部楼层 |阅读模式
ADS8361是16位的串行AD,我用SPI进行通信,根据它的datasheet,每次输出20位数据,前两位为通道号,后两位为0,中间16位为有用数据,我用SPI读3次,不过为什么只有第一次能读到数据呢?我用串口调试小助手看数据。
这是我的程序:

#include "stc12c5a.h"
sbit A0=P2^0;
sbit M0=P2^1;
sbit M1=P2^2;
sbit cs=P2^3;
/*
MISO P1.6
MOSI P1.5
SCLK P1.7
*/
unsigned char ad_data_high=0,ad_data_mid=0,ad_data_low=0;
unsigned int ad_data;
void delay(unsigned int t)
{
        while(--t);
}
void read_ADS8361(void)
{
        cs=0;
        SPDAT=0x80;                           //启动AD
        while(!(SPSTAT&0x80));
        SPSTAT=0xc0;                   //清SPI标志
        ad_data_high=SPDAT;                  
        SPDAT=0x00;                          
        while(!(SPSTAT&0x80));
        SPSTAT=0xc0;
        ad_data_mid=SPDAT;
        SPDAT=0x00;                          
        while(!(SPSTAT&0x80));
        SPSTAT=0xc0;
        ad_data_low=SPDAT;
        cs=1;
        ad_data=(ad_data_high<<10)+(ad_data_mid<<2)+(ad_data_low>>6);       
}
void main(void)
{
//  SPI初始化
        SPCTL=0xd6;            //SPI使能,主机模式,/SS无关,先发高
        SPSTAT=0xC0;                          //清传输完成标志和写冲突标志
        TMOD=0x20;//设置定时器1为工作方式2,8位自动重装用于产生波特率
         TH1=0xfd; //波特率9600
         TL1=0xfd;
         TR1=1;   //起动时器1
         REN=1;   //允许串口接收
         SM0=0;   //串口工作于方式1 8位
         SM1=1;  
         M0=0;    //AD工作方式选择
         M1=1;
         A0=0;       
        while(1)
        {
                read_ADS8361();
                SBUF=ad_data_high;          //串口调试小助手观察
                while(!TI);
                TI=0;
                SBUF=ad_data_mid;
                while(!TI);
                TI=0;
                SBUF=ad_data_low;
                while(!TI);
                TI=0;

                delay(1000);
                SPCTL=0xd6;            //SPI使能,主机模式,/SS无关,先发高
            SPSTAT=0xC0;                          //清传输完成标志和写冲突标志
        }
}

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

本版积分规则

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

GMT+8, 2024-4-30 15:42

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

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