4003|6

4

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

室温的采集与控制方案 [复制链接]

在“室温的采集与控制方案1”中,由于单片机AT89LP2052/4052只有20个引脚,为了对比采集的室温与预置室温的效果,硬件单片机改为STC89C52(STC方便下载程序),仿真效果图如下proteus中的原理图及仿真效果

源代码如下:

******************************************************

;室温的采集与控制系统,此系统主要分为初始化模块MAIN1,采集温度模块GET_TEMPER,温度转换模块CONVERT
;显示模块DISP1。具体的实现过程为先从GET_TEMPER模块获得室温存储在TEMPL和TEMPH中
;转换模块对他们进行转换之后将小数位,个位,十位,百位分别存储在70H,71H,72H,73H.
;预置的温度存放在地址74H,75H,76H,77H中
;显示模块disp1将小数,个,十,百位送入数码管显示
TMPL  EQU 29H;采集温度的低八位
TMPH  EQU 28H;采集温度的高八位
FLAG1  EQU 38H;DS18B20复位标志,1表示复位成功
DATAIN  BIT P3.7 ;DS18B20数据口DQ

  ORG 00H
  LJMP MAIN1
  ORG 03H
  LJMP ZINT0
  ORG 13H
  LJMP ZINT1
  ORG 30H
MAIN1: SETB IT0
   SETB EA
  SETB EX0
  SETB IT1
  SETB EX1
  SETB P3.6
  SETB P3.2
  SETB P3.3
  MOV 74H,#3
  MOV 75H,#3
  MOV 76H,#4
  MOV 77H,#0
MAIN:  LCALL GET_TEMPER
  LCALL CVTTMP
        LCALL DISP1
  AJMP MAIN
;与DS18B20通信的模块。
;与DS18B20通信的过程为:每次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令
;最后发送RAM指令进行读写RAM。复位要求主CPU将数据线下拉500us,DS18B20受到信号后等待
;60us左右,发出60——240us的低脉冲,主CPU收到此信息代表复位成功
INIT_1820: SETB DATAIN
  NOP
  CLR DATAIN
  MOV R1,#3
TSR1:  MOV R0,#107
  DJNZ R0,$
  DJNZ R1,TSR1
  SETB DATAIN
  NOP
  NOP
  NOP
  MOV R0,#25H
TSR2:  JNB DATAIN,TSR3
  DJNZ R0,TSR2
  CLR FLAG1
  SJMP TSR7
TSR3:  SETB FLAG1 ;复位成功
  CLR P1.7   ;???
  MOV R0,#117   ;等待60-240的低脉冲
TSR6:  DJNZ R0,$
TSR7:  SETB DATAIN
  RET
  
GET_TEMPER: SETB DATAIN
  LCALL INIT_1820
  JB FLAG1,TSS2
  NOP
  RET

TSS2:  MOV A,#0CCH
  LCALL WRITE_1820
  MOV A,#44H
  LCALL WRITE_1820
  ACALL DISP1
  LCALL INIT_1820 ;每次通信前都需要初始化???
  MOV A,#0CCH
  LCALL WRITE_1820
  MOV A,#0BEH
  LCALL WRITE_1820
  LCALL READ_1820
  RET
;R2R3只是做循环计数器,累加器A是传递进来的送到DATAIN的数据
WRITE_1820: MOV R2,#8
  CLR C
WR1:  CLR DATAIN
  MOV R3,#6
  DJNZ R3,$
  RRC A
  MOV DATAIN,C
  MOV R3,#23
  DJNZ R3,$
  SETB DATAIN
  NOP
  DJNZ R2,WR1
  SETB DATAIN
  RET
;读取的数据存放在28H29H中,R4=2是采集两次数据,R2=8是每次采集8位,R3做延时参数
READ_1820: MOV R4,#2
  MOV R1,#29H
RE00:  MOV R2,#8
RE01:  CLR C
  SETB DATAIN
  NOP
  NOP
  CLR DATAIN
  NOP
  NOP
  NOP
  SETB DATAIN
  MOV R3,#9
RE10:  DJNZ R3,RE10
  MOV C,DATAIN
  MOV R3,#23
RE20:  DJNZ R3,RE20
  RRC A
  DJNZ R2,RE01
  MOV @R1,A
  DEC R1
  DJNZ R4,RE00
  RET
;温度转换模块,由于DS18B20采集的数据只是一一对应的关系,而且要将小数位,个位,十位,百位分开存储
;以便送入显示。具体的转换算法为;DS18B20采取12位转换模式,精度为0.0625即1/16,所以低四位转换后为小数位
;高四位为符号位,中间八位即为整数位,整数位/100即为百位,剩下的余数/10即为十位,最后的余数即为个位
CVTTMP:  MOV A,TMPH
  ANL A,#80H    ;查看符号位
  JZ TMPC1
  CLR C
  MOV A,TMPL
  CPL A
  ADD A,#1
  MOV TMPL,A
  MOV A,TMPH
  CPL A
  ADDC A,#0
  MOV TMPH,A
  MOV 73H,#0BH
  SJMP TMPC11
