CS5532 C51驱动程序

发布者:自由探索者最新更新时间:2017-01-08 来源: eefocus关键字:CS5532  C51  驱动程序 手机看文章 扫描二维码
随时随地手机看文章

//The program for CS5532-ASZ
//This is a 24bit ADC and PGIA
//Made by OurWay and 2006/03/21

//#include
//#include

//根据实际情况定义
//sbit SDI5532 = P2^1;
//sbit SDO5532 = P2^2;
//sbit CLK5532 = P2^3;
//sbit CS5532 = P2^0;

//sbit ACC7 = ACC^7;
//sbit ACC0 = ACC^0;

//#define BYTE unsigned char
//#define WORD unsigned int
#define Adjust5532Run 0
#define ReadSADC5532Run 1
#define ReadMADC5532Run 1

//The ADC results varibles define
struct{
          unsigned char top;
          unsigned char high;
          unsigned char mid;
          unsigned char low;
         }
RegDat;

//The CS5532-ASZ comm define
#define RegRead     0x08
#define RegWrite 0x00

//=== Offset Register ===
#define OffsetRS 0x09

//=== Gain Register ===
#define GainRS 0x0a

//=== Configuration Register ===
#define ConfigWrite 0x03  //write config
#define ConfigRead 0x0b  //read config

#define PSS 0x80        //Power Save Select
#define PDW 0x40       //Power Down Mode
#define RS     0x20        //Reset System
#define RV     0x10          //Reset Valid
#define IS     0x08         //Input Short
#define GB     0x04       //Guard Signal Bit
#define VRS 0x02       //Voltage Reference Select(Ref>2.5V,VRS=0)
#define A1     0x01
#define A0     0x80
#define OLS 0x40
#define OGS 0x10
#define FRS 0x08


//=== Channel Setup Register ===
#define SetupCH1 0x05
#define SetupCH2 0x15

//Channel Select Bits
#define CH1 0x00   //CS1=0,CS0=0
#define CH2 0x40   //CS1=0,CS0=1
//Gain Bits
#define Gain1     0x00
#define Gain2     0x08
#define Gain4     0x10
#define Gain8     0x18
#define Gain16 0x20
#define Gain32 0x28
#define Gain64 0x30

//=== Converter mode ===
#define SingleC 0x80
#define ContinC 0xC0
#define Setup1 0x00
#define Setup2 0x08
#define Setup3 0x10
#define Setup4 0x18
#define Setup5 0x20
#define Setup6 0x28
#define Setup7 0x30
#define Setup8 0x38

//The data(8bit) form MCU to CS5532
void SendByte5532(unsigned char Dat)
       {
        unsigned char i;
        CLK5532 = 0;
        for(i=8;i>0;i--)
           {
            SDI5532=(bit)(Dat & 0x80);
            CLK5532=1;
             _nop_();_nop_();
             _nop_();_nop_();
            CLK5532=0;
             _nop_();_nop_();
             _nop_();_nop_();
            Dat = Dat<<1;
           }
        SDI5532 = 1;
       }

//The Setup CS5532's register
void WriteReg5532(BYTE command,BYTE low,BYTE mid,BYTE high,BYTE top)
       {
        CS5532 = 0;
        SendByte5532(command);
        SendByte5532(low);
        SendByte5532(mid);
        SendByte5532(high);
        SendByte5532(top);
        CS5532 = 1;
       }

//The data(8bit) form CS5532 to MCU
unsigned char ReceiveByte5532(void)
       {
        unsigned char i;
        ACC=0;
        for(i=8;i>0;i--)
           {
            ACC=ACC<<1;
            ACC0=SDO5532;
            CLK5532=1;
             _nop_();_nop_();
             _nop_();_nop_();
            CLK5532=0;
             _nop_();_nop_();
             _nop_();_nop_();
           }
         return(ACC);
       }

//Receive ADC signal data form CS5532 to MCU
#if ReadSADC5532Run
void ReadSADC5532(unsigned char command)
       {
        CS5532 = 0;
        SendByte5532(command);
        do{_nop_();CLK5532=0;SDI5532=0;}while(SDO5532!=0);
        SendByte5532(0x00);              //8bit SCLK and SDI=0;
        RegDat.top = ReceiveByte5532();
        RegDat.high = ReceiveByte5532();
        RegDat.mid = ReceiveByte5532();
        RegDat.low = ReceiveByte5532();
        CS5532 = 1;
       }
#endif

#if ReadMADC5532Run
void ReadMADC5532(unsigned char command)
       {
        CS5532 = 0;
        do{_nop_();}while(SDO5532!=0);
       //SDO5532 = 1;
        SendByte5532(command);            //8bit SCLK and SDI=command;
        RegDat.top = ReceiveByte5532();
        RegDat.high = ReceiveByte5532();
        RegDat.mid = ReceiveByte5532();
        RegDat.low = ReceiveByte5532();
        CS5532 = 1;
       }
#endif

//Receive CS5532's Register from CS5532 to MCU
void ReadReg5532(unsigned char command)
       {
        CS5532 = 0;
        SendByte5532(command);
        RegDat.top = ReceiveByte5532();
        RegDat.high = ReceiveByte5532();
        RegDat.mid = ReceiveByte5532();
        RegDat.low = ReceiveByte5532();
        CS5532 = 1;
       }

#if Adjust5532Run
void Adjust5532(unsigned char command)
       {
        CS5532 = 0;
        SendByte5532(command);
        do{_nop_();}while(SDO5532!=0);
        SendByte5532(0x0a);
        RegDat.top = ReceiveByte5532();
        RegDat.high = ReceiveByte5532();
        RegDat.mid = ReceiveByte5532();
        RegDat.low = ReceiveByte5532();
        CS5532 = 1;
       }
#endif

//The initialization CS5532
void Init5532(void)
       {
        WriteReg5532(0xff,0xff,0xff,0xff,0xff);
        WriteReg5532(0xff,0xff,0xff,0xff,0xff);
        WriteReg5532(0xff,0xff,0xff,0xff,0xff);
        WriteReg5532(0xff,0xff,0xff,0xff,0xfe);
       }
//The CS5532-ASZ subpram end

//用的时间注意我定义的宏,这是个查询方式采集AD值的程序。


关键字:CS5532  C51  驱动程序 引用地址:CS5532 C51驱动程序

上一篇:51c单片机开发
下一篇:LED PWM调光C程序

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

