第一范文网 - 专业文章范例文档资料分享平台

MLX90614和STC12C5604AD的SMBus&PWM 通信

来源:用户分享 时间:2025/7/15 11:34:23 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

C语言代码

unsigned char arr[6]; //存储将要发送字节的缓冲器 SLA=(slave_addW<<1); arr[5]=0; arr[4]=SLA; arr[3]=cmdW; arr[2]=DataL; arr[1]=DataH; arr[0]=0;

Pecreg=PEC_cal(arr,6);

begin:

start_bit(); //发送起始位 TX_byte(SLA); //发送受控地址,写命令 if(slave_ack()==0) {

stop_bit(); goto begin; }

TX_byte(cmdW); //发送命令 if(slave_ack()==0) {

stop_bit(); goto begin; }

TX_byte(DataL); //发送数据低位字节 if(slave_ack()==0) {

stop_bit(); goto begin; }

TX_byte(DataH); //发送数据高位字节 if(slave_ack()==0) {

stop_bit(); goto begin; }

TX_byte(Pecreg); //发送PEC码 if(slave_ack()==0) {

stop_bit(); goto begin; }

stop_bit(); //发送终止位 Delay(200); //等候5ms }

//----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------//

MLX90614和单片机STC12C5604AD的SMBus,PWM通信

子文件Delay.c

//----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------// 延迟函数

//----------------------------------------------------------------------------------------------------------------------------------------//

9 / 23

C语言代码

#include #include \#include \

//----------------------------------------------------------------------------------------------------------------------------------------// 函数名: Delay

功能: 延迟一定的时间

参数: N表示延迟时间为MCU机器周期的N倍

注解: 机器周期是时钟周期(1/Fosc)的12倍,对于STC12C5604AD, Fosc=11.0592MHz //----------------------------------------------------------------------------------------------------------------------------------------// void Delay(unsigned int N) {

unsigned int i; for(i=0;i

//----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------// MLX90614和单片机STC12C5604AD的SMBus,PWM通信

子文件dec2hex.c //----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------// 十进制转换为十六进制 //----------------------------------------------------------------------------------------------------------------------------------------// #include \头文件中引用自身 #include \//----------------------------------------------------------------------------------------------------------------------------------------// 函数名: dec2hex 功能: 将十进制代码转换为十六进制代码 参数: float e (发射率数值) 返回值: unsigned int c c是数组c[4]的首地址 //----------------------------------------------------------------------------------------------------------------------------------------// unsigned int *dec2hex(float e) {

long int a=(e*65535)+0.5; int j,m=0,i=0;

unsigned int b[16]; unsigned int c[4],t; b[15]=0x0f; b[14]=0x0e; b[13]=0x0d; b[12]=0x0c; b[11]=0x0b; b[10]=0x0a; b[9]=0x09; b[8]=0x08; b[7]=0x07; b[6]=0x06; b[5]=0x05; b[4]=0x04; b[3]=0x03; b[2]=0x02; b[1]=0x01;

10 / 23

C语言代码

b[0]=0; while(a!=0) {

j=a; //求模运算 c[i++]=b[j]; a=a/16; //求余运算 m++; }

for(i=0;i

//----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------// MLX90614和单片机STC12C5604AD的SMBus,PWM通信

子文件CalTem.c //----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------// 根据十六进制数值计算温度 //----------------------------------------------------------------------------------------------------------------------------------------// #include \头文件中引用自身 //----------------------------------------------------------------------------------------------------------------------------------------// 函数名: CALTEMP 功能: 计算温度 参数: unsigned long int TEMP (由MLX90614中读到的数据) 返回值: unsigned int mah mah是数组mah[5]的首地址 注解: 将十六进制代码转换为温度数据的公式为T=(Data)*0.02-273.15 //----------------------------------------------------------------------------------------------------------------------------------------// unsigned int *CALTEMP(unsigned long int TEMP) {

unsigned long int T; unsigned int a,b;

unsigned int A4,A5,A6,A7,A8; unsigned int mah[5]; T=TEMP*2; if(T>=27315) {

T=T-27315; a=T/100; b=T-a*100; if(a>=100) {

A4=a/100; a=a0; A5=a/10; a=a; A6=a; }

else if(a>=10)

11 / 23

C语言代码

{

A4=0; A5=a/10; a=a; A6=a; } else {

A4=0; A5=0; A6=a; } if(b>=10) { A7=b/10; b=b; A8=b; } else { A7=0; A8=b; } } else {

T=27315-T; a=T/100; b=T-a*100; A4=9; if(a>=10) { A5=a/10; a=a; A6=a; } else {

A5=0; A6=a; }

if(b>=10) {

A7=b/10; b=b; A8=b; } else {

A7=0; A8=b; } }

mah[4]=A4; mah[3]=A5; mah[2]=A6;

MLX90614和单片机STC12C5604AD的SMBus,PWM通信

12 / 23

搜索更多关于: MLX90614和STC12C5604AD的SMBus&PW 的文档
MLX90614和STC12C5604AD的SMBus&PWM 通信.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c5eedo1m54t1j03v4hzhm_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top