CS5532 C51驱动程序

发布者:Harmonious88最新更新时间:2024-08-22 来源: cnblogs关键字: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值的程序。


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

上一篇:data,bdata,idata,pdata,xdata,code存储类型与存储区
下一篇:手把手教你学51单片机-点亮LED

推荐阅读最新更新时间:2024-11-07 10:36

KeilC51下的带进位循环右移指令是什么
一:C语言实现循环移位: 比如将a=0x45循环左移二位。a循环左移n位,即将原来右面(8-n)位左移n位,而将原来左端的n位移到最右面n位。 实现步骤: 1、将a的左端n位先放到b中的高n位中 b= (8-n); 2、将a左移n位,其右面高n位被补0 c= n; 3、将b,c进行或运算 a=c|b; 程序如下: main() { unsigned char a=0x45,b,c; unsigned int n=2; b=a 8-n) c=a n; a=c|b; } 二:Keil C言实现循环移位 在Keil C51中有这样一个
[单片机]
c51:函数
/* char cabs(char val); // 计算val的绝对值 int abs(int val); long labs(long val); float fabs(float val); float sqrt(float val); float exp(float val); float log(float val); float log10(floatextefn floatl0510〔float val); float sin(flaot val); float cos(flaot val); float tan(flaot val); float asin(flaot val); float acos(fla
[单片机]
LCD1602液晶显示模版+超声波测距(C51)
LCD1602display.h #ifndef _LCD1602DISPLAY_H_ #define _LCD1602DISPLAY_H_ #include reg52.h #include intrins.h typedef unsigned char uchar; typedef unsigned int uint; typedef unsigned long ulong; //************************LCD引脚定义 sbit LCM_RS=P2^5; sbit LCM_RW=P2^6; sbit LCM_E=P2^7; //**************************延时
[单片机]
LCD1602液晶显示模版+超声波测距(<font color='red'>C51</font>)
非常简单的8*8LED点阵c51源代码
/* 实验目的:学会8*8点阵动态扫描方法. */ /* 实验现象:8*8点阵光柱先从0-9每隔一定的时间动态显示。 */ /*【版权】Copyright(C)铁牛 All Rights Reserved */ /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!*/ /*************************************************************/ #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int uch
[单片机]
基于51单片机RTL8019AS的网卡驱动程序
   SNMP网管板使用了RTL8019AS 10M ISA网卡芯片接入以太网。选它的好处是:NE2000兼容,软件移植性好;接口简单不用转换芯片如PCI-ISA桥;价格便宜2.1$/片(我的购入价为22元RMB/片);带宽充裕(针对51);较长一段时间内不会停产。8019有3种配置模式:跳线方式、即插即用P&P方式、串行Flash配置方式。为了节省成本,我去掉了9346而使用X5045作为闪盘存储MAC地址和其他可配置信息。P&P模式用在PC机中,这里用不上。只剩下跳线配置模式可用,它的电路设计参考REALTEK提供的DEMO板图纸。一天时间就可以完成,相对来说硬件设计比较简单。   与这部分硬件相对应的软件是网卡驱动。所
[单片机]
基于51单片机RTL8019AS的网卡<font color='red'>驱动程序</font>
Mini2440 按键驱动程序学习笔记
参考了友善之臂的按键驱动程序和韦东山写的《嵌入式Linux应用开发完全手册》【下载见 http://www.linuxidc.com/Linux/2011-01/31114.htm 】一书的第20章—Linux异常处理体系结构部分的按键驱动程序,修改了部分内容,学习了嵌入式Linux下按键驱动程序。 按照习惯,先看原理,对所学习的知识结构有了大致的了解了开始阅读别人的代码,仔细分析代码实现的每个过程。由于时间有限,我只了解了一些概念性的理论和内核代码中部分数据结构,学习的过程还有待深入。对于我这样的初学者来说,想把资料中所介绍的每个原理和具体的实现方法都完全掌握,恐怕不止是时间的问题,我所追求的是一种快速上手的方法,先学会用再深入
[单片机]
Lcd.h头文件下载-字符型液晶LCD的AVR单片机驱动程序头文件
/***************************************************************************** 单 位:广西民族大学物理与电子工程学院07物本班 文件名称:Lcd.h 文件标识:_LCD_H_ 摘 要:字符型液晶LCD的AVR单片机驱动程序头文件 当前版本:V2.0 *****************************************************************************/ #ifndef _LCD_H_ #define _LCD_H_ #include BaiYuAvrKuD
[单片机]
浅谈C51内存优化(data idata xdata)
对 51 单片机内存的认识,很多人有误解,最常见的是以下两种 ① 超过变量128后必须使用compact模式编译 实际的情况是只要内存占用量不超过 256.0 就可以用 small 模式编译 ② 128以上的某些地址为特殊寄存器使用,不能给程序用 与 PC 机不同,51 单片机不使用线性编址,特殊寄存器与 RAM 使用重复的重复的地址。但访问时采用不同的指令,所以并不会占用 RAM 空间。 由于内存比较小,一般要进行内存优化,尽量提高内存的使用效率。 以 Keil C 编译器为例,small 模式下未指存储类型的变量默认为data型,即直接寻址,只能访问低 128 个字节,但这 128 个字节也不是全为我们的程序所用,
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved