




已阅读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年高校教师资格证之高等教育心理学考试题库附答案
- 2025年高级钳工考试试题及答案
- 2025年高级经济师工商管理真题解析
- 食安培训试题及答案
- 中央会议规范管理办法
- 贷款变更还本管理办法
- 中央集中采购管理办法
- 业务发展管理办法试行
- 专项工作考核管理办法
- 视频监控应用管理办法
- 07J902-3 医疗建筑(卫生间、淋浴间、洗池)
- 2024年网上大学智能云服务交付工程师认证考试题库800题(含答案)
- SJG 110-2022 附建式变电站设计防火标准
- 《中式烹调工艺》课件-热菜烹调工艺
- 中华民族共同体概论课件专家版2第二讲 树立正确的中华民族历史观
- 仓库发错货的解决方案
- 金属冶炼安全事故案例与分析
- 南京市2023-2024高一上学期期末英语试卷及答案
- 输液泵、微量泵技术操作规程及评分标准
- 数字孪生及车间实践第三篇数字孪生车间
- 时间像小马车课件
评论
0/150
提交评论