简易温度控制器设计
更新时间:2023-08-29 14:00:01 阅读量: 教育文库 文档下载
;====变量及常数定义段====
INCLUDE "VARDFN.ASM"
;===============
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INTS
ORG 000BH ;添加变量等定义模块
LJMP T0SER ;转T0中断服务子程序
ORG 002BH
LJMP T2SER
ORG 0030H
MAIN: INCLUDE "INITIAL.ASM" ;添加初始化模块
MLOOP: DJNZ T100MS,A2
MOV T100MS,#25
CLR TR1
MOV R2,TH1
MOV R3,TL1
SETB TR1
MOV TH1,#00H
MOV TL1,#00H
LCALL FTEMP
LCALL FTCTRL
A2: JNB TF0,$ ;4mS到?
CLR TF0 ;清定时标志
MOV TH0,#0F0H ;4mS定时重设
MOV TL0,#60H
LCALL RDKEY ;调用读键状态及去抖处理
LCALL DISP ;调用数码管动态显示
MOV A,STA ;根据状态值散转相应模块
ANL A,#03H
RL A
MOV DPTR,#MTAB
JMP @A+DPTR
MTAB: AJMP WORK0 ;转移到待机模块
AJMP WORK1 ;转移到赋值模块
AJMP WORK2 ;转移到查询模块
AJMP WORK3
AJMP WORK0 ;冗余
;====温度计模块====
WORK0: SETB KKG
MOV R0,#TEMP1
ACALL DSBUDT1
MOV DSB2,#00H
MOV DSB3,#00H
MOV DSB4,#01H
JB ESW1,WK01
JB ESW2,WK02
AJMP MLOOP
WK01: MOV STA,#02H
AJMP MLOOP
WK02: MOV STA,#01H
WK03: AJMP MLOOP
;====设置控制温度模块====
WORK1: SETB KKG
MOV DSB3,#00H
MOV DSB2,#00H
MOV R0,#TEMP0
ACALL DSBUDT1
MOV DSB4,#02H
JNB ESW2,WK11
MOV STA,#00H
SJMP WK13
WK11: CLR A
JB EK0,WK12
INC A
JB EK1,WK12
INC A
JB EK2,WK12
INC A JB EK3,WK12 INC A JB EK4,WK12 INC A JB EK5,WK12 INC A JB EK6,WK12 INC A JB EK7,WK12 ;数据2送显缓 ;LD2亮 ;下次主循环返回WORK0模块 ;查询"0"键 ;查询"1"键 ;查询"2"键 ;查询"3"键 ;查询"4"键 ;查询"5"键 ;查询"6"键 ;查询"7"键
INC A ;查询"8"键
JB EK8,WK12
INC A ;查询"9"键
JNB EK9,WK13
WK12: XCH A,TEMP0 ;键值从数据2的右边移入 SWAP A
ANL A,#0F0H
ORL TEMP0,A
WK13: AJMP MLOOP
;====开关方式温度控制器模块====
WORK2: MOV R1,#TEMP0 ;数据2送显缓
ACALL DSBUDT2
MOV R0,#TEMP1
ACALL DSBUDT1
MOV DSB4,#04H
MOV A,TEMP1
CLR C
SUBB A,TEMP0
JNC WK22
WK21: CLR KKG
SETB LD8
AJMP WK23
WK22: SETB KKG
WK23: JNB ESW1,WK24
MOV STA,#03H
SETB KKG
WK24: AJMP MLOOP
;====脉冲式温度控制模块====
WORK3: SETB EA
MOV R1,#TEMP0
ACALL DSBUDT2
MOV R0,#TEMP1
ACALL DSBUDT1
MOV DSB4,#08H
JNB ESW1,WK31
CLR EA
MOV STA,#00H
WK31: AJMP MLOOP
;====将压缩BCD码送显缓====
DSBUDT1:MOV A,@R0
ANL A,#0FH
MOV DSB0,A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV DSB1,A
RET
DSBUDT2:MOV A,@R1
ANL A,#0FH
MOV DSB2,A
MOV A,@R1
ANL A,#0F0H
SWAP A
MOV DSB3,A
RET
;====T0中断服务子程序====
;====中断服务子程序====
INTS: ;MOV DSB4,#0AAH
MOV TL2,TCTRL1
MOV TH2,TCTRL0
SETB TR2 ;外部中断;开启T2并允许中断
SETB ET2 ;允许T2中断
CLR TF2
RETI
T2SER: ;MOV DSB4,#55H
CLR KKG ;T2中断触发可控硅
CLR TR2
CLR TF2
CLR ET2
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
SETB KKG
RETI
T0SER: RETI
;====通用子程序段====
INCLUDE "RDKEY.ASM" ;添加读键状态及去抖处理子程序 INCLUDE "DISP.ASM" ;添加数码管动态扫描显示子程序 INCLUDE "FTEMP.ASM" ;脉冲计数值转换温度值子程序 INCLUDE "FTCTRL.ASM" ;求控制时间或T2定时器初值子程序 END
INITIAL:MOV SP,#60H
MOV R0,#20H
MOV R1,#60H
QINGLIN:CLR A
MOV @R0,A
INC R0
DJNZ R1,QINGLIN
MOV KC2,#30
MOV TCMAX0,#0E0H
MOV TCMAX1,#0C0H
MOV SECL,#250
MOV T100MS,#25
MOV TEMP0,#00H
MOV STA,#00H
MOV DSW,#00H
MOV DSB0,#02H
MOV DSB1,#05H
MOV DSB2,#09H
MOV DSB3,#08H
MOV DSB4,#0FFH
MOV TMOD,#51H
SETB TR0
A1: JNB TF0,$
CLR TF0
MOV TH0,#0F0H
MOV TL0,#60H
LCALL DISP
DJNZ SECL,A1
SETB TR1
SETB EX0
SETB IT0
;====读矩阵、独立按键子程序(延时去抖)====
RDKEY: ORL P2,#0FFH ;关闭LED数码显示器
CLR ROW0 ;ROW0=0,扫描K0~3键
NOP ;延时,键盘线越长延时越长
NOP
MOV A,P2
ANL A,#0FH ;K0~3键位保留
XRL A,#0FH ;求反转正逻辑
MOV R6,A ;新的键状态暂存R6
ORL P2,#0FFH ;关闭LED数码显示器
CLR ROW1 ;ROW1=0,扫描K4~7键
NOP ;延时,键盘线越长延时越长
NOP MOV A,P2 ANL A,#0FH XRL A,#0FH SWAP A ADD A,R6 MOV R6,A ORL P2,#0FFH CLR ROW2 NOP NOP MOV A,P2 ;K4~7键位保留 ;求反转正逻辑 ;新的键状态暂存R6 ;关闭LED数码显示器 ;ROW2=0,扫描K8~11键 ;延时,键盘线越长延时越长
ANL A,#03H ;K8~9键位保留
XRL A,#03H ;求反转正逻辑
MOV R7,A ;新的键状态暂存R7
ORL P2,#0FFH ;关闭矩阵键盘
ORL P1,#0C0H
MOV A,P1
ANL A,#0C0H
XRL A,#0C0H
ADD A,R7
MOV R7,A
;读独立按键 ;接独立键盘的位保留 ;求反转正逻辑 CJNE A,KEY0,RDK0 ;键状态变化则转移 CJNE A,KEY1,RDK0
MOV KTMR,#05H ;去抖延时器加载初值 SJMP RDK1
RDK0: MOV A,KTMR ;过了延时时间?
JZ RDK1
DEC KTMR ;延时未结束
MOV R7,KEY1 ;放弃不稳定的键状态
MOV R6,KEY0
RDK1: MOV A,KEY1 ;键前沿提取
XRL A,R7
ANL A,R7
MOV EKEY1,A
MOV KEY1,R7 ;启用键的新状态
MOV A,KEY0 ;键前沿提取
XRL A,R6
ANL A,R6
MOV EKEY0,A
MOV KEY0,R6 ;启用键的新状态
RET
;====脉冲计数值查表转换为温度====
;入口条件<R2:R3>=当前脉冲计数值
;出口<TEMP0:TEMP1>=温度值(压缩BCD码)
;使用R2~R7,ACC,PSW,B,DPTR
FTEMP: CLR A
MOV TEMP1,A
MOV R6,A
MOV R7,A
MOV DPTR,#TTAB
FTP0: MOV A,TEMP1 ;读某温度脉冲数
RL A
MOVC A,@A+DPTR
MOV R4,A
MOV A,TEMP1
RL A
INC A
MOVC A,@A+DPTR
MOV R5,A
CLR C ;<R4:R5>=当前脉冲数-某温度脉冲数 MOV A,R3
SUBB A,R5
MOV R5,A
MOV A,R2
SUBB A,R4
MOV R4,A
JC FTP2 ;"当前脉冲数<某温度脉冲数"则转移 MOV A,R5 ;<R6:R7>=<R4:R5>
MOV R7,A
MOV A,R4
MOV R6,A
MOV A,TEMP1
CJNE A,#99,FTP1
SJMP FTP3
FTP1: INC TEMP1
SJMP FTP0
FTP2: MOV A,R5
ADD A,R7
MOV A,R4
ADDC A,R6
JC FTP3
MOV A,TEMP1
JZ FTP3
DEC TEMP1
FTP3: MOV A,TEMP1 ;温度值转换为压缩BCD码 MOV B,#10
DIV AB
SWAP A
ADD A,B
MOV TEMP1,A
RET
TTAB: DW 213,224,235,246,258,270,283,296,310,324
DW 339,354,370,387,404,421,439,458,477,497
DW 518,539,561,583,606,630,654,680,705,731
DW 758,786,814,843,873,903,934,965,997,1030
DW 1063,1097,1131,1166,1202,1238,1274,1311,1348,1386 DW 1424,1463,1502,1542,1581,1621,1662,1702,1743,1784 DW 1825,1867,1908,1950,1991,2033,2075,2116,2158,2200 DW 2241,2283,2324,2365,2406,2447,2487,2527,2567,2607 DW 2646,2686,2724,2763,2801,2838,2876,2913,2949,2985 DW 3020,3056,3090,3124,3158,3191,3224,3256,3288,3319
;====求控制时间或T2定时器初值子程序====
;入口条件<R2:R3>=当前测得的脉冲数
;出口条件<TCTRL0:1>=T2定时器初值
;使用ACC、B、PSW、DPTR、R2~R5
FTCTRL: MOV A,TEMP0 ;设定温度(压缩BCD)转二进制 MOV R5,A
SWAP A
ANL A,#0FH
MOV B,#0AH
MUL AB
XCH A,R5
ANL A,#0FH
ADD A,R5
MOV R5,A
MOV DPTR,#TTAB ;查设定温度脉冲数
RL A
MOVC A,@A+DPTR
MOV R4,A
MOV A,R5
RL A
INC A
MOVC A,@A+DPTR
CLR C ;<R2:3>=本次误差
SUBB A,R3
MOV R3,A
MOV A,R4
SUBB A,R2
FTC0:
FTC1:
FTC2:
FTC3:
FTC4:
MOV R2,A JB ACC.7,FTC0 ;误差为负则转移 JNZ FTC2 ;偏差>256则转移 SJMP FTC1 CPL A JNZ FTC5 ;偏差<-256则转移 MOV A,R3 ;<R4:5>=KC2*本次误差 MOV B,KC2 MUL AB MOV R5,A MOV R4,B MOV A,R2 MOV B,KC2 MUL AB ADD A,R4 MOV R4,A MOV A,R5 ;<R4:5>=<R4:5>+<TCTRL0:1> ADD A,TCTRL1 MOV R5,A MOV A,R4 JB ACC.7,FTC4 ;被加数为正?负则转移 ADDC A,TCTRL0 MOV R4,A JNC FTC3 ;和<最大值? MOV R4,#0FFH ;<R4:5>=最大值 CJNE R4,#0FFH,FTC6 MOV R5,#00H SJMP FTC6 ADDC A,TCTRL0 MOV R4,A
CLR C ;和>最小值?
MOV A,R5
SUBB A,TCMAX1
MOV A,R4
SUBB A,TCMAX0
JNC FTC6
FTC5: MOV R4,TCMAX0 ;<R4:5>=最小值
MOV R5,TCMAX1
FTC6: MOV C,EX0 ;保存外中断INT0设置 CLR EX0 ;关闭外中断INT0
MOV TCTRL0,R4 ;<TCTRL0:1>=<R4:5>
MOV TCTRL1,R5
MOV EX0,C ;恢复外中断INT0设置 RET
;====5位数码管扫描子程序====
DISP: ORL P2,#1FH ;关闭数码显示器
MOV A,DSW ;根据扫描循环变量转移
ANL A,#07H
RL A
MOV DPTR,#DSTAB
JMP @A+DPTR
DSTAB: AJMP DIS0
AJMP DIS1
AJMP DIS2
AJMP DIS3
AJMP DIS4
AJMP DIS0
AJMP DIS0
AJMP DIS0
DIS0: MOV A,DSB0
ANL A,#0FH
MOV DPTR,#LED7
MOVC A,@A+DPTR
MOV P0,A CLR CS0 MOV DSW,#01H RET ;扫描个位数码管 ;查显缓个位值的七段码表 ;七段码送P0口 ;点亮个位数码管 ;扫描指针指向下十位
DIS1: MOV A,DSB1 ;扫描十位数码管
ANL A,#0FH
MOV DPTR,#LED7 ;查显缓个位值的七段码表 MOVC A,@A+DPTR
MOV P0,A ;七段码送P0口
CLR CS1 ;点亮个位数码管
MOV DSW,#02H ;扫描指针指向下百位
RET
DIS2: MOV A,DSB2 ;扫描百位数码管
ANL A,#0FH
MOV DPTR,#LED7 ;查显缓个位值的七段码表 MOVC A,@A+DPTR
MOV P0,A ;七段码送P0口
CLR CS2 ;点亮个位数码管
MOV DSW,#03H ;扫描指针指向下千位
RET
DIS3: MOV A,DSB3 ;扫描千位数码管
ANL A,#0FH
MOV DPTR,#LED7 ;查显缓个位值的七段码表 MOVC A,@A+DPTR
MOV P0,A CLR CS3 ;七段码送P0口 ;点亮个位数码管
MOV DSW,#04H ;扫描指针指向下指示灯 RET
DIS4: MOV A,DSB4 ;扫描指示灯
CPL A
MOV P0,A
CLR CS4
MOV DSW,#00H
RET
;====LED段码表====
LED7: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H 码
;====变量定义段====
CS0 BIT P2.0 ;个位位选
CS1 BIT P2.1 ;十位位选
CS2 BIT P2.2 ;百位位选
CS3 BIT P2.3 ;千位位选
CS4 BIT P2.4 ;LED灯位选
ROW0 BIT P2.5
ROW1 BIT P2.6
ROW2 BIT P2.7
KKG BIT P3.3
;TF2 BIT T2CON.7
TR2 BIT T2CON.2
DSW EQU 30H ;位选计数
DSB0 EQU 31H ;显示缓冲单元个位
DSB1 EQU 32H ;显示缓冲单元十位
DSB2 EQU 33H ;显示缓冲单元百位
DSB3 EQU 34H ;显示缓冲单元千位
DSB4 EQU 20H ;显示缓冲单元指示灯状态
LD1 BIT DSB4.0 ;指示灯LD1控制位
LD2 BIT DSB4.1 ;指示灯LD2控制位
LD3 BIT DSB4.2 ;指示灯LD3控制位
LD4 BIT DSB4.3 ;指示灯LD4控制位
LD5 BIT DSB4.4 ;指示灯LD5控制位
LD6 BIT DSB4.5 ;指示灯LD6控制位
LD7 BIT DSB4.6 ;指示灯LD7控制位
LD8 BIT DSB4.7 ;指示灯LD8控制位
KEY0 EQU 21H ;键状态字
KEY1 EQU 22H
K0 BIT KEY0.0 ;K0键
K1 BIT KEY0.1 ;K1键 ;0~9,a~f共16个七段
K2 BIT KEY0.2 ;K2键
K3 BIT KEY0.3 ;K3键
K4 BIT KEY0.4 ;K4键
K5 BIT KEY0.5 ;K5键
K6 BIT KEY0.6 ;K6键
K7 BIT KEY0.7 ;K7键
K8 BIT KEY1.0 ;K8键
K9 BIT KEY1.1 ;K9键
SW1 BIT KEY1.6 ;SW1键
SW2 BIT KEY1.7 ;SW2键
EKEY0 EQU 24H ;键前沿字 EKEY1 EQU 25H
EK0 BIT EKEY0.0 ;K0键前沿
EK1 BIT EKEY0.1 ;K1键前沿
EK2 BIT EKEY0.2 ;K2键前沿
EK3 BIT EKEY0.3 ;K3键前沿
EK4 BIT EKEY0.4 ;K4键前沿
EK5 BIT EKEY0.5 ;K5键前沿
EK6 BIT EKEY0.6 ;K6键前沿
EK7 BIT EKEY0.7 ;K7键前沿
EK8 BIT EKEY1.0 ;K8键前沿
EK9 BIT EKEY1.1 ;K9键前沿
ESW1 BIT EKEY1.6 ;SW1键前沿 ESW2 BIT EKEY1.7 ;SW2键前沿 KTMR EQU 35H ;键去抖延时器 STA EQU 36H
TEMP0 EQU 37H
TEMP1 EQU 38H
T100MS EQU 39H
SECL EQU 3AH
TCTRL0 EQU 3BH
TCTRL1 EQU 3CH
TCMAX0 EQU 3DH
TCMAX1 EQU 3EH
KC2 EQU 3FH
正在阅读:
简易温度控制器设计08-29
分子生物学实验的常见问题与解决方案07-22
课程设计模板 2012- 副本03-20
“学困生”的成因及问卷调查报告09-27
2015年秋人教版八年级生物上册第五单元第四章第一节《细菌和真菌03-19
高中生物必修3、选修3试题03-26
心情短语之刑事和解制度的起源12-09
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 控制器
- 简易
- 温度
- 设计