温度是一个基本的物理量,自然界中的一切过程无不与温度密切相关。温度传感器是最早开发,应用最广的一类传感谢器,温度传感器使用范围广,数量多,居各种传感器之首。
由数字温度传感器LM83构成的温度检测系统电路如图
程序如下
*******************************************************************************
本程序用于通过SMBus总线接口对LM83温度传感器的工作模式设定,中断处理程序用于对温度超限的处理。
只开启远程温度D1+的监控,高温标志80摄氏度,严重越限温度为100摄氏度
51单片机P1.0和P1.1用于软件模拟Smbus总线时序
Smbus总线命令、数据读写程序,保持时钟线常态为低,数据线常态为高
*******************************************************************************
SDA BIT P1.0 数据输入输出口线
SCL BIT P1.1 时钟信号
RED BIT P2.6 高温标志发光管
GREEN BIT P2.2 严重越限标志发光管
MAIN:MOV SP,#70H 以下为初始化过程
MOV IE,#85H
MOV IP,#04H
SETB RED 高温、温度严重越限标志发光管熄灭
SETB GREEN
LCALL START 启动总线
MOV A,#30H
LCALL SENDCODE 发送ID
LCALL ACKC 检查应答位
MOV A,#09H 发送地址
LCALL SENDCODE
LCALL ACKC 检查应答位
MOV A,#1CH 发送控制字:D1+温度超标中断触发有效
LCALL SENDCODE
LCALL ACKC 检查应答位
LCALL STOP 停止总线
LCALL START
MOV A,#30H 发送ID
LCALL SENDCODE
LCALL ACKC
MOV A,#5AH 发送地址
LCALL SENDCODE
LCALL ACKC
MOV A,#64H 发送控制字:严重越限温度为100摄氏度
LCALL SENDCODE
LCALL ACKC
LCALL STOP 停止总线
LCALL START 启动总线
MOV A,#30H
LCALL SENDCODE
LCALL ACKC
MOV A,#50H
LCALL SENDCODE
LCALL ACKC
MOV A,#50H D1+高温标志为80摄氏度
LCALL SENDCODE
LCALL ACKC
LCALL STOP
//启动Smbus总线
START:SETB SDA 时钟,数据均置高
SETB SCL
LOOP0: NOP
CLR SDA ;数据低跳变,实现启动
CLR SCL ;时钟低跳变
RET
//停止Smbus总线数据传送
STOP: CLR SDA ;时钟置高,数据拉低
SETB SCL
SETB SDA ;数据低跳变,实现停止
RET
//发送应答位
SACK: CLR SDA ;时钟低电平期间拉低数据位
SETB SCL ;过一个时钟
CLR SCL
SETB SDA ;数据位拉高
RET
//发送非应答位;;;;;
NACK: SETB SDA ;时钟低电平期间拉高数据位
SETB SCL ;过一个时钟
CLR SCL
RET
//检查应答位,应答正常,标志置0 ;;;;;
ACKC: SETB SDA
SETB SCL
JNB SDA,$
SETB FLAG
CLR SCL
NOP
RET
//发送一个字节;;;;;
SENCODE:MOV R7,#07H
RLC A
JC NEXT1
SJMP NEXT0
NEXT1:SETB SDA
NEXT0:SETB SCL
LOOP2:JNB SCL,LOOP2
NOP
CLR SCL
CLR SDA
WLP:RLC A
JC WR1
LJMP WR0
WLP1:DJNZ R7,WLP
RET
WR1:SETB SDA
SETB SCL
NOP
NOP
CLR SCL
CLR SDA
AJMP WLP1
WR0:CLR SDA
SETB SCL
NOP
NOP
CLR SCL
CLR SDA
AJMP WLP1
//接收一个字节
RDATA:MOV R7,#08H
RLP:SETB SDA
SETB SCL
JNB SDA,RD0
NOP
LJMP RD1
RLP1:DJNZ R0,RLP
RET
RD0:CLR C
MOV A,R2
RLC A
MOV R2,A
CLR SCL
LJMP RLP1
RD1:SETB C
MOV A,R2
RLC A
MOV R2,A
CLR SCL
LJMP RLP1
//两个中断处理程序用于对温度超限的处理,高温标志为80摄氏度,严重越限温度为100摄氏度,外部中断0合用于对超过80度高温的处理,外部中断1用于对超过100度高温的处理
INT0: CLR EX0
LCALL HIGHPRO
SETB EX0
RETI
INT1: CLR EX1
LCALL VERYPRO
SETB EX1
RETI
HIGHPRO:…… ;超80度高温处理子程序
CLR GREEN
SETB RED 绿灯亮,红灯灭
……
RET
VERYPRO:…… ;严重越限处理子程序
SETB GREEN
CLR RED 绿灯灭,红灯亮
……
RET |