打印

四通道数字温度传感谢器LM83

[复制链接]
2107|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
温度是一个基本的物理量,自然界中的一切过程无不与温度密切相关。温度传感器是最早开发,应用最广的一类传感谢器,温度传感器使用范围广,数量多,居各种传感器之首。
由数字温度传感器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

相关帖子

沙发
huangfeng33| | 2012-4-25 22:09 | 只看该作者
很好的资料哦,利用内置和外连的温度传感器,十分方便地对远程和本地温度进行监测。

使用特权

评论回复
板凳
shenmulzb1985| | 2012-4-25 22:16 | 只看该作者
楼主太卖力了啊,顶一个啊,直接汇编还是很强悍的啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4195

帖子

31

粉丝