logo资料库

ADS1110数据读取和发送.pdf

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
ADS1110数据读取和发送 数据读取和发送 绍了ADS1110数据读取和发送详细程序 终于将ADS1110芯片中数据的读取和发送函数完成啦,不过中间遇到一个很头痛的问题,就是从网上参考的代码运行后,只 能读取ADS芯片高字节数据,低字节和后面的字节数据都不正确;结果调试发现是读函数参数的问题。太坑啊,大神以后麻 烦传文库文档或者资料的时候,请调试通过啦再传吧,不然能害死小白啊。以下是ADS1110芯片(已调试通过)通信代码: 1. IIC.h文档 #ifndef __IIC_H #define __IIC_H #include #include "stm32f10x_i2c.h" #include "delay.h" #include "public.h" /***************************************IO·½ÏòÉèÖÃ************************************/ #define SDA_IN(){GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;} #define SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=2<<12;} //1 - 10MHZ2 - 2MHZ3- 50MHZ /***************************************IO²Ù×&pide;º¯Êý************************************/ #define IIC_SCL PBout(10) //SCL #define IIC_SDA PBout(11) //SDA #define READ_SDA PBin(11) //ÊäÈëSDA #define ADS_ADDE1 0x90 //ADSµØÖ·+д²Ù×&pide; #define ADS_ADDE2 0x91 //ADSµØÖ·+¶Á²Ù×&pide; /*************************************IICËùÓвÙ×&pide;º¯Êý*********************************/ void IIC_Init_Func(void); //³õʼ»¯IICµÄIO¿Ú void IIC_Start(void); //·¢ËÍIIC¿ªÊ¼ÐźŠvoid IIC_Stop(void); //·¢ËÍIICÍ£Ö¹ÐźŠu8 IIC_Wait_Ack(void); //IICµÈ´ýACKÐźŠvoid IIC_Ack(void); //IIC·¢ËÍACKÐźŠvoid IIC_NAck(void); //IIC²»·¢ËÍACKÐźŠvoid IIC_Send_Byte(u8 txd); //IIC·¢ËÍÒ»¸ö×Ö½Ú u8 IIC_Read_Byte(u8 ack); //IIC¶Áȡһ¸ö×Ö½Ú void ADS_Init_Func(void); //ADS³õʼ»¯º¯Êý u16ADS_Read_Func(void); //ADS¶ÁÈ¡º¯Êý #endif 2.IIC.c文档 #include "IIC.h" /************************************************************************************* ** º¯ÊýÃû³Æ£ºIIC_Init_Func
** ÊäÈë²ÎÊý£ºÎÞ ** Êä³ö²ÎÊý£ºÎÞ ** ¹¦ÄÜÃèÊö£º³õʼ»¯IICµÄIO¿ÚÒÔ¼°µ&pide;ÓÃADS³õʼ»¯º¯Êý *************************************************************************************/ void IIC_Init_Func(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //ÍÆÍìÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); IIC_SCL=1; IIC_SDA=1; ADS_Init_Func(); } /************************************************************************************* ** º¯ÊýÃû³Æ£ºIIC_Start ** ÊäÈë²ÎÊý£ºÎÞ ** Êä³ö²ÎÊý£ºÎÞ ** ¹¦ÄÜÃèÊö£º²úÉúIICÆðʼÐźŠ*************************************************************************************/ void IIC_Start(void) { SDA_OUT(); //sdaÏßÊä³ö IIC_SDA=1; IIC_SCL=1; delay_us(4); IIC_SDA=0; //START:when CLK is high,DATA change form high to low delay_us(4); IIC_SCL=0; //ǯסI2C×ÜÏߣ¬×¼±¸·¢ËÍ»ò½ÓÊÕÊý¾Ý } /************************************************************************************* ** º¯ÊýÃû³Æ£ºIIC_Stop ** ÊäÈë²ÎÊý£ºÎÞ ** Êä³ö²ÎÊý£ºÎÞ ** ¹¦ÄÜÃèÊö£º²úÉúIICÍ£Ö¹ÐźŠ*************************************************************************************/
void IIC_Stop(void) { SDA_OUT(); //sdaÏßÊä³ö IIC_SCL=0; delay_us(4); IIC_SDA=0; //STOP:when CLK is high DATA change form low to high delay_us(4); IIC_SCL=1; delay_us(4); IIC_SDA=1; //·¢ËÍI2C×ÜÏß½áÊøÐźŠ} /************************************************************************************ ** º¯ÊýÃû³Æ£ºIIC_Wait_Ack ** ÊäÈë²ÎÊý£ºÎÞ ** Êä³ö²ÎÊý£º·µ»ØÖµ 1£¬½ÓÊÕÓ¦´ðʧ°Ü ** 0£¬½ÓÊÕÓ¦´ð³É¹¦ ** ¹¦ÄÜÃèÊö£ºµÈ´ýÓ¦´ðÐźŵ½À´ ************************************************************************************/ u8 IIC_Wait_Ack(void) { u8 ucErrTime=0; SDA_IN(); //SDAÉèÖÃΪÊäÈë IIC_SDA=1;delay_us(1); IIC_SCL=1;delay_us(1); while(READ_SDA) { ucErrTime++; if(ucErrTime>250) { IIC_Stop(); return 1; } } IIC_SCL=0;//ʱÖÓÊä³ö0 return 0; } /*************************************************************************************
** º¯ÊýÃû³Æ£ºIIC_Ack ** ÊäÈë²ÎÊý£ºÎÞ ** Êä³ö²ÎÊý£ºÎÞ ** ¹¦ÄÜÃèÊö£º²úÉúACKÓ¦´ð ************************************************************************************/ void IIC_Ack(void) { IIC_SCL=0; SDA_OUT(); IIC_SDA=0; delay_us(2); IIC_SCL=1; delay_us(2); IIC_SCL=0; } /************************************************************************************* ** º¯ÊýÃû³Æ£ºIIC_NAck ** ÊäÈë²ÎÊý£ºÎÞ ** Êä³ö²ÎÊý£ºÎÞ ** ¹¦ÄÜÃèÊö£º²»²úÉúACKÓ¦´ð *************************************************************************************/ void IIC_NAck(void) { IIC_SCL=0; SDA_OUT(); IIC_SDA=1; delay_us(2); IIC_SCL=1; delay_us(2); IIC_SCL=0; } /************************************************************************************* ** º¯ÊýÃû³Æ£ºIIC_Send_Byte ** ÊäÈë²ÎÊý£ºtxd:·¢ËÍÊý¾Ý ** Êä³ö²ÎÊý£ºÎÞ ** ¹¦ÄÜÃèÊö£ºIIC·¢ËÍÒ»¸ö×Ö½Ú¡£ *************************************************************************************/
void IIC_Send_Byte(u8 txd) { u8 t; SDA_OUT(); IIC_SCL=0; //À​µÍʱÖÓ¿ªÊ¼Êý¾Ý´«Êä for(t=0;t<8;t++) { IIC_SDA=(txd&0x80)>>7; txd<<=1; delay_us(2); //¶ÔADS1110ÕâÈý¸öÑÓʱ¶¼ÊDZØÐëµÄ IIC_SCL=1; delay_us(2); IIC_SCL=0; delay_us(2); } } /************************************************************************************* ** º¯ÊýÃû³Æ£ºIIC_Read_Byte ** ÊäÈë²ÎÊý£ºack: = 1ʱ£¬·¢ËÍACK ** = 0ʱ£¬·¢ËÍnACK ** Êä³ö²ÎÊý£º·µ»Ø¶ÁÈ¡IICÖеÄÊý¾Ý¡£ ** ¹¦ÄÜÃèÊö£ºIIC¶Áȡһ¸ö×Ö½Ú¡£ ************************************************************************************/ u8 IIC_Read_Byte(unsigned char ack) { unsigned char i,receive=0; SDA_IN(); //SDAÉèÖÃΪÊäÈë for(i=0;i<8;i++ ) { IIC_SCL=0; delay_us(2); IIC_SCL=1; receive<<=1; if(READ_SDA)receive++; delay_us(1); } if (!ack)
IIC_NAck();//·¢ËÍnACK else IIC_Ack(); //·¢ËÍACK return receive; } /************************************************************************************* ** º¯ÊýÃû³Æ£ºADS_Init_Func ** ÊäÈë²ÎÊý£ºÎÞ ** Êä³ö²ÎÊý£ºÎÞ ** ¹¦ÄÜÃèÊö£ºÍ¨¹ýIIC³õʼ»¯ADSÉèÖüĴæÆ&pide;µÄÖµ *************************************************************************************/ void ADS_Init_Func(void) { IIC_Start(); IIC_Send_Byte(ADS_ADDE1); //·¢ËÍADS1110µØÖ· ED0 IIC_Wait_Ack(); IIC_Send_Byte(0x0c); //·¢ËÍ×Ö½Ú IIC_Wait_Ack(); IIC_Stop(); //²úÉúÒ»¸öÍ£Ö¹Ìõ¼þ delay_ms(10); } /************************************************************************************* ** º¯ÊýÃû³Æ£ºADS_Read_Func ** ÊäÈë²ÎÊý£ºÎÞ ** Êä³ö²ÎÊý£º·µ»Ø¶ÁÈ¡µÄADSÖÐÊý¾Ý ** ¹¦ÄÜÃèÊö£ºÍ¨¹ýIIC¶ÁÈ¡ADSÊý¾Ý¼Ä´æÆ&pide;µÄÖµ *************************************************************************************/ u16 ADS_Read_Func(void) { unsigned char SWH,SWL; unsigned intun16Date; SWH = 0; SWL = 0; un16Date = 0; IIC_Start(); IIC_Send_Byte(ADS_ADDE2); //·¢ËÍADS1110µØÖ· IIC_Wait_Ack();
SWH = IIC_Read_Byte(1); SWL = IIC_Read_Byte(1); un16Date= IIC_Read_Byte(0);//注意此处和上面读函数的参数。1连续读,0停止读 IIC_Stop(); //²úÉúÒ»¸öÍ£Ö¹Ìõ¼þ un16Date = (SWH<<8) + SWL; return (0xFFFF-un16Date); }
分享到:
收藏