AD0832的51驱动程序

发布者:SereneNature最新更新时间:2016-11-17 来源: eefocus关键字:AD0832  51驱动程序 手机看文章 扫描二维码
随时随地手机看文章

/*
********************************************************************
********************************************************************
*/

#ifndef _ADC0832_H_
#define _ADC0832_H_

#include

#define    uchar   unsigned char
#define    uint    unsigned int


extern void          _nop_     (void);

/*
********************************************************************
** 函数名 :ADC0832读数据程序
** 入口   :需转换通道channel  [0:1]
** 返回   : 无符号字符型 uchar
** 例子   : Data_adc = ReadAdc0832( 0 );   //读取adc0832芯片的0通道模拟电压
** 说明   : 使用时请在芯片加上精准电压源, 建议彩专用芯片
********************************************************************
*/
uchar ReadAdc0832( uchar channel );
//ADC0832端口定义
#define     ADC0832_SCK_H      P3_2 = 1
#define     ADC0832_SCK_L      P3_2 = 0

#define     ADC0832_DIDO_H     P3_3 = 1
#define     ADC0832_DIDO_L     P3_3 = 0
#define     ADC0832_DIDO       P3_3

#define     ADC0832_CS_H       P3_4 = 1
#define     ADC0832_CS_L       P3_4 = 0

 

//工作时序
//当cs由高变低时,选中ADC0832。在时钟的上升沿,DI端的数据移入ADC0832内部的多路地址移位寄存器。
//在第一个时钟期间,Dl为高,表示启动位,紧接着输入两位配置位。当输入启动位和配置位后,选通输入模拟通道,转换开始。
//转换开始后,经过一个时钟周期延迟,以使选定的通道稳定。ADC0832接着在第4个时钟下降沿输出转换数据。
//数据输出时先输出最高位(D7~DO);输出完转换结果后,又以最低位开始重新输出一遍数据(D7~DO),两次发送的最低位共用。当片选cS
//为高时,内部所有寄存器清0,输出变为高阻态。如果要再进行一次模傲转换,片选cs必须再次从高向低跳变,后面再输入启动位和配置位

//adc0832读数据
uchar ReadAdc0832( uchar channel )
{
    uchar i = 0;
    uchar outdata = 0;
    //初始化: 选通 数据口保持高电平
 //当cs由高变低时,选中ADC0832。在时钟的上升沿,DI端的数据移入ADC0832内部的多路地址移位寄存器
    ADC0832_CS_L;   // 使能
    ADC0832_DIDO_H; //
    ADC0832_SCK_L;  //第一次触发
    _nop_();
 _nop_();
    ADC0832_SCK_H;  //
    _nop_();
 _nop_();
 
 //模拟通道的选择及单端输入和差分输入的选择
 ADC0832_DIDO_H;
    ADC0832_SCK_L;  //第二次触发
 _nop_();
 _nop_();
    ADC0832_SCK_H;
    _nop_();
 _nop_();
 
 if( channel == 1 ) 
     {
         ADC0832_DIDO_H;
     }
 
    else
     {
         ADC0832_DIDO_L;
     }
 ADC0832_SCK_L;  //第三次触发
    _nop_();
 _nop_();
 ADC0832_SCK_H;
 _nop_();
 _nop_();
 
 
    ADC0832_SCK_L;
 _nop_();
 _nop_();
    ADC0832_DIDO_H;   //置为输入准备读数据
    ADC0832_SCK_H;
 _nop_();
 _nop_();

 outdata = 0;     //初始化
 
    //读数据D7~D0
    for( i = 1; i <= 8; i++ )
     {
         if( ADC0832_DIDO == 1 )
             {
     outdata |= 0x01;
    }

   ADC0832_SCK_H;
         ADC0832_SCK_L;

         outdata = outdata << 1; //左移一位
     }

    //此函数不再读数据D0~D7  (注意D0位重叠)
    ADC0832_CS_H;        //禁止
     
 return outdata;
}
#endif  //


关键字:AD0832  51驱动程序 引用地址:AD0832的51驱动程序

上一篇:51的测试程序(主要是用仿真串口进行测试)
下一篇:I2C(24C64)驱动程序

推荐阅读最新更新时间:2024-03-16 15:20

51单片机的1602驱动程序
//////////////////////////////////////////////////////头文件///////////////////////////////////////////////////// /******************************************************************************* * 标题: 1602显示驱动程序 * * 文件: 1602lcd.h 1602lcd.c * * 日期: 2010-3
[单片机]
基于Small RTOS51的PS/2键盘驱动程序开发
引言   随着嵌入式系统的发展,嵌入式软件设计向软件平台靠近,单片机软件设计不再是单一线程结构方式,而是逐步采用多任务的设计思想。实时操作系统使得实时应用程序的设计、扩展和维护变得更容易,无需大的改动就可以增加新的功能。然而随着任务的增加,要求输入的数据也会增加,类型也呈多样化。如果仍然用矩阵式扫描键盘,势必浪费单片机巨大的资源,且增加了成本。若用PC机标准PS/2键盘取而代之,将可解决以上矛盾。本文介绍基于实时操作系统 Small RTOS51的PS/2键盘驱动程序的设计,具有响应快,移植性强,占用资源少等优点。 1 驱动的设计   驱动的实现一般可用以下几种方法:① 使用任务编写;② 使用消息编写;③ 使用信号量编写。P
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved