📄 单片机在温度控制中的应用.txt
字号:
DIV AB
MOV @R1,A ;存十位数
DEC R1
XCH A,B
MOV @R1,A ;存个位数
DEC R0
MOV A,@R0 ;取有效小数
MOV B,#10
DIV AB
DEC R1
MOV @R1,A ;送小数到显示缓冲区
MOV A,B
CJNE A,#5,QQ ;小数四舍五入
QQ: JC PP
MOV A,@R1
ADD A,#01H
DA A
MOV @R1,A
PP: RET
;**********************************************************
SMAP: MOV R0,#2CH ; [采样子程序]
MOV R1,#03H ;采样次数
SAM1: MOV DPTR,#7FF8H
MOVX @DPTR,A ;启动A/D
MOV R2,#20H
DLY: DJNZ R2,DLY ;延时一小会
HERE: JB P3.3,HERE
MOV DPTR,#7FF8H
MOVX A,@DPTR ;读取转化结果
MOV @R0,A
INC R0
DJNZ R1,SAM1
RET
;**********************************************************
FILTER: MOV A,2CH ;[数字虑波子程序]
CJNE A,2DH,CMP1
AJMP CMP2
CMP1: JNC CMP2
XCH A,2DH
XCH A,2CH
CMP2: MOV A,2DH
CJNE A,2EH,CMP3
MOV 2AH,A
AJMP RR
CMP3: JC CMP4
MOV 2AH,A
AJMP RR
CMP4: MOV A,2EH
CJNE A,2CH,CMP5
MOV 2AH,A
AJMP RR
CMP5: JC CMP6
XCH A,2CH
CMP6: MOV 2AH,A
RR: RET
;**********************************************************
PTT1: CLR 00H ;[T1中断子程序]
JB 20H,GGG
SETB P1.0 ;关闭电炉
GG: CLR PT1
RETI
GGG: SETB P1.1 ;关闭风扇
CLR 20H
AJMP GG
;**********************************************************
DLY10MS: MOV R7,#0A0H ;[延时10毫秒子程序]
DL00: MOV R6,#0FFH
DL11: DJNZ R6,DL11
DJNZ R7,DL00
RET
;**********************************************************
PID: MOV R5,#00H [PID算法子程序]
MOV R4,2DH ;取Nx值
MOV R3,#00H
MOV R2,#28H ;取40度值
LCALL CPL1
LCALL DSUM ;求(Nx-28H)的值
MOV R0,#5AH ;赋乘法运算暂存单元地址首址
MOV R5,#05H
MOV R4,#1CH ;赋参数(5.12)
LCALL MULT ;调无符号数乘法
MOV 31H,5BH
MOV 32H,5AH ;存放结果的有效值
MOV R5,31H
MOV R4,32H ;取双字节的Ur(设定值)
MOV R3,2AH
MOV R2,#00H ;取双字节的Ui(k)(实测值)
ACALL CPL1 ;取Ui(k)的补码
ACALL DSUM ;计算E(k)
MOV 39H,R7
MOV 3AH,R6 ;存E(K)
MOV R5,35H
MOV R4,36H ;取KI参数
MOV R0,#4AH
ACALL MULT1 ;计算PI=KI*E(K)
MOV R5,39H
MOV R4,3AH ;取E(K)
MOV R3,3BH
MOV R2,3CH ;取E(K-1)
ACALL CPL1
ACALL DSUM ;求E(K)-E(K-1)
MOV R5,33H
MOV R4,34H ;取Kp参数
MOV R0,#46H
ACALL MULT1 ;求Kp*[E(K)-E(K-1)]
MOV R5,49H
MOV R4,48H
MOV R3,4DH
MOV R2,4CH
ACALL DSUM ;求Kp*[E(K)-E(K-1)]+KI*E(K)
MOV 4AH,R7
MOV 4BH,R6 ;保存上式之和
MOV R5,39H
MOV R4,3AH ;取E(K)
MOV R3,3DH
MOV R2,3EH ;取E(K-2)
ACALL DSUM ;计算E(K)+E(K-2)
MOV A,R7
MOV R5,A
MOV A,R6
MOV R4,A
MOV R3,3BH
MOV R2,3CH ;取E(k-1)
ACALL CPL1
ACALL DSUM ;求出E(K)+E(K-2)-2*E(K-1)
MOV A,R7
MOV R5,A
MOV A,R6
MOV R4,A
MOV R3,3BH
MOV R2,3CH
ACALL CPL1
ACALL DSUM
MOV R5,37H
MOV R4,38H ;取Kd参数
MOV R0,#46H
ACALL MULT1 ;求出Pd=Kd*[E(K)+E(K-2)-2*E(K-1)]
MOV R5,49H
MOV R4,48H ;取Pd
MOV R3,4AH
MOV R2,4BH ;取Kp*[E(K)-E(K-1)]+KI*E(K)
ACALL DSUM ;计算Pd+PI
MOV A,R7
MOV R3,A
MOV A,R6 ;取Pd+PI
MOV R2,A
MOV R5,2FH
MOV R4,30H ;取P(k-1)
ACALL DSUM ;求P(K)=Pd+Pp+P(K-1)
MOV 2FH,R7
MOV 30H,R6 ;存P(k)到P(k-1)
MOV 29H,2FH
MOV 3DH,3BH
MOV 3EH,3CH ;存E(K-1)到E(K-2)
MOV 3BH,39H
MOV 3CH,3AH ;存E(K)到E(k-1)
MOV A,31H ;取设定值
CJNE A,2AH,AA2 ;比较设定值与实测值
AA3: CLR 20H ;清电炉标志
AA1: RET
AA2: JNC AA3
SETB 20H ;清风扇标志位
MOV R3,39H
MOV R2,3AH
LCALL CPL1
MOV A,R3
MOV R7,A
MOV A,R2
MOV R6,A
MOV R5,42H
MOV R4,43H ;取K(风扇)参数
MOV R0,#5AH
ACALL MULI1 ; 计算P`=K*E(K),且结果防在51H,50H单元中
MOV 28H,5BH ;取8位有效值,放到28H单元中
AJMP AA1
;**********************************************************
DSUM: MOV A,R4 ;[双字节加法子程序]:(R5R4)+(R3R2)-->(R7R6)
ADD A,R2
MOV R6,A
MOV A,R5
ADDC A,R3
MOV R7,A
RET
;**********************************************************
CPL1: MOV A,R2 ;[双字节求补子程序]:(R3R2)求补
CPL A
ADD A,#01H
MOV R2,A
MOV A,R3
CPL A
ADDC A,#00H
MOV R3,A
RET
;**********************************************************
MULT1: MOV A,R7 ;[双字节有符号数乘法]:被乘数(R7R6),乘数(R5R4)
RLC A
MOV 5CH,C ;被乘数符号C1-->5CH位
JNC POS1 ;为正数则转
MOV A,R6 ;为负数则求补
CPL A
ADD A,#01H
MOV R6,A
MOV A,R7
CPL A
ADDC A,#00H
MOV R7,A
POS1: MOV A,R5 ;取乘数
RLC A ;乘数符号C2-->5DH位
MOV 5DH,C
JNC POS2 ;为正数则转
MOV A,R4
CPL A
ADD A,#01H
MOV R4,A
MOV A,R5
CPL A
ADDC A,#00H
MOV R5,A
POS2: ACALL MULT ;调双字节无符号数乘法子程序
MOV C,5CH
ANL C,5DH
JC TPL ;负负相乘则转
MOV C,5CH
ORL C,5DH
JNC TPL ;正正相乘则转
DEC R0
MOV A,@R0
CPL A
ADD A,#01H
MOV @R0,A
INC R0
MOV A,@R0
CPL A
ADDC A,#00H
MOV @R0,A
TPL: RET
;**********************************************************
MULT: MOV A,R6 ;被乘数(R7R6),乘数(R5R4)
MOV B,R4 ;取低位相乘
MUL AB
MOV @R0,A
MOV R3,B
MOV A,R4
MOV B,R7
MUL AB
ADD A,R3
MOV R3,A
MOV A,B
ADDC A,#00H
MOV R2,A
MOV A,R6
MOV B,R5
MUL AB
ADD A,R3
INC R0
MOV @R0,A
CLR 5BH
MOV A,R2
ADDC A,B
MOV R2,A
JNC LAST
SETB 5BH ;置进位标志
LAST: MOV A,R7
MOV B,R5
MUL AB
ADD A,R2
INC R0
MOV @R0,A ;存积的第二字节
MOV A,B
ADDC A,#00H
MOV C,5BH
ADDC A,#00H
INC R0
MOV @R0,A
RET
END
5、系统调试
首先进行硬件调试。硬件调试指对扩展数据存储器(RAM)、程序存储器
(ROM)、I/O口与I/O设备、译码电路、晶振与复位电路等的测试。RAM测试采用
写入读出加比较的方法检测;ROM测试采用累加和的方法检测;I/O测试通过观测
输入与输出数据来完成;译码器通过运行循环检测程序来检验;观察晶振、复位
电路能否产生所需信号以确定其工作是否正常。
利用SICE将本系统调试成功后,本系统即可正常工作。为了使其成为产品,
还需要生产出正规的芯片,并设计美观实用的外壳,将其组装、检验和装箱,至
此,温度控制芯片研制完成。
参考文献:
【1】孙育才. MCS-51系列单片微型计算机及其应用.南京:南京工学院出版
社.1987.2~180.
【2】李永敏.数字化测试技术-模拟信号调理,数据转换及采集技术.北京:航空
工业出版社.1987.32~161.
【3】 赵不贿.在系统可编程器件与开发技术[M].北京:机械工业出版社,2001.
【4】 张洪润,蓝清华.单片机应用技术教程[M] .北京:清华大学出版社,1997.
【5】 张毅刚等编. MCS-51单片机应用设计.哈尔滨工业大学出版社,1993
【6】 沙占友.新编数字化测量技术[M].北京:国防工业出版社,1998.
【7】 张俊谟编著.单片机中级教程原理与应用. 北京航空航天大学出版出社,
2000.6
【8】 潘新民 微型计算机控制技术 高等教育出版
社
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -