|
本帖最后由 51黑黑黑 于 2016-3-3 00:55 编辑
(一)LM75A概述
LM75A 是一个高速I2C接口的温度传感器,可以在-55℃~+125℃的温度范围内将温度直接转换为数字信号,并可实现0.125℃的精度。MCU可以通过I2C总线直接读取其内部寄存器中的数据,并可通过I2C对4 个数据寄存器进行操作,以设置成不同的工作模式。LM75A有3 个可选的逻辑地址管脚,使得同一总线上可同时连接8 个器件而不发生地址冲突。LM75A 可配置成不同的工作模式。它可设置成在正常工作模式下周期性地对环境温度进行监控,或进入关断模式来将器件功耗降至最低。OS输出有2 种可选的工作模式:OS比较器模式和OS 中断模式,OS 输出可选择高电平或低电平有效。正常工作模式下,当器件上电时,OS工作在比较器模式,温度阈值为80℃,滞后阈值为75℃。低功耗设计,工作电流典型值为250uA,掉电模式为3.5uA;宽工作电压范围:2.8V~5.5V。 (二) LM75A管脚 (三)LM75A内部寄存器 1、温度寄存器Temp(地址0x00) 温度寄存器是一个只读寄存器,包含2个8位的数据字节,由一个高数据字节(MS)和一个低数据字节(LS)组成。这两个字节中只有11位用来存放分辨率为0.125℃的Temp数据(以二进制补码数据的形式),如下表所示。对于8位的I2C总线来说,只要从LM75A的“00地址”连续读两个字节即可(温度的高8位在前)。 下表给出了一些Temp数据和温度值的例子。
2、配置寄存器(地址0x01)
配置寄存器为8 位可读写寄存器,其位功能分配如下表所示。 B7-B5:保留,默认为0。 B4-B3:用来编程OS故障队列。 00到11代表的值为1、2、4、6,默认值为0。 B2:用来选择OS极性。 B2=0,OS低电平有效(默认); B2=1,OS高电平有效。 B1:选择OS工作模式。 B1=0,配置成比较器模式,直接控制外围电路; B1=1,OS控制输出功能配置成中断模式,以通知MCU进行相应处理。 B0:选择器件工作模式。 B0=0,LM75A处于正常工作模式(默认); B0=1,LM75A进入关断模式。 3、滞后寄存器Thyst(0x02) 滞后寄存器是读/写寄存器,也称为设定点寄存器,提供了温度控制范围的下限温度。每次转换结束后,Temp数据(取其高9 位)将会与存放在该寄存器中的数据相比较,当环境温度低于此温度的时候,LM75A将根据当前模式(比较、中断)控制OS 引脚作出相应反应。该寄存器都包含2 个8 位的数据字节,但2 个字节中,只有9 位用来存储设定点数据(分辨率为0.5℃的二进制补码),其数据格式如下表所示,默认为75℃。 4、超过温关断阈值寄存器Tos(0x03) 超温关断寄存器提供了温度控制范围的上限温度。每次转换结束后,Temp数据(取其高9位)将会与存放在该寄存器中的数据相比较,当环境温度高于此温度的时候,LM75A将根据当前模式(比较、中断)控制OS引脚作出相应反应。其数据格式如表 4 所示,默认为80℃。 (四)OS输出 OS输出为开漏输出口。为了观察到这个输出的状态,需要接一个外部上拉电阻,其阻值应当足够大(高达200kΩ),以减少温度读取误差。OS输出可通过编程配置寄存器的B2位设置为高或低有效。如下图所示,为LM75A在不同模式下OS 引脚对温度作出的响应。OS 设为低有效。 可以看出,当LM75A工作在比较器模式时,当温度高于Tos时,OS输出低电平。此时采取了降温措施,启动降温设备(如风扇),直到温度再降到Thyst,则停止降温,因此在这种模式下,LM75A可以直接控制外部电路来保持环境温度;而在中断模式,则在温度高于Tos或低于Thyst 时产生中断。注意:在中断模式下,只有当MCU 对LM75A 进行读操作后,其中断信号才会消失(图中OS 变为高电平)。 (五)I2C串行接口 在主控器的控制下,LM75A可以通过SCL和SDA作为从器件连接到I2C总线上。主控器必须提供SCL时钟信号,可以通过SDA读出器件数据或将数据写入到器件中。注意:必须在SCL和SDA端分别连接一个外部上拉电阻,阻值大约为10kΩ。LM75A从地址(7位地址)的低3位可由地址引脚A2、A1和A0的逻辑电平来决定。地址的高4位预先设置为‘1001’。下表给出了器件的完整地址,从表中可以看出,同一总线上可连接8个器件而不会产生地址冲突。由于输入管脚SCL、SDA、A2-A0内部无偏置,因此在任何应用中它们都不能悬空(这一点很重要)。 (六)温度测量电路 (七)51单片机源码 ORG0000 ; AJMP L0
ORG 000BH
ORG 0013H; 外部中断P3.3 脚INT0 入口地址
ORG 001BH
MOV P1,#0AAH
RETI
ORG 0025h
T_SCL EQUP3.5;
T_SDA EQUP3.4;
L0: MOV TMOD, #11H
MOV 8CH, #3CH
MOV 8AH,#0B0H
CLREA ; CPU 总中断请求
QL: MOV A,#00H
MOVR2,#66D ; 清数据区;;
MOV R0,#18H
QRAM: MOV @R0, A
INC R0
DJNZ R2, QRAM
MOV R2,#00H
ACALL TMP
AJMP QL
TMP: PUSH PSW
LCALLSTA
MOV A,#90H ;写命令
CALL I2C_SEND
MOV A,#00h ; 温度寄存器地址00
CALL I2C_SEND
CALL STOP
;温度寄存器是一个只读寄存器,包含2个8位的数据字节,由一个高数据字节(MS)和一个低数据字节(LS)组成。这两个字节中只有11位用来存放分辨率为0.125℃的Temp数据
;(以二进制补码数据的形式),如表1所示。对于8位的I2C总线来说,只要从LM75A的“00;地址”连续读两个字节即可(温度的高8位在前)
LCALLSTA
MOV A,#91H ;读命令
CALL I2C_SEND
LCALLRDBYT
MOV2FH,A
LCALLMACK
LCALLRDBYT
MOV30H,A
LCALLMNACK
LCALLSTOP
MOVA,2FH
JNBACC.7,ZH1 ;最高位是0为零是正温度转ZH1
SETB 20H.7 ;保存正负温度标志 ;最高位是1为零下温度取反加1
MOV A,2FH ;例如温度是-54.875度,源码=1100 1001001XXXXX 例如温度72.75,30h=48h,31h=40h,加在一起是01001000(=30H)010xxxxx=(31H)
CPL A ;00110110=(30H)
MOV 2FH,A ;高位取反
MOV A,30H ;低位取反110XXXXX
CPL A ;110XXXXXX=(31H)
MOV30H,A
MOV A,#01H ;10110111=B7
ADDA,30H
MOV30H,A
CLR A
ADDC A,2FH ;例如温度是-54.875度=-439*.125,补码649h,-649h=1 110 0100 1001
MOV 2FH,A ;结果是32h=01,33h=b7,合并成1b7h取反=00110110110,加1=00110110111为正码1b7h=439,39*.125=54.875
ZH1: MOV R2,#5
ZH2: MOV A,2FH
CLR C
RRC A ;低位进C 01001000的0进C
MOV2FH,A
MOVA,30H
RRC A ;C进高位 0010xxxx
MOV30H,A
DJNZR2,ZH2
MOVR1,#2FH ; 送显示
MOV R4,#2
LCALL XS
POPPSW
RET
STA: SETB SDA ;启动
SETBSCL
CALLWAIT;NOP
NOP
CLRSDA
CALLWAIT;NOP
NOP
CLRSCL
RET
STOP: CLR SDA ;停止
SETBSCL
CALLWAIT;NOP
NOP
SETBSDA
CALLWAIT;NOP
NOP
CLRSCL
RET
MACK: CLR SDA ;发送应答位
SETBSCL
CALLWAIT;NOP
NOP
CLRSCL
SETBSDA
RET
MNACK: SETB SDA ;发送非应答信号
SETBSCL
CALLWAIT
NOP
CLRSCL
CLRSDA
RET
RDBYT: MOV R0,#08H ;接收一个字节数据子程序,占用:R0,R2,C
RLP: SETBSDA
RLP8: SETB SCL
NOP ;大于4微秒
CALL WAIT
MOV C,SDA
RLC A
CLR SCL
CALL WAIT
DJNZ R0,RLP8
RLP1: RET
WAIT:
MOV R6,#5
again:
DJNZ R6,again
RET
I2C_SEND:
MOV R1,#8 ;
next_out:
CLR SCL ;
SETB SDA ;
RLC A ;
JC wr_one ;
CLR SDA ;
wr_one:
LCALL WAIT ;
SETB SCL ;
LCALL WAIT ;
DJNZ R1, next_out ;
CLR SCL ;
CALL WAIT ;
SETB SDA ;
LCALL I2C_ACK
RET
I2C_ACK: ;应答
SETB SCL
ACALLWAIT
NACK:
JNB SDA, YACK ;
JMP NACK
YACK:
ACALLWAIT
CLR SCL
RET
XS: MOV R3, #9
XS1: MOV R5,#0FFH
DIS MOV DPTR, #0FC0H
MOV A, @R1
ANL A, #0F0H
SWAP A
MOVCA, @A+DPTR
MOV P0,A
SETB P2.1
ACALL YS1
CLR p2.1
MOV A, @R1
ANL A, #0FH
MOVCA, @A+DPTR
MOV P0,A
SETB P2.0
ACALL YS1
CLR p2.0
J6: DJNZ R5,DIS
DJNZR3,DIS
INCR1
CLR P2.0
CLR P2.1
ACALLDELAY2
DJNZR4,XS
RET
YS1: MOV 7FH, #0FFH
YS22: DJNZ 7FH, YS22
RET
DELAY: MOV R5,#88H
DEL: NOP
DJNZ R5,DEL
RET
DELAY2: MOV R6, #0FFH
DE: ACALL DELAY
DJNZ R6,DE
RET
ORG 0FC0H
DB 3FH
DB 03H
DB 6DH
DB 67H
DB 53H
DB 76H,7EH,23H
DB 7FH,77H,73H,5EH,3CH
DB 4FH,0FCH,78H
END
|
|