TMPC1:  MOV 73H,#0AH
TMPC11:  MOV A,TMPL
  ANL A,#0FH
  MOV DPTR,#TMPTAB
  MOVC A,@A+DPTR
  MOV 70H,A

  MOV A,TMPL
  ANL A,#0F0H
  SWAP A
  MOV TMPL,A
  MOV A,TMPH
  ANL A,#0FH
  SWAP A
  ORL A,TMPL
H2BCD:  MOV B,#100
  DIV AB
  JZ B2BCD1
  MOV 73H,A
B2BCD1:  MOV A,#10
  XCH A,B
  DIV AB
  MOV 72H,A
  MOV 71H,B
TMPC12:  NOP
DISBCD:  MOV A,73H
  ANL A,#0FH
  CJNE A,#1,DISBCD0
  SJMP DISBCD1
DISBCD0: MOV A,72H
  ANL A,#0FH
  JNZ DISBCD1
  MOV A,73H
  MOV 72H,A
  ;MOV 72H,#0AH
  MOV 73H,#0AH
DISBCD1: RET
TMPTAB:  DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
;显示模块,显示70H71H72H73H中的实际温度及74H75H76H77H中的预置温度
DISP1:  MOV R1,#70H
  MOV R0,#74H
  MOV R5,#0FEH
 ; MOV P0,#00H
PLAY:  
  MOV P2,#00H
   
  MOV A,R5
  MOV P0,A
  MOV A,@R1
  MOV DPTR,#TAB
  MOVC A,@A+DPTR
  MOV P2,A
  ;LCALL DL1MS
  MOV A,@R0
  MOVC A,@A+DPTR
  MOV P1,A
  MOV A,R5
  JB ACC.1,LOOP1
  SETB P2.7 ;设置实际温度显示的小数点
  ;SETB P1.7 ;设置预置温度显示的小数点
LOOP1:  LCALL DL1MS
  INC R1
  INC R0
  MOV A,R5
  JNB ACC.3,ENDOUT  ;百位显示之后结束显示
  RL A
  MOV R5,A
  MOV A,73H
  CJNE A,#1,DD2
  SJMP LEDH
;完成实际温度与预制温度的比较,主要是为了控制加热的发光二极管及蜂鸣器
DD2:  MOV A,72H
  CJNE A,#0AH,DD3
  MOV 72H,#0
DD3:  MOV A,76H
  CJNE A,72H,DDH
  SJMP DDL
DDH:  JNC PLAY1
  SJMP LEDH
DDL:  MOV A,75H
  CJNE A,71H,DDL1
  SJMP LEDH
DDL1:  JNC PLAY1
LEDH:  CLR P3.6
  CLR P3.4
  SJMP PLAY
PLAY1:  SETB P3.6
  SETB P3.4
  SJMP PLAY

ENDOUT:  MOV P0,#0FFH
  MOV P2,#00H
  RET

TAB:  DB 3FH,06H,5BH,4FH,66H     
  DB 6DH,7DH,07H,7FH,6FH,00H,40H
;延时子程序 
DL1MS:  MOV R6,#50
DL1:  MOV R7,#100
  DJNZ R7,$
  DJNZ R6,DL1
  RET
;外部中断,预置温度的设置时通过中断实现的,每按一次键,相应的位数做模为9的加法,实现对温度的设置
ZINT0:  PUSH ACC
  INC 75H
  MOV A,75H
  CJNE A,#10,ZINT01
  MOV 75H,#0
ZINT01:  POP ACC
  RETI

ZINT1:  PUSH ACC
  INC 76H
  MOV A,76H
  CJNE A,#10,ZINT11
  MOV 76H,#0
ZINT11:  POP ACC
  RETI

ZZZ1:  MOV DPTR,#TAB
  MOVC A,@A+DPTR
  MOV P1,A
  RETI
  END

此帖出自51单片机论坛

最新回复

顶一下,不错不错....  详情 回复 发表于 2011-7-26 21:07
点赞 关注
 

回复
举报

3836

帖子

19

TA的资源

纯净的硅(中级)

沙发
 
谢谢分享
此帖出自51单片机论坛
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

板凳
 

我也做过一个这个东西,是帮别人做的毕设,用C写的程序,拿出来分享一下!

这个是我的仿真效果图

温度控制系统.rar

95.55 KB, 下载次数: 35

此帖出自51单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 板凳 jishuaihu 的帖子

呵呵,我本来打算再用c实现一遍的,巧的是这也是我帮别人做的毕业设计
此帖出自51单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 沙发 fish001 的帖子

不客气,多学习交流,呵呵
此帖出自51单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

6
 
好东西
此帖出自51单片机论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

7
 
顶一下,不错不错....
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表