搜索
bottom↓
回复: 3

AD5310的10位数据转换问题【恢复】

[复制链接]

出0入0汤圆

发表于 2008-12-26 00:27:21 | 显示全部楼层 |阅读模式
AD5310与mega16进行数据传输时,用C编写如何转换。请马潮老师指教。谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2008-12-29 23:21:53 | 显示全部楼层
非常感谢!

出0入0汤圆

发表于 2008-12-28 13:59:33 | 显示全部楼层
以前写的程序,好久没看也不知道里面写的什么代码

要准备考试没时间整理,-------希望对你有帮助!!!

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

*文件名:ads1110.C

*功能:ADS1110,16位AD转换,毫伏输出

*说明:标记量可能不正确,自己根据情况校验

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

#include  <iom16v.h>

#include  <macros.h>

#define uchar unsigned char

#define uint  unsigned int

#define SLA_W  0x90//读/写地址

#define SLA_R  0X91 

#define I2cIdle_yes    Flag|=0x02

#define I2cIdle_no     Flag&=~0x02

#define I2cIdle        (Flag&0x02)

#define ADInputNew_yes  Flag|=0x08

#define ADInputNew_no   Flag&=~0x08

#define ADInputNew     ( Flag&0x08)

#define I2CCONFIG    0x0c  //连续转换,15sps



//-----结构体变量-----

struct i2cdata

{unsigned char s;

 int ReceiveData;

}I2cData;

uint  Voltage;           //要显示的电压值

uchar Flag;              //标记量

 

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

*名称:i2c_init()

*功能:初始化I2C接口

*入口参数:无

*出口参数:无

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

void i2c_init()

{TWCR=0X00; //TWI中断禁止

 TWBR=0x0B; //设置波特率

 TWSR=0x00; //设置预分频值

}

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

*名称:ADS1110_init()

*功能:初始化ADS1110

*入口参数:无

*出口参数:无

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

void ADS1110_init()

{

 TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);

 while(!(TWCR&(1<<TWINT)));

  if((TWSR&0XF8)!=0X08) Voltage=0001;//START信号已发出,否则出错处理

 TWDR=SLA_W;                      //写SLA_W

 TWCR=(1<<TWINT)|(1<<TWEN);        

 while(!(TWCR&(1<<TWINT)));

 if((TWSR&0XF8)!=0X18) Voltage=0002;//SLA_W已发出,并收到ACK;否则出错处理        

 TWDR=I2CCONFIG;                  //连续转换,15sps

 TWCR=(1<<TWINT)|(1<<TWEN);        

 while(!(TWCR&(1<<TWINT)));

 if((TWSR&0XF8)!=0X28) Voltage=0003;//DATA已发出,并收到ACK;否则出错处理        

 TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWSTO);        

}

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

*名称:timer_1_init()

*功能:初始化定时器1,CTC模式,比较匹配中断允许,定时70ms(稍大于AD转换时间)

在中断程序种启动I2C

*入口参数:无

*出口参数:无

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

void timer_1_init()

{TCCR1B = 0x00; //stop

 TCNT1H = 0xDD; //setup

 TCNT1L = 0xD4;

 OCR1AH = 0x22;

 OCR1AL = 0x2C;



 ICR1H  = 0x22;

 ICR1L  = 0x2C;

 TCCR1A = 0x00;

 TCCR1B = 0x0B; //start Time



}                                  

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

*名称:StartI2c()

*功能:启动I2C,ADS1110开始转换

*入口参数:无

*出口参数:无

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

void StartI2c()

{TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)|(1<<TWIE);  

 I2cData.s=1;

 I2cIdle_no;                        //置I2C忙标志

 }

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

*名称:timer1_compa_isr()

*功能:T/C1比较匹配中断子程序,在中断程序中,启动I2C.

*入口参数:无

*出口参数:无

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

#pragma interrupt_handler timer1_compa_isr:7   

void timer1_compa_isr(void)

{

 StartI2c();

}

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

*名称:timer1_compa_isr()

*功能:T/C1比较匹配中断子程序,在中断程序中,启动I2C.

*入口参数:无

*出口参数:无

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

#pragma interrupt_handler timer1_compa_isr:7   

void timer1_compa_isr(void)

{

 if(I2cIdle)//I2C闲,启动I2C

  

 StartI2c();

}

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

*名称:twi_isr()

*功能:TWI中断服务子程序,在中断中,读取电压值

*入口参数:无

*出口参数:无

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

#pragma interrupt_handler twi_isr:18            



void twi_isr(void)

{switch(I2cData.s)

   {case 0:StartI2c();          

           break;

    case 1:if((TWSR&0xf8)!=0x08) Voltage=6666;//START信号已发出,否则出错处理               

               TWDR=SLA_R;                        //写SLA_R                

               TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWIE);      

               I2cData.s++;

               break;

    case 2: if((TWSR&0xf8)!=0x40) Voltage=6666;  //SLA+R已发出,并收到ACK ;否则                   

               TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWIE)|(1<<TWEA);       //出错处理

               I2cData.s++;

               break;

    case 3:if((TWSR&0xf8)!=0x50) Voltage=6666; //DATA已收到,ACK已发出;否则        

               I2cData.ReceiveData=TWDR;           //读高八位         //出错处理

               I2cData.ReceiveData=I2cData.ReceiveData*256;               

               TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWIE);

               I2cData.s++;

               break;

    case 4:if((TWSR&0xf8)!=0x58) Voltage=6666; //DATA已收到,NACK已发出;否则出错处理  

                                                                              

               I2cData.ReceiveData=TWDR+I2cData.ReceiveData;//读底八位后与高八位                  

                   TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //停止 

                   I2cData.s=0;                          

                   ADInputNew_yes;//AD新数据到

                   I2cIdle_yes;//I2C空间

                   break;

    default :I2cData.s=0;               

               break;                                                                           

   } 

}

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-3-29 03:19

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

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