已阅读5页,还剩3页未读,            继续免费阅读
        
        
                版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
            #include STC12C5A60S2.h#include /#include INTRINS.H / #include BASE.H /自定义全局变量函数文件#define uchar unsigned char#define uint unsigned int#define SlaveAddress 0xB8 /定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改 /ALT ADDRESS引脚接地时地址为0x46,接电源时地址为0xB8sbit SCL=P06; /IIC时钟引脚定义sbit SDA=P07; /IIC数据引脚定义typedef unsigned char BYTE;typedef unsigned short WORD;BYTE BUF_TP8; /接收数据缓存区 int dis_data_Tem; /全局温度int dis_data_Hum; /全局湿度/-void delay5us(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_();/-void delay10us(void) /这个延时函数 要大于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_();_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();/*起始信号*/void AM232X_Start() SDA = 1; /拉高数据线 SCL = 1; /拉高时钟线 delay10us(); SDA = 0; /产生下降沿 delay10us(); SCL = 0; /拉低时钟线delay10us();/*停止信号*/void AM232X_Stop() SDA = 0; /拉低数据线delay5us(); SCL = 1; /拉高时钟线 delay10us(); SDA = 1; /产生上升沿 delay10us();/*发送应答信号入口参数:ack (0:ACK 1:NAK)*/void AM232X_SendACK(bit ack) SDA = ack; /写应答信号SCL = 0;delay10us(); SCL = 1; /拉高时钟线 delay10us(); SCL = 0; /拉低时钟线SDA = 1; /产生上升沿 delay10us();/*接收应答信号*/bit AM232X_RecvACK()/ SCL=0;SDA=1; delay10us(); SCL = 1; /拉高时钟线 delay5us(); CY = SDA; /读应答信号delay5us(); SCL = 0; /拉低时钟线 delay10us(); return CY;/*向IIC总线发送一个字节数据*/void AM232X_SendFrist(BYTE dat) BYTE i; for (i=0; i8; i+) /8位计数器 dat = 1; /移出数据的最高位 SDA = CY; /送数据口delay5us(); SCL = 1; /拉高时钟线 delay10us(); SCL = 0; /拉低时钟线 delay5us(); SDA = 1; /送数据口delay5us();SCL = 1; /拉高时钟线delay10us();SCL = 0;SDA = 0; /送数据口delay5us(); /*向IIC总线发送一个字节数据*/void AM232X_SendByte(BYTE dat) BYTE i; for (i=0; i8; i+) /8位计数器 dat = 1; /移出数据的最高位 SDA = CY; /送数据口delay5us(); SCL = 1; /拉高时钟线 delay10us(); SCL = 0; /拉低时钟线 delay5us(); AM232X_RecvACK();/*从IIC总线接收一个字节数据*/BYTE AM232X_RecvByte() BYTE i; BYTE dat = 0; SDA = 1; /使能内部上拉,准备读取数据, for (i=0; i8; i+) /8位计数器 dat = 1; SCL = 1; /拉高时钟线 delay10us(); dat |= SDA; /读数据 SCL = 0; /拉低时钟线 delay10us(); return dat;/*void Waken_AM232X(void) AM232X_Start(); /起始信号AM232X_SendFrist(SlaveAddress);/发送设备地址+写信号 / AM232X_Stop(); /发送停止信号/*void Write_AM232X(void) AM232X_Start(); /起始信号 AM232X_SendByte(SlaveAddress); /发送设备地址+写信号delay10us();delay10us(); AM232X_SendByte(0x03); /内部寄存器地址 AM232X_SendByte(0x00); /内部寄存器地址AM232X_SendByte(0x04); /内部寄存器地址 AM232X_Stop(); /发送停止信号/*/连续读出AM232X内部数据/*void Multiple_read_AM232X(void) uchar i; AM232X_Start();/起始信号 AM232X_SendByte(SlaveAddress | 0x01);/发送设备地址+读信号delay10us(); delay10us();delay10us();/ 延时时间必须大于30us 只要大于 30us 以上的值都可以for (i=0; i8; i+)/连续读取2个地址数据,存储中BUF BUF_TPi = AM232X_RecvByte(); /BUF_TP0存储0x32地址中的数据 if (i = 8) AM232X_SendACK(1);/最后一个数据需要回NOACK else AM232X_SendACK(0);/回应ACK AM232X_Stop();/停止信号 / Delay5ms();/初始化AM232X,根据需要请参考pdf进行修改*void Waken_Stop_AM232X(void) AM232X_Stop(); /计算CRC校验码unsigned int CRC16(unsigned char *ptr, unsigned char len) unsigned int crc=0xffff; unsigned char i; while(len-) crc =*ptr+; for(i=0;i=1; crc=0xa001; else crc=1; return crc;/检测CRC校验码是否正确unsigned char CheckCRC(unsigned char *ptr,unsigned char len)unsigned int crc;crc=(unsigned int)CRC16(ptr,len-2);if(ptrlen-1=(crc8) & ptrlen-2=(crc & 0x00ff) return 0xff;else return 0x0;/*void TEM_AM232X(void)/1ms读取一次,全局函数 static uint TEM_c;static uchar TEM_Err = 0;if(+TEM_c) 2000)TEM_c = 0;if(TEM_c = 0)Waken_AM232X();/ power onelse if(TEM_c = 1)Waken_Stop_AM232X();/发送停止信号else if(TEM_c = 5)Write_AM232X();/写请求数据else if(TEM_c = 10)Multiple_read_AM232X();/连续读出数据,存储在BUF中else if(TEM_c = 11)if(CheckCRC(BUF_TP,8)/测试CRC16是否正确dis_data_Tem = BUF_TP4*        
    温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
 - 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
 - 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
 - 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
 - 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
 - 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
 - 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
 
最新文档
- 2025年及未来5年中国背涂胶行业市场深度分析及投资规划建议报告
 - 城市地铁管线施工组织设计方案
 - 海上施工冬季施工方案
 - 餐厅品酒活动策划方案
 - 2025年及未来5年中国停车场行业投资分析及发展战略研究咨询报告
 - 人音小学音乐一年级上册颂祖国管弦乐教案
 - 唐代文学概述专题培训教案
 - 时差新人教版选择性必修教案
 - 高三数学大一轮复习简单的逻辑联结词全称量词存在量词理新人教A版教案(2025-2026学年)
 - 八年级地理上册中国的经济发展新人教版教案
 - 2024年银企预授信协议书模板
 - 证券从业资格考试《基础知识》历年真题和答案
 - 09J801民用建筑工程建筑施工图设计深度图样
 - 高考语文复习:《到梨花屯去》 《秦琼卖马》课件
 - 超星尔雅学习通《舌尖上的植物学(北京大学)》2024章节测试答案
 - 刑事侦查大队技术中队
 - 温和而坚定的教养:激发孩子的学习活力
 - 病理科科室质量与安全管理自核查记录表
 - 充电桩巡检维护保养记录表
 - 可赛成功(浙江)新材料科技有限公司年产高性能润滑改性材料5万吨建设项目环境影响报告
 - 化学品作业场所安全警示标志双氧水
 
            
评论
0/150
提交评论