温度控制.docx
- 文档编号:23526493
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:31
- 大小:21.83KB
温度控制.docx
《温度控制.docx》由会员分享,可在线阅读,更多相关《温度控制.docx(31页珍藏版)》请在冰豆网上搜索。
温度控制
;―――――――――――――――――――――――――――――――
;温度值存放单元
TEMP_ZHEQU24H;实时温度值存放单元
TEMPLEQU25H;低温度值存放单元
TEMPHEQU26H;高温度值存放单元
TEMP_THEQU27H;高温报警值存放单元
TEMP_TLEQU28H;低温报警值存放单元
TEMPHCEQU29H;存十位数BCD码
TEMPLCEQU2AH;存个位数BCD码
;―――――――――――――
;按键输入引脚定义
K1EQUP3.0
K2EQUP3.1
K3EQUP3.2
K4EQUP3.3
;―――――――――――――
SPKEQUP2.0;蜂鸣器引脚
RELAY1EQUP2.3;继电器引脚
RELAY2EQUP2.1
RELAY3EQUP2.2
XEQU2FH;LCD地址变量
;―――――――――――――
;LCD控制引脚
RSEQUP3.5
RWEQUP3.6
EEQUP3.7
;―――――――――――――
FLAGEQU20H.0;DS18B20是否存在标记
KEY_UDEQU20H.1;设定KEY的UP与DOWN标记
DQEQUP3.4
;----------------------------------------------------------------------------
;=============主程序==============
MAIN:
ACALLSET_LCD;LCD初始化设置子程序
ACALLWR_THL;将报警上下线写入暂存寄存器子程序
TOOP:
ACALLRESET_1820;调用18B20复位子程序
JNBFLAG,TOOP1;DS1820不存在转移TOOP1处
ACALLMEU_OK;调用显示"OK"信息子程序
ACALLRE_THL;把EEROM里温度报警值拷贝回暂存器
ACALLTEMP_BJ;显示温度标记"℃"
JMPTOOP2
TOOP1:
ACALLMEU_ERROR;显示"ERROR"信息
ACALLTEMP_BJ;显示温度标记
JMP$;等待
;――――――――――――――
TOOP2:
ACALLRE_TEMP;调用读取温度数据子程序
ACALLSET_DATA;调用处理显示温度数据子程序
ACALLTEMP_COMP;实际温度值与标记温度值比较子程序
ACALLP_KEY;调用按键扫描子程序
SJMPTOOP2;循环
;--------――读取温度数据子程序--------――
RE_TEMP:
ACALLRESET_1820;18B20复位子程序
JNBFLAG,TOOP1;DS1820不存在
MOVA,#0CCH;跳过ROM匹配
ACALLWRITE_1820;写入子程序
MOVA,#44H;发出温度转换命令
ACALLWRITE_1820;调写入子程序
ACALLRESET_1820;调复位子程序
MOVA,#0CCH;跳过ROM匹配
ACALLWRITE_1820;写入子程序
MOVA,#0BEH;发出读温度命令
ACALLWRITE_1820;写入子程序
ACALLREAD_1820;调用读取子程序
RET
;--------温度数据处理显示子程序----------
SET_DATA:
ACALLCONV_TEMP;处理温度BCD码子程序
ACALLDISP_BCD;显示区BCD码温度值刷新子程序
ACALLCONV;LCD显示子程序
RET
;-----------按键键扫描子程序----------
P_KEY:
;按键K1处理
JBK1,PK1;K1键未按,转到PK1处
ACALLSPK_BZ;K1键按下,一声鸣响
JNBK1,$;等按键放开
MOVDPTR,#M_ALAX1;存M_ALAX1表
MOVA,#1
ACALLLCD_PRINT;显示字符
ACALLLOOK_ALARM;显示信息区子程序
JBK3,$;等待K3按下
ACALLSPK_BZ;一声鸣响
JMPPK2;转到标号PK2处
PK1:
;按键K2处理
JBK2,PK3;K2键未按,转到PK3处
ACALLSPK_BZ;K2键按下,一声鸣响
JNBK2,$;等按键放开
MOVDPTR,#TA1;存#TA1表
MOVA,#1
ACALLLCD_PRINT;显示字符
ACALLSET_ALARM;设定报警值TH、TL
ACALLWR_THL;将设定的TH,TL值写入DS18B20内
ACALLWRITE_E2;调用报警值拷贝EEROM子程序
PK2:
ACALLMEU_OK;显示"OK"信息子程序
ACALLTEMP_BJ;显示温度标记子程序
PK3:
RET
;―――――――――――――
TA1:
;菜单表
DB"RESETALERTCODE"
;―――――――――――――
;---------设定报警值TH、TL子程序--------
SET_ALARM:
ACALLLOOK_ALARM;调用显示信息区子程序
A0:
JBK1,A2;按下K1(查看键),程序向下运行
ACALLSPK_BZ;蜂鸣器响一声
JNBK1,$;等放开
CPL20H.1;UP/DOWN标记反向
A2:
JB20H.1,A3;20H.1=1,UP,转移到A3。
JMPA8;20H.1=0,DOWN,转移到A8
;―――――――――――――
;TH值调整(增加)
A3:
JBK2,A5;按下K2(设定键),程序向下运行
ACALLSPK_BZ;蜂鸣器响一声
INCTEMP_TH;TH值调整(增加)
MOVA,TEMP_TH;TH值送入A
CJNEA,#120,A4;TH值增到120,程序向下运行
MOVTEMP_TH,#0;TH值清0
A4:
ACALLLOOK_ALARM;调用显示信息区子程序
MOVR5,#10
ACALLDELAY;调用延时程序
JMPA3;循环
;―――――――――――――
;TL值调整(增加)
A5:
JBK3,A7;按下K3(TL值设定键)程序向下运行
ACALLSPK_BZ;蜂鸣器响一声
INCTEMP_TL;TL值增加1
MOVA,TEMP_TL;TL值送入A
CJNEA,#99,A6;比较,若A=99,程序向下运行
MOVTEMP_TL,#00H;TL值清0
A6:
ACALLLOOK_ALARM;调用显示信息区子程序
MOVR5,#10
ACALLDELAY;调用延时程序
JMPA5;程序转移到A5,循环
;―――――――――――――
;确定调整OK
A7:
JBK4,A0;按下K4(调整确定键),程序向下运行
ACALLSPK_BZ;蜂鸣器响一声
JNBK4,$;等放开
RET;程序返回
;―――――――――――――
;TH值调整(减少)
A8:
JBK2,A10;按下K2(设定键),程序向下运行
ACALLSPK_BZ;蜂鸣器响一声
DECTEMP_TH;TH值减1
MOVA,TEMP_TH;TH值送入A
CJNEA,#0FFH,A9;比较,若A=0FF,程序向下运行
JMPA12;转移到A12
A9:
ACALLLOOK_ALARM;调用显示信息区子程序
MOVR5,#10
ACALLDELAY;调用延时子程序
JMPA0;转移到A12
;――――――――――――――
;TL值调整(减少)
A10:
JBK3,A13;按K3(TL值设定键),程序向下运行
ACALLSPK_BZ;蜂鸣器响一声
DECTEMP_TL;TL值减1
MOVA,TEMP_TL;TH值送入A
CJNEA,#0FFH,A11;比较,若A=0FF,程序向下运行
JMPA12;转移到A12
A11:
ACALLLOOK_ALARM;调用显示信息区子程序
MOVR5,#10
ACALLDELAY;调用延时子程序
JMPA0;转移到A0
A12:
CPL20H.1;UP/DOWN标记反向
JMPA3;转移到A3,TH值调整(增加)
A13:
JMPA7;转移到A7,确定调整OK
RET;子程序返回
;----------显示信息区子程序-----------
LOOK_ALARM:
MOVDPTR,#M_ALAX2;存表
MOVA,#2;显示在第二行
ACALLLCD_PRINT;调用显示字符子程序
MOVA,#0C6H;显示起始地址为第二行第7位
ACALLTEMP_BJ1;调用显示温度标记子程序
MOVA,TEMP_TH;加载TH数据
MOVX,#3;设置位置
ACALLSHOW_LINE2H;显示数据
;―――――――――――――
MOVA,#0CEH;设定显示起始地址为第二行第15位
ACALLTEMP_BJ1;调用显示温度标记子程序
MOVA,TEMP_TL;加载TL数据
MOVX,#12;设置位置
ACALLSHOW_LINE2L;显示数据
RET
;――――――――――――――
M_ALAX1:
DB"LOOKALERTCODE",0
M_ALAX2:
DB"TH:
TL:
",0
;――――――――――――――
;――――――显示温度标记子程序――――――
TEMP_BJ1:
ACALLWR_COMM;调用写指令子程序
MOVDPTR,#BJ2;存代码表
MOVR1,#0;使指针指到表中第一个码
MOVR0,#2;取码次数
B0:
MOVA,R1;A为0
MOVCA,@A+DPTR;读取码
ACALLWR_DATA;调用写数据子程序
INCR1;R1值加1
DJNZR0,B0;判断是否将代码读取完?
RET
;―――――――――――――
BJ2:
;代码表
DB00H,"C"
;―――――――――――――
;―――――在LCD的第二行显示高温数字――――
SHOW_LINE2H:
MOVB,#100;设置被除数,B为百位数
DIVAB;除法运算,结果A存商数,B存余数
ADDA,#30H;低半字节加30得到ASCII码(转换为字符)
PUSHB;B放入堆栈暂存起来
MOVB,X;设置LCD显示的位置
ACALLLCDP2;由LCD显示出来
;―――――――――――――
POPB;B由堆栈取出来
MOVA,#0AH;A赋值10
XCHA,B;A、B数据互换,B为十位数
DIVAB;除法运算,结果A存商数,B存余数
ADDA,#30H;转换为字符
INCX;LCD显示位位置加1
PUSHB;B放入堆栈暂存起来
MOVB,X;设置LCD显示的位置
ACALLLCDP2;由LCD显示出来
;―――――――――――――
POPB;B由堆栈取出来
INCX;LCD显示位位置加1
MOVA,B;B为个位数
MOVB,X;设置LCD显示的位置
ADDA,#30H;转换为字符
ACALLLCDP2;由LCD显示出来
RET
;―――――在LCD的第二行显示低温数字―――――
SHOW_LINE2L:
MOVB,#100;设置被除数
DIVAB;除法运算,结果A存商数,B存余数
MOVA,#0AH;A赋值10
XCHA,B;A、B数据互换,B为十位数
DIVAB;除法运算,结果A存商数,B存余数
ADDA,#30H;转换为字符
PUSHB;B放入堆栈暂存起来
MOVB,X;设置LCD显示的位置
CALLLCDP2;由LCD显示出来
;――――――――――――――
POPB;B由堆栈取出来
INCX;LCD显示位位置加1
MOVA,B;B为个位数
MOVB,X;设置LCD显示的位置
ADDA,#30H;转换为字符
ACALLLCDP2;由LCD显示出来
RET
;-----------温度值比较子程序------------
;实际温度值与标记温度值比较
TEMP_COMP:
MOVA,TEMP_TH;高温报警值送入A
SUBBA,TEMP_ZH;减数>被减数,则
JCTCL1;借位标志位C=1,转TCL1
MOVA,TEMP_ZH;实时温度送入A
SUBBA,TEMP_TL;减数>被减数,则
JCTCL2;借位标志位C=1,转TCL2
MOVDPTR,#BJ5;存表BJ5
ACALLTEMP_BJ3;调用显示高、低温度及加热标记子程序
SETBRELAY1;继电器吸合
SETBRELAY2
CLRRELAY3
RET
;―――――――――――――
TCL1:
;实时温度>高温报警值的处理程序
MOVDPTR,#BJ3;存入#BJ3表
ACALLTEMP_BJ3;调用显示高、低温度及加热标记子程序
CLRRELAY1;继电器关闭
SETBRELAY3
ACALLSPK_BZ;调用鸣响子程序
RET
;―――――――――――――-
TCL2:
;实时温度<高温报警值的处理程序
MOVDPTR,#BJ4;存入#BJ4表
ACALLTEMP_BJ3;调用显示高、低温度及加标记子程序
CLRRELAY2
SETBRELAY3
ACALLSPK_BZ;调用鸣响子程序
RET
;---显示高、低温度及加热标记程序----
TEMP_BJ3:
MOVA,#0CEH;设定显示位置
ACALLWR_COMM;调用写指令子程序
MOVR1,#0;使指针指到表中第一个码
MOVR0,#2;取码次数
BJJ:
MOVA,R1;A为0
MOVCA,@A+DPTR;读取码
ACALLWR_DATA;调用写数据子程序
INCR1;R1值加1
DJNZR0,BJJ;判断是否将代码读取完?
RET
;―――――――――――――
BJ3:
DB">H"
BJ4:
DB" BJ5: DB"! " ;――――――――――――― ;---------报警上下线写入暂存器子程序-------- WR_THL: JBFLAG,WR_T;FLAG=1,表示DS18B20存在,转WR_T处 RET ;――――――――――――― WR_T: ACALLRESET_1820;调用18B20复位子程序 MOVA,#0CCH;跳过ROM匹配 LCALLWRITE_1820;调用写入子程序 MOVA,#4EH;写暂存寄存器 LCALLWRITE_1820;调用写入子程序 MOVA,TEMP_TH;TH(报警上限) LCALLWRITE_1820;调用写入子程序 MOVA,TEMP_TL;TL(报警下限) LCALLWRITE_1820;调用写入子程序 MOVA,#7FH;12位精确度 LCALLWRITE_1820;调用写入子程序 RET ;---------报警值拷贝到EEROM子程序----------- WRITE_E2: ACALLRESET_1820;调用18B20复位子程序 MOVA,#0CCH;跳过ROM匹配 LCALLWRITE_1820;调用写入子程序 MOVA,#48H;[48H]为拷贝到EEROM的指令代码 LCALLWRITE_1820;调用写入子程序 RET ;----------报警值拷贝回暂存器子程序---------- RE_THL: ACALLRESET_1820;调用18B20复位子程序 MOVA,#0CCH;跳过ROM匹配 LCALLWRITE_1820;调用写入子程序 MOVA,#0B8H;把EEROM里的温度报警值拷贝回暂存器 ACALLWRITE_1820;调用写入子程序 RET ;----------处理温度BCD码子程序---------- CONV_TEMP: MOVA,TEMPH;判温度是否零下 ANLA,#80H JZTC1;温度零转TC1处 CLRC;C=0 MOVA,TEMPL;二进制数求补(双字节) CPLA;取反加1 ADDA,#01H MOVTEMPL,A MOVA,TEMPH CPLA ADDCA,#00H MOVTEMPH,A JMPTC2 ;――――――――――――― TC1: MOVTEMPHC,#0AH TC2: MOVA,TEMPHC SWAPA;高、低位交换 MOVTEMPHC,A MOVA,TEMPL ANLA,#0FH;乘0.0625 MOVDPTR,#DOTTAB MOVCA,@A+DPTR MOVTEMPLC,A;TEMPLCLOW=小数部分BCD ;――――――――――――― MOVA,TEMPL;整数部分 ANLA,#0F0H;取出高四位 SWAPA;高、低位交换 MOVTEMPL,A MOVA,TEMPH ANLA,#0FH;取出低四位 SWAPA;高、低位交换 ORLA,TEMPL;重新组合 MOVTEMP_ZH,A LCALLHEX2BCD1 MOVTEMPL,A ANLA,#0F0H;取出高四位 SWAPA;高、低位交换 ORLA,TEMPHC;TEMPHCLOW=十位数BCD MOVTEMPHC,A MOVA,TEMPL ANLA,#0FH;取出低四位 SWAPA;高、低位交换 ORLA,TEMPLC;TEMPLCHI=个位数BCD MOVTEMPLC,A MOVA,R4 JZTC3 ANLA,#0FH;取出低四位 SWAPA;高、低位交换 MOVR4,A MOVA,TEMPHC;TEMPHCHI=百位数BCD ANLA,#0FH;取出低四位 ORLA,R4 MOVTEMPHC,A TC3: RET ;――――――――――――― HEX2BCD1: MOVB,#064H;十六进制->BCD DIVAB;B=A%100 MOVR4,A;R4=百位数 MOVA,#0AH XCHA,B DIVAB;B=A%B SWAPA;高、低位交换 ORLA,B RET ;――――――――――――― ;小数部分码表 DOTTAB: DB00H,00H,01H,01H,02H,03H,03H,04H DB05H,05H,06H,06H,07H,08H,08H,09H ;――――――――――――― ;--------显示区BCD码温度值刷新子程序-------- DISP_BCD: MOVA,TEMPLC;个位数BCD码送入A ANLA,#0FH;取低位码 MOV70H,A;小数位 MOVA,TEMPLC SWAPA;高、低位交换 ANLA,#0FH;取结果数的高位 MOV71H,A;个位 MOVA,TEMPHC ANLA,#0FH;取低位码 MOV72H,A;十位 MOVA,TEMPHC SWAPA;高、低位交换 ANLA,#0FH;取结果数的高位 MOV73H,A;百位 MOVA,TEMPHC ANLA,#0F0H;取低位码 CJNEA,#010H,DI0 JMPDI2 ;――――――――――――― DI0: MOVA,TEMPHC ANLA,#0FH;取低位码 JNZDI2;十位数是0 MOVA,TEMPHC SWAPA;高、低位交换 ANLA,#0FH;取结果数的高位 MOV73H,#0AH;符号位不显示 MOV72H,A;十位数显示符号 DI2: RET ;――――――――DS18B20复位初始化子程序―――――――――― RESET_1820: ;复位(有具体的时序要求) SETBDQ NOP CLRDQ ;――――――――――――― ;主机发出延时537微秒的复位低脉冲 MOVR1,#3 DLY: MOVR0,#107 DJNZR0,$ DJNZR1,DLY ;――――――――――――― ;然后拉高数据线 SETBDQ NOP NOP NOP ;――――――――――――― ;等待DS18B20回应 MOVR0,#25H T2: JNBDQ,T3 DJNZR0,T2 JMPT4 ;――――――――――――― ;置标志位FLAG=1,表示DS1820存在 T3: SETBFLAG JMPT5 ;――――――――――――― ;清标志位FLAG=0,表示DS1820不存在 T4: CLRFLAG JMPT7 ;――――――――――――― ;时序要求延时一段时间 T5: MOVR0,#117 T6: DJNZ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 控制