VxWorks系统下的RTL8139驱动程序改进
0 引言 RTL8139是台湾Realtek半导体公司生产的一种快速以太网控制器,提供符合PCI2.2标准的接口,兼容IEEE802.3u 100BASE-T规范,支持IEEE-802.3x全双工流量控制,支持10Mbit.s-1/100Mbit.s-1全双工、半双工自适应,价格便宜,性能稳定,是PC机、电信终端产品中应用最多的以太网控制器之一。RTL8139在各种操作系统下的驱动都能从Realtek公司网页下载,其中包括VxWorks系统下的驱动,而且提供C源代码。但是在嵌入式系统下,针对不同的硬件平台,往往需要修改该驱动程序以提高其稳定性和效率。基于MPC8241 CPU的硬件平台,本文提出RTL8139在VxWorks系统
[应用]
#C51中断定时(PWM输出+外部中断频率检测)
前言 C51单片机自身无PWM输出,可以借用T1定时中断输出一定频率的脉冲信号,且占空比可调,便于继续开发 提示:以下是本篇文章正文内容,下面案例可供参考 一、场景 样例1:P3引脚输出固定频率PWM信号,占空比人为调整 样例2:PWM+外部中断检测频率验证 步步进阶 二、PWM简介 PWM(Pulse Width Modulation)脉冲宽度调制,是一种对模拟信号电平进行数字编码的方法。 占空比:高电平占周期的比例,如f=1Hz,T=1s,T1=0.5s,占空比即为50% 为什么这么说呢? 1.pwm本身就是一个方波信号,1和0对应数字电路中高电平、低电平。 2.思考下:负载两端(如LED、直流电机等)直流供电,
[单片机]
#<font color='red'>C51</font>中断定时(PWM输出+外部中断频率检测)
Keil C51总线外设操作问题的深入分析
阅读了《单片机与嵌入式系统应用》2005年第10期杂志《经验交流》栏目的一篇文章《Keil C5l对同一端口的连续读取方法》(原文)后,笔者认为该文并未就此问题进行深入准确的分析。文章中提到的两种解决方法并不直接和简单。笔者认为这并非是Keil C51中不能处理对一个端口进行连续读写的问题,而是对Keil C51的使用不够熟悉和设计不够细致的问题,因此特撰写本文。 本文中对原文提到的问题,提出了三种不同于原文的解决方法。每种方法都比原文中提到的方法更直接和简单,设计也更规范。(无意批评,请原文作者见谅) 1 问题回顾和分析原文位置 原文中提到:在实际工作中遇到对同一端口反复连续读取,Keil C5l编译并未达到预期的结果
[单片机]
C51单片机 的定时器学习笔记
/*-------------------------------------------------------*/ /* -------------author: robinson_911 -------------------------*/ /* -------------date:2014年2月 -------------------------*/ /* -------------content:关于串口 定时器程序 -----------*/ // 在22.1184MHZ下,通过定时器0,每1s通过串口发送数据 /*---------------------------------------------------
[单片机]
一种基于C51的多任务机制及应用
摘要:本文介绍了一种在MCS51单片机程序中实现多任务机制的简单方法,并给出了源代码和一个应用实例。通过中断进行实时任务切换,具有结构简单清晰、代码量少、不需使用汇编等优点。该方法亦可应用于其他单片机系统。 关键词:多任务系统 单片机 C51 中断 安防系统 引言 传统的单片机程序一般采用单任务机制,单任务系统具有简单直观、易于控制的优点。然而由于程序只能按顺序依次执行,缺乏灵活性,只能使用中断函数实时地处理一些较短的任务,在较复杂的应用中使用极为不便。嵌入式多任务操作系统的出现解决了这个问题。在多任务系统中,可以同时执行多个并行任务,任务之间可以相互跳转。但是嵌入式操作系统在提供强大功能的同时,也带来了代码量大、结构复杂
[应用]
keil c51 的安装
1、简介 用于编写单片机加载程序 keil 分为 MTK 和 C51 两个版本 下载的时候注意看清楚,MTK 版里面没有 C51 系列的单片机 2、下载 1)官网下载 官方下载地址:https://www.keil.com/download/product 官网需要填写 很多信息 笔记麻烦 CSDN 下载: https://download.csdn.net/download/qq_27061049/10926800 4、安装 1)点击运行程序 一步一步安装,直到安装成功 2)打开程序,进行注册 3)复制 cid 4)3.打开“注册机”: (1)粘贴上面复制的CID, (2)目标选择C51, (3)生成
[单片机]
keil <font color='red'>c51</font> 的安装
51单片机——I2C总线驱动程序
为方便移植,采用多文件工程的方式。 void Delay10us()//延时10us { unsigned char a,b; for(b=1;b 0;b--) for(a=2;a 0;a--); } 起始信号:在SCL时钟信号在高电平期间SDA信号产生一个下降沿 void I2cStart()//为方便与其他函数衔接,起始之后SDA和SCL都为0,虽然这与I2C总线空闲状态不符,但并不影响程序运行 { SDA=1; Delay10us(); SCL=1; Delay10us();//建立时间是SDA保持时间 4.7us SDA=0; Delay10us();//保持时间是 4us SCL=0;
[单片机]
基于MPC860的HDLC通道驱动程序的设计与实现
摘要:阐述了MPC860芯片及其SCC接口的基本工作原理,介绍了在SCC通道上实现HDLC协议的基本设计思想及具体实现,并给出了主要功能函数的设计流程。 关键词:HDLC MPC860 VxWorks操作系统 驱动程序 HDLC作为一种基于点到点/多点的数据链路层协议,常常用来连接器由器和网关等网络设备。摩托罗拉公司生产的MPC860微处理器是当前应用非常广泛的嵌入式微处理器,良好的性价比和强大的通信与网络协议处理能力以及丰富的通信接口支持使其非常适合构建VOIP网关;特别是其SCC接口本身支持HDLC协议,因此可以通过它的一个SCC接口来为VOIP网关和信令网之间提供链路支持。VOIP作为一种基于IP的数据传输技术,广泛地
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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