基于低功耗单片机温度计设计(电路图+原理图+流程图) 第11页

基于低功耗单片机温度计设计(电路图+原理图+流程图) 第11页
;程序名称:INIT_TEMP
;功能:初始化DS18B20,确定DS18B20是否是存在的
;入口参数:无
;出口参数:FLAG
INIT_TEMP:
            SETB  P_DS18B20
            NOP
            CLR  P_DS18B20  ;主机发出延时537微秒的复位低脉冲
            MOV  R0,#6BH
            MOV  R1,#04H
TSR1:       DJNZ  R0,$
            MOV  40,#6BH
            DJNZ  R1,TSR1
            SETB P_DS18B20 ;然后拉高数据线,释放总线进入接受状态
            NOP
            NOP
            NOP
            MOV  R0,#32H
TSR2:       JNB  P_DS18B20,TSR3  ;等待DS18B20回应
            DJNZ  R0,TSR2
            LJMP  TSR4  ;延时
TSR3:      SETB FLAG  ;置标志位,表示DS1820存在
           LJMP TSR5
TSR4:      CLR FLAG ;清标志位,表示DS1820不存在
           LJMP TSR7
TSR5:      MOV R0,#06BH
TSR6:      DJNZ R0,TSR6 ;时序要求延时一段时间
TSR7:      SETB P_DS18B20
           RET

;程序名称:READ_TEMP
;功能:读取DS18B20的数据
;入口参数:TEMPERATURE_L,TEMPERATURE_H
;出口参数:无
READ_TEMP:
             SETB  P_DS18B20
             LCALL  INIT_TEMP ;先复位DS18B20
             JB  FLAG,TSS2
             RET  ;判断DS1820是否存在?若DS18B20不存在则返回
TSS2:        MOV  A,#0CCH ;跳过ROM匹配
             LCALL  WRITE_18B20
             MOV  A,#44H  ;发出温度转换命令
             LCALL  WRITE_18B20
             LCALL  DISPLAY  ;等待AD转换结束,12位的话750微秒
             LCALL  INIT_TEMP  ;准备读温度前先复位
             MOV  A,#0CCH ;跳过ROM匹配
             LCALL  WRITE_18B20
             MOV  A,#0BEH  ;发出读温度命令
             LCALL  WRITE_18B20
             LCALL READ_18B20  ;将读出的温度数据保存到35H/36H
             RET
程序名称:WRITE_18B20
;功能:将A保存的数值写入DS1820中,
;入口参数:A 寄存器
;出口参数:无
WRITE_18B20:
MOV  R2,#8  ;一共8位数据,串行通信
CLR  C
WR1:         CLR  P_DS18B20
MOV  R3,#07
DJNZ  R3,$
RRC  A  ;循环右移
MOV  P_DS18B20,C
MOV  R3,#3CH
DJNZ  R3,$ ;23*2 = 46微妙
SETB  P_DS18B20
NOP
DJNZ  R2,WR1 ;A里面一共是8位,所以要送8次
SETB  P_DS18B20 ;释放总线
RET
;程序名称:READ_18B20
;功能:读取18B20中的数据,由于是串行通信,每次读取一个,循环8次读取
;入口参数:TEMPRATURE_L
;出口参数:无
READ_18B20:
MOV  R4,#4  ;将温度高位和低位从DS18B20中读出
MOV  R1,#TEMPERATURE_L
RE00:         MOV  R2,#8  ;数据一共有8位
RE01:         CLR C
SETB  P_DS18B20
NOP
NOP
CLR  P_DS18B20
NOP
NOP
NOP
SETB  P_DS18B20
MOV  R3,#09
RE10:         DJNZ  R3,RE10
MOV  C,P_DS18B20
MOV  R3,#3CH
RE20:         DJNZ  R3,RE20
RRC  A
DJNZ  R2,RE01
MOV  @R1,A
www.751com.cn
;程序名称:SCAN_KEY
;功能:扫描键盘
;入口参数:DIS_BUF_G,DIS_BUF_S,DIS_BUF_B
;出口参数:KEY_BUF_G,KEY_BUF_S,kEY_BUF_B
SCAN_KEY:
JB  K_ENTER,QUIT  ;如果又Enter键入,则开始键盘输入
LCALL  K_DELAY
JB  K_ENTER,QUIT
CLR  ENTER_FLAG  ;每次进来都赋值输入标志,设置为0
MOV  KEY_BUF_G,DIS_BUF_G ;将当前的温度赋值给KEY_BUF
 MOV  KEY_BUF_S,DIS_BUF_S
MOV  KEY_BUF_B,DIS_BUF_B
K_LOOP:
JB ENTER_FLAG,QUIT ;如果输入完成,ENTER_FLAG则为1,退出键盘程
;序
JB  K_ENTER,KUP
CALL  PRO_ENTER
KUP:        JB  K_UP,KDOWN
CALL  PRO_UP
KDOWN:     JB  K_DOWN,LOOPA
CALL  PRO_DOWN
LOOPA:      LCALL  DISPLAY
SJMP  K_LOOP
QUIT:        RET

;程序名称:PRO_ENTER
;功能:确认键盘输入和退出键盘输入
;入口参数:ENTER_FLAG
;出口参数:ENTER_FLAG
PRO_ENTER:
CALL  K_DELAY
JB  K_ENTER,K_LOOP ;按钮抖动处理
SETB E NTER_FLAG

 << 上一页  [11] 

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有