MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx

上传人:b****1 文档编号:1053336 上传时间:2023-04-30 格式:DOCX 页数:36 大小:23.91KB
下载 相关 举报
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第1页
第1页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第2页
第2页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第3页
第3页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第4页
第4页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第5页
第5页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第6页
第6页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第7页
第7页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第8页
第8页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第9页
第9页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第10页
第10页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第11页
第11页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第12页
第12页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第13页
第13页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第14页
第14页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第15页
第15页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第16页
第16页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第17页
第17页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第18页
第18页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第19页
第19页 / 共36页
MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx

《MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx》由会员分享,可在线阅读,更多相关《MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx(36页珍藏版)》请在冰点文库上搜索。

MLX90615和STC12C5604AD的SMBusPWM通信Word下载.docx

实例给出了读取物体温度的程序,以及可根据十六进制数值计算温度数值并在数字LEDs上显示温度的程序,但是此为可选项,用户可根据自己的应用另行选择其他方式。

头文件

#include<

STC12C5410AD.H>

#include"

stdio.h"

intrins.h"

string.h"

SMBus_CM.h"

//引用SMBus_CM.h文件(包含起始状态,终止状态,发送,接收字节等)

SMBus_OP.h"

//引用SMBus_OP.h文件(包含由MLX90615中读取数据和写入数据)

digitalLED.h"

//引用digitalLED.h文件以在数字LEDs上显示温度读数

CalTem.h"

//引用CalTem.h文件来根据十六进制数值计算温度

dec2hex.h"

//引用dec2hex.h文件将十进制转换为十六进制

Delay.h"

//引用Delay.h文件

宏定义I/O端口和SMBus信号输入输出方向

#define_SDA_OUTPUTP1M0=0x10;

P1M1=0x10;

//设置SDA为开漏输出

#define_SDA_INPUTP1M0=0x10;

P1M1=0x00;

//设置SDA为高阻输入

#define_SCL_IOP1M0=0x08;

P1M1=0x08;

//设置SCL为开漏输出的I/O端口

sbitSDA=P1^4;

//指定SDA线给P14

sbitSCL=P1^3;

//指定SCL线给P13

主函数功能

作用:

读取物体温度

voidmain()

{

unsignedcharslaveaddress;

unsignedlongintDATA;

unsignedint*mahm;

_SCL_IO;

//引用宏定义-设置SCL为开漏式I/O口

_SDA_OUTPUT;

//引用宏定义-设置SDA为开漏式输出

SCL=0;

//

Delay(30000);

//SMBus请求时间,将PWM模式转换为SMBus模式(21ms–39ms)

SCL=1;

//

while

(1)

{

slaveaddress=MEM_READ(0x00,0x10);

//读取存于MLX90615EEPROM"

00h"

地址中的SMBus地址

DATA=MEM_READ(slaveaddress,0x27);

//基于上述地址由MLX90615的内存07h中读取物体温度

mahm=CALTEMP(DATA);

//基于所得的十六进制温度格式计算实际温度

show(mahm,5);

//在数字LEDs上显示计算所得温度

}

子文件SMBus_CM.c

该文档包含了SMBus通信的起始状态,终止状态,发送和接受字节等

//头文件中引用本身

宏定义I/O端口和SMBus信号的方向

//设置SCL为开漏式I/O端口

函数名:

start_bit

功能:

在SMBus总线上产生起始状态

注解:

参考“系统管理总线说明书-版本2.0”

voidstart_bit()

{

//设置SDA为输出

SDA=1;

//设置SDA线为高电平

_nop_();

_nop_();

//设置SCL线为高电平

Delay(5);

//在终止和起始状态之间产生总线空闲时间(Tbuf=4.7us最小值)

SDA=0;

//设置SDA线为低电平

//(重复)开始状态后的保持时间,在该时间后,产生第一个时钟信号

//Thd:

sta=4us最小值

//设置SCL线为低电平

}

stop_bit

在SMBus总线上产生终止状态

voidstop_bit()

//设置SDA为输出

//终止状态建立时间(Tsu:

sto=4.0us最小值)

//设置SDA线为高电平

send_bit

在SMBus总线上发送一位数据

voidsend_bit(unsignedcharbit_out)

//设置SDA为开漏输出以在总线上传送数据

if(bit_out==0)//核对字节的位

//如果bit_out=1,设置SDA线为高电平

SDA=0;

else

//如果bit_out=0,设置SDA线为低电平

//

//Tsu:

dat=250ns最小值

//

Delay(4);

//时钟脉冲高电平脉宽(10.6us)

//设置SCL线为低电平

//时钟脉冲低电平脉宽

receive_bit

功能:

在SMBus总线上接收一位数据

unsignedcharreceive_bit()

unsignedcharbit_in;

_SDA_INPUT;

//设置SDA为高阻输入

//设置SCL线为高电平

Delay

(2);

if(SDA==1)//从总线上读取一位,赋给bit_in

bit_in=1;

else

bit_in=0;

returnbit_in;

//返回bit_in值

slave_ack

由受控器件MLX90615中读取确认位

返回值:

unsignedcharack

1-ACK

0-NACK

unsignedcharslave_ack()

unsignedcharack;

ack=0;

if(SDA==1)//从总线上读取一位,赋给ack

else

ack=1;

returnack;

发送一个字节

TX_byte

在SMBus总线上发送一个字节

参数:

unsignedcharTX_buffer(将要在总线上发送的字节)

先发送字节的高位

voidTX_byte(unsignedcharTX_buffer)

unsignedcharBit_counter;

unsignedcharbit_out;

for(Bit_counter=8;

Bit_counter;

Bit_counter--)

if(TX_buffer&

0x80)

bit_out=1;

//如果TX_buffer的当前位是1,设置bit_out为1

bit_out=0;

//否则,设置bit_out为0

send_bit(bit_out);

//发送SMBus总线上的当前位

TX_buffer<

<

=1;

//核对下一位

}

接收一个字节

RX_byte

在SMBus总线上接收一个字节

unsignedcharack_nack(确认位)

0-主控器件发送ACK

1-主控器件发送NACK

unsignedcharRX_buffer(总线接收的字节)

先接收字节的高位

unsignedcharRX_byte(unsignedcharack_nack)

unsignedcharRX_buffer;

if(receive_bit()==1)//由SDA线读取一位

{

RX_buffer<

//如果位为“1”,赋“1”给RX_buffer

RX_buffer|=0x01;

}

else//如果位为“0”,赋“0”给RX_buffer

RX_buffer&

=0xfe;

}

}

send_bit(ack_nack);

//发送确认位

returnRX_buffer;

子文件SMBus_OP.c

//---

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2