资源简介
自己写的51单片机AD7705程序。板子上验证通过,需要的拿去修改移植。欢迎批评指正。
代码片段和文件信息
#include
#include
#include
/*--- 延时程序,大约微秒级别 ---*/
void Delay_Us(unsigned int us)
{
for(;us>0;us--);
}
/*--- 延时程序,大约毫秒级别 ---*/
void Delay_Ms(unsigned int ms)
{
for(;ms>0;ms--)
Delay_Us(300);
}
/*--- 软件模拟SPI的时序,单片机写数据函数 ---*/
//dat-->要发送的数据
//void SPISendByte(unsigned char dat) //SPI发送
//{
// unsigned char i;
//// CS = 0; CS接地了,一直是低
// SCLK=1;
// SCLK=1;
//
// for(i=0;i<8;i++) //8位数据
// {
// DIN = dat&0x80;
// SCLK = 0;//时钟,低电平时给数据
// SCLK = 0;
// SCLK = 1;
// dat = dat<<1; //移位,下一位移到最高位做准备
// SCLK=1;
// }
//}
void SPISendByte(unsigned char dat)
{
unsigned char a;
SCLK = 1;
for (a=0; a<8; a++)
{
SCLK=0;
if(dat & 0x80)
DIN=1;
else
DIN=0;
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
dat<<=1;
}
DIN=1;
}
/*--- 软件模拟SPI,读数据的程序 ---*/
/*--- 入口参数:无
返回参数:接收的数据,一个字节8位 ---*/
//unsigned char SPIRecvByte(void) //SPI接收
//{
// unsigned char dat = 0;
// unsigned char i;
//// CS = 0;
//
// for(i=0;i<8;i++) //8位满了就跳出
// {
// dat = dat<<1;//接收到的放在最低位,再移到高位,空出第一位
//
// SCLK = 1;
// SCLK = 1;
// SCLK = 0; //低电平的时候读取数据
// SCLK = 0;
//
// if(DOUT)
// dat = dat | 0x01;//SO给的1就写1到dat最低位
// else
// dat = dat & 0xFE;//SO给的0就写0到dat最低位,其他位要移出的不管
// }
//
// SCLK = 1;
// return dat;
//}
/*--- 软件模拟SPI,读数据的程序 ---*/
/*--- 入口参数:无
返回参数:接收的数据,16位 ---*/
unsigned int SPIRecv16bit(void) //SPI接收
{
unsigned int dat = 0;
unsigned char i;
// CS = 0;
for(i=0;i<16;i++) //8位满了就跳出
{
dat = dat<<1;//接收到的放在最低位,再移到高位,空出第一位
SCLK = 1;
SCLK = 1;
SCLK = 0; //低电平的时候读取数据
SCLK = 0;
if(DOUT)
dat = dat | 0x0001;//SO给的1就写1到dat最低位
else
dat = dat & 0xFFFE;//SO给的0就写0到dat最低位,其他位要移出的不管
}
SCLK = 1;
return dat;
}
/*---------------------------------------------------------------------------- */
//函数:reset_AD7705
//功能:AD7705串行接口失步后将其复位。复位后要延时500us再访问
//参数:无
//返回:无
//变量:无
//备注: DIN高电平的写操作持续足够长的时间,至少32个串行时钟周期AD7705将会回到默认状态
//----------------------------------------------------------------------------
void reset_AD7705(void)
{
unsigned char i;
SPISendByte(0x01);//下一步写操作
DIN=1;
for(i=0; i<36; i++)
{
SCLK=0;
SCLK=0;
SCLK=1;
}
Delay_Us(160);//500US
}
//配置芯片通道1,并开始校准
void AD7705_init1(void)
{
reset_AD7705();
// Delay_Ms(1);
SPISendByte(0x20);//0X21择通道2,0x20通道1,下一步写时钟寄存器
SPISendByte(0x04); //主时钟使能,更新率25HZ
SPISendByte(0x10);//0X11选择通道2,0x10选择通道1.下一步写设置寄存器
SPISendByte(0x44); //自校准模式,单极性,不使用缓冲器。开始转换
while(DRDY);
}
//配置芯片通道2,并开始校准
void AD7705_init2(void)
{
reset_AD7705();
// Delay_Ms(1);
SPISendByte(0x21);//0X21择通道2,0x20通道1,下一步写时钟寄存器
SPISendByte(0x06); //主时钟使能,更新率250HZ
SPISendByte(0x11);//0X11选择通道2,0x10选择通道1.下一步写设置寄存器
SPISendByte(0x44); //自校准模式,单极性,不使用缓冲器。开始转换
while(DRDY);
}
//读取一次16位data
unsigned int Read_datareg1(vo
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4073 2013-12-13 09:14 ad7705.c
文件 1228 2013-12-12 10:21 ad7705.h
- 上一篇:语音控制小车
- 下一篇:基于Fourier神经网络的图像复原算法
相关资源
- TM7705 AD7705驱动代码
- 基于STM32的AD7705双路信号采集
- AD7705 源程序
- stm32程序,AD7705,tsl2506步进电机,d
- AD7705stm32程序
- 基于51单片机AD7705使用的C程序
- AD7705的51程序
- 基于51单片机的AD7705模块电压检测
- ad7705源程序调试
- STC单片机配合AD7705的称重传感器源程
- AD7705驱动程序!非常稳定
- AD7705初始化基于STM32
- 凌阳61板+AD7705转换+lcd1ocmjx8c显示
- AD7705带PCB电路图
- AD7705制作uV电压表
- STM32_ad7705程序
- ad7705verilog程序
- STC15系列驱动AD7705
- AD7705及温度算法
- stm32 ad7705
- 基于AD7705的51单片机的电压表设计
评论
共有 条评论