AM2320温湿度传感器STC12程序_第1页
AM2320温湿度传感器STC12程序_第2页
AM2320温湿度传感器STC12程序_第3页
AM2320温湿度传感器STC12程序_第4页
AM2320温湿度传感器STC12程序_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

□includellSTC12C5A60S2.hH#include<stdio.h>//□include"INTRINS.H"////includeUBASE.HH〃自定义全局变量函数文件#defineucharunsignedchar#defineuintunsignedint#defineSlaveAddress 0xB8〃定义器件在IIC总线中的从地址,根据ALTADDRESS地址引脚不同修改//ALTADDRESS引脚接地时地址为0x46,接电源时地址为0xB8sbitSCL=P0A6;〃IIC时钟引脚定义sbitSDA=P0A7;//IIC数据引脚定义typedefunsignedcharBYTE;typedefunsignedshortWORD;〃接收数据缓存区〃全局温度〃接收数据缓存区〃全局温度〃全局湿度int dis_data_Tem;int dis_data_Hum;// voiddelay5us(void)//这个延时函数要大于2.5US以上(_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();)// voiddelaylOus(void)//这个延时函数要大于5US以上_nopJ);_nopJ);_nopj);

_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopJ);_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopj);_nopJ);_nopJ);_nopj);}*************************************起始信号*************************************〃拉高数据线〃拉高时钟线〃拉高数据线〃拉高时钟线〃产生下降沿〃拉低时钟线SDA=1;SCL=1;delaylOus();SDA=0;delaylOus();SCL=O;delaylOus();*************************************停止信号*************************************voidAM232X_Stop()(SDA=0; 〃拉低数据线delay5us();SCL=1; 〃拉高时钟线delaylOus();SDA=1; 〃产生上升沿delaylOus();

*************************************发送应答信号入II参数:ack(O:ACK1:NAK)*************************************voidAM232X_SendACK(bitack)〃写应答信号〃拉高时钟线〃写应答信号〃拉高时钟线〃拉低时钟线〃产生上升沿SCL=0;delaylOus();SCL=1;delaylOus();SCL=O;SDA=1;delaylOus();*************************************接收应答信号*************************************bitAM232X_RecvACK()(//SCL=O;SDA=1;delaylOus();〃拉高时钟线〃读应答信号〃拉高时钟线〃读应答信号〃拉低时钟线delay5us();CY=SDA;delay5us();SCL=O;delaylOus();returnCY;*************************************向IIC总线发送一个字节数据*************************************voidAM232X_SendFrist(BYTEdat)(BYTEi;for(i=0;i<8;i++)//8位计数器〃移出数据的最高位〃送数据「I〃拉高时钟线〃移出数据的最高位〃送数据「I〃拉高时钟线〃拉低时钟线〃送数据II〃拉高时钟线〃送数据IIdat«=1;SDA=CY;delay5us();SCL=1;delaylOus();SCL=0;delay5us();}SDA=1;delay5us();SCL=1;delaylOus();SCL=0;SDA=0;delay5us();}*************************************向IIC总线发送一个字节数据*************************************voidAM232X-SendByte(BYTEdat)(BYTEi;for(i=0;i<8;i++)//8位计数器(dat«=1;〃移出数据的最高位SDA=CY;〃送数据「1delay5us();SCL=1;〃拉高时钟线delaylOus();SCL=0;〃拉低时钟线delay5us();}AM232X_RecvACK();*************************************从IIC总线接收一个字节数据*************************************BYTEAM232X_RecvByte()BYTEi;BYTEdat=0;〃使能内部上拉,准备读取数据,//8位计数器〃使能内部上拉,准备读取数据,//8位计数器〃拉高时钟线〃读数据〃拉低时钟线for(i=0;i<8;i++)(dat«=1;SCL=1;delaylOus();dat|=SDA;SCL=0;delaylOus();}returndat;}〃*********************************voidWaken_AM232X(void)(AM232X_Start(); 〃起始信号AM232X_SendFrist(SlaveAddress); 〃发送设备地址+写信号//AM232X_Stop(); 〃发送停止信号〃*********************************voidWrite_AM232X(void)(AM232X_Start(); 〃起始信号AM232X_SendByte(SlaveAddress); 〃发送设备地址+写信号delaylOus();delaylOus();AM232X_SendByte(OxO3); 〃内部寄存器地址AM232X_SendByte(0x00); 〃内部寄存器地址AM232X_SendByte(0x04); 〃内部寄存器地址AM232X_Stop(); 〃发送停止信号〃*********************************************************//〃连续读出AM232X内部数据

//〃*********************************************************voidMultiple_read_AM232X(void)uchari;AM232X_Start();uchari;AM232X_Start();AM232X_SendByte(SlaveAddress|0x01);delaylOus();delaylOus();delaylOus();30us以上的值都可以for(i=0;i<8;i++)(BUF_TP[i]=AM232X_RecvByte();〃起始信号〃发送设备地址+读信号//延时时间必须大于30us只要大于〃连续读取2个地址数据,存储中BUF〃BUF_TP[O]存储0x32地址中的数据if(i==8){AM232X_SendACK(l);if(i==8){AM232X_SendACK(l);(else{AM232X_SendACK(0);}}AM232X_Stop();//Delay5ms();}〃最后一个数据需要回NOACK〃回应ACK〃停II:信号〃初始化AM232X.根据需要请参考pdf进行修改****voidWaken_Stop_AM232X(void)(AM232X_Stop();}///计算CRC校验码unsignedintCRC16(unsignedchar*ptounsignedcharlen)unsignedintcrc=Oxffff;unsignedchari;while(len-){crcA=*ptr++;for(i=0;i<8;i++)(if(crc&0x1)(crc»=l;crcA=0xa001;}else(crc»=l;}}}returncrc;}/〃检测CRC校验码是否正确unsignedcharCheckCRC(unsignedchar*ptr;unsignedcharlen)(unsignedintcrc;crc=(unsignedint)CRC16(ptrJen-2);if(ptr[len-l]==(crc»8)&&ptr[len-2]==(crc&OxOOff)){returnOxff;}else{return0x0;}}〃*********************************************************voidTEM_AM232X(void)//lms读取一次,全局函数(staticuintTEM_c;staticucharTEM_Err=0;if((++TEM_c)>2000)TEM_c=0;if(TEM_c==0)

Waken_AM232X();(elseif(TEM_c==1){Waken_Stop_AM232X();(Waken_AM232X();(elseif(TEM_c==1){Waken_Stop_AM232X();(elseif(TEM_c==5){Write_AM232X();(elseif(TEM_c==10){Multiple_read_AM232X();(elseif(TEM_c==11){if(CheckCRC(BUF_TP,8))//poweron〃发送停止信号〃写请求数据〃连续读出数据,存储在BUF中〃测试CRC16

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论