;*************************************************
;单片机内存分配申明!
;*************************************************
TEMPER_L EQU 40H ;用于保存读出温度的低8位
TEMPER_H EQU 41H ;用于保存读出温度的高8位
TMROMVH EQU 42H ;报警上限
TMROMVL EQU 43H ;报警下限
FLAG1 EQU 38H ;是否检测到DS18B20标志位
TEMPL EQU 30H ;用于保存读出温度的低8位
TEMPH EQU 31H ;用于保存读出温度的高8位
TEMPHC EQU 32H ;温度转换寄存器低8位
TEMPLC EQU 33H ;温度转换寄存器高8位
BUF1 EQU 34H ;显示缓冲寄存器小数位
BUF2 EQU 35H ;显示缓冲寄存器个数位
BUF3 EQU 36H ;显示缓冲寄存器十数位
BUF4 EQU 37H ;显示缓冲寄存器百数位
T10MS EQU 29H ;
TMSETVL EQU 28H ;温度下限设定值
TMSETVH EQU 27H ;温度上限设定值
DISL_VL EQU 26H ;报警下限个位数存放内存位置
DISL_VH EQU 25H ;报警下限十位数存放内存位置
DISH_VL EQU 24H ;报警上限个位数存放内存位置
DISH_VH EQU 23H ;报警上限十位数存放内存位置
BT_VL EQU 22H ;比较当前显示数据与设定数据寄存器
;**********************************************
SING BIT P2.3 ;蜂鸣
TEMPDIN BIT P2.4 ;数据脚定义
K6 BIT P2.5 ;按键输入
K5 BIT P2.6 ;
K4 BIT P2.7 ;
K3 BIT P1.0 ;
K2 BIT P1.1 ;
;**********************************************
; BIT FLAG DEFINATION
;**********************************************
TEMPCONV EQU 00H ;
TIME1SOK EQU 01H ;
TEMPONEOK EQU 02H ;
;**********************************************
ORG 0000H ;主程序入口地址
AJMP MAIN ;转主程序
ORG 0003H ;外中断0中断入口
DB 00H,00H,00H,00H,00H,00H,00H;
RETI ;跳至INTEX0执行中断服务程序
ORG 000BH ;定时器T0中断入口地址
AJMP TIMER0 ;
RETI ;跳至定时器T0执行中断服务程序
ORG 0013H ;外中断1中断入口
DB 00H,00H,00H,00H,00H,00H,00H ;
RETI ;跳至INTEX1执行中断服务程序
ORG 001BH ;定时器T1中断入口地址
DB 00H,00H,00H,00H,00H,00H,00H ;
RETI ;中断返回(不开中断)
ORG 0023H ;串行口中断入口地址
DB 00H,00H,00H,00H,00H,00H,00H ;
RETI ;中断返回(不开中断)
;**********************************************
ORG 100H ;
MAIN:
MOV SP, #60H ;
MOV P1, #0FFH ;
MOV TMOD,#01H ;
MOV TH0, #0B1H ;SET T0 VALUE 10MS
MOV TL0, #0E0H ;
MOV DISL_VL,#00H ;
MOV DISL_VH,#00H ;
MOV DISH_VL,#00H ;
MOV DISH_VH,#00H ;
MOV TMSETVL,#30H ;
MOV TMSETVH,#35H ;
CLR EA ;打开CPU总中断请求
CLR TR0 ;
CLR ET0 ;
MOV PSW, #00H ;
CLR TEMPCONV ;
CLR TEMPONEOK ;
;**************************************
LPTEMP: LCALL INIT_1820 ;先复位DS18B20
MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE_1820 ;
MOV A,#0B8H ;发出读温度命令
LCALL WRITE_1820 ;
LCALL GET_TM ;调用读温度子程序
LCALL CONVTEMP ;温度BCD码计算处理子程序
LCALL DISPBCD ;显示区BCD码温度值刷新子程序
;**************************************
MOV A,TMSETVL ;调下限设置值到调整显示寄存
ANL A, #0FH ;
MOV DISL_VL,A ;
MOV A,TMSETVL ;
SWAP A ;
ANL A, #0FH ;
MOV DISL_VH,A ;
MOV A,TMSETVH ;调上限设置值到调整显示寄存
ANL A, #0FH ;
MOV DISH_VL,A ;
MOV A,TMSETVH ;
SWAP A ;
ANL A, #0FH ;
MOV DISH_VH,A ;
;*************************************
LPTEMP1: LCALL KEYWORK ;
LCALL DISPLAY ;调用数码管显示子程序
LCALL BT_WORK ;
;*************************************
MOV A,BT_VL ; 比较当前温度与设定下限温度值
CJNE A,TMSETVL,TEMP_VH1;
CLR P2.3 ;
TEMP_VH1: JNC TEMP_VH ;
CLR P2.3 ;
TEMP_VH: CJNE A,TMSETVH,TM_WORK1;比较当前温度与设定上限温度值
SETB P2.3 ;
TM_WORK1: JC TM_WORK ;
SETB P2.3 ;
;*************************************
TM_WORK:
JB TEMPONEOK,LPTEMP1;
LCALL GET_TEMPER ;调用读温度子程序
LCALL CONVTEMP ;温度BCD码计算处理子程序
LCALL DISPBCD ;显示区BCD码温度值刷新子程序
AJMP LPTEMP1 ;
;**************************************
BT_WORK:
MOV BT_VL,BUF2 ;当前显示保存是转换程序
MOV A,BUF3 ;
SWAP A ;
ORL A,BT_VL ;
MOV BT_VL,A ;
RET ;
;**************************************
KEYWORK:
ORL P1,#00FH ;置列线输入状态
MOV A, P1 ;读入P0口值
ANL A,#00FH ;
MOV B,A ;KEYY口值暂存B中
CJNE A,#0F0H,KEYHIT ;不等于#0FFH,转KEYHIT(有键按下)
KEYOUT: RET ;
KEYHIT:
LCALL DL10MS ;延时去抖动
; LCALL DL10MS ;
MOV A, P1 ;再读入P0口值至A
ANL A,#00FH ;
CJNE A,B,KEYOUT ;A不等于B(是干扰),子程序返回
;**************************************
JNB K4, K4WORK ;
JNB K6, K6WORK ;
JNB K5, K5WORK ;
AJMP KEYOUT ;
;*************************************
K6WORK: JNB TEMPCONV,KEYOUT ; 设定上限值调整程序
INC DISL_VL ;
MOV A, DISL_VL ;
CJNE A, #10,K6OUT ;
MOV DISL_VL,#00H ;
INC DISL_VH ;
MOV A,DISL_VH ;
CJNE A, #10,K6OUT ;
MOV DISL_VH,#00H ;
K6OUT: MOV BUF2,DISL_VL ;
MOV BUF3,DISL_VH ;
AJMP KEYOUT ;
;************************************
K5WORK: JNB TEMPCONV,KEYOUT ;设定下限值调整程序
INC DISH_VL ;
MOV A, DISH_VL ;
CJNE A, #10,K5OUT ;
MOV DISH_VL,#00H ;
INC DISH_VH ;
MOV A,DISH_VH ;
CJNE A, #10,K5OUT ;
MOV DISH_VH,#00H ;
K5OUT: MOV BUF2,DISH_VL ;
MOV BUF3,DISH_VH ;
AJMP KEYOUT ;
;***************************************
K4WORK: LCALL INIT_1820 ;先复位DS18B20
CPL TEMPONEOK ;
CPL TEMPCONV ;
;**************************************
LCALL INIT_1820 ;先复位DS18B20
MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE_1820 ;
MOV A,#4EH ;写入温度限制指令
LCALL WRITE_1820 ;
;***************************************
MOV A,DISL_VL ; 写入设定下限值
评论0