洛阳理工学院毕业设计(论文)
MOV SCON,#00H ;置串行口为方式0 MOV R2,#03H ;显示位数送R2 MOV R0,#T100 ;显示缓冲区首地址送R0
LD: MOV DPTR,#TAB ;指向字型码表首地址 MOV A,@R0 ;取显示数据
MOVC A,@A+DPTR ;查表 MOV SBUF,A
;字型码送串行口
WAIT: JBC TI,NEXT ;发送结束转下一个数据并清中断标志
SJMP WAIT
;发送未完等待
NEXT: INC R0 ;修改显示缓冲区指针
DJNZ R2,LD ;判3位显示完否,未完继续
RET
;字型码表(略)
TAB: … BCD码转换子程序HTB:
HTB: MOV A,BT0
;取二进制显示数据低8位
MOV B,#100 ;除100,确定百位数 DIV AB
MOV T100,A ;百位数送54H单元 MOV A,#10
XCH A, B
;除10,确定十位
DIV A,B
MOV T10,A ;十位数送55H单元 MOV T, B
;个位数送56H单元
MOV A,BT1 ;取二进制显示数据高8位 JNZ LH1 RET
;高位不为0转LH1继续高8位转换
;高位为0结束,返回
LH1: MOV A,#06H ;高位不为0,低位转换结果加256(因为温度数据不会大于500,所以高8位最多为01H,即256)
ADD A,T
DA A
;个位加6(十进制加) ;结果送回个位
29
MOV T,A
洛阳理工学院毕业设计(论文)
MOV A,#05H ADDC A,T10 DAA
;十位加5(十进制加)
MOV T10,A ;结果送回十位
MOV A, #02H ADDC A, T100 DA A MOV T100,A
三 温度检测模块
A/D转换采用查询方式。为提高数据采样的可靠性,对采样温度进行数字滤波。数字滤波的算法很多,这里采用4次采样取平均值的方法。如前所述,本系统A/D转换结果乘2正好是温度值,因此,4次采样的数字量之和除以2就是检测的当前温度。检测结果高位存入50H,低位存入51H。温度检测子程序流程图如图所示。
温度检测子程序TIN:
TIN: MOV TEMP1,#00H ;清检测温度缓冲区
MOV TEMP0,#00H
;取样次数送R2
;指向A/D转换器0通道
RET
;百位加2(十进制加) ;结果送回百位
MOV R2,#04H
MOV DPTR,#7FF8H
LTIN1: MOVX @DPTR,A HERE: JNB IE1,HERE
;启动转换 ;等待转换结束
MOVX A,@DPTR ;读转换结果
ADD A,TEMP0
;累加(双字节加法)
MOV TEMP0,A MOV A,#00H ADDC A,TEMP1 MOV TEMP1,A
DJNZ R2,LTIN1 ;4次采样完否,未完继续
CLR C ;累加结果除2(双字节除法)
30
洛阳理工学院毕业设计(论文)
MOV A,TEMP1
RRC MOV
A TEMP1,A
A清检测结果缓冲区采样次数4→R2NR2-1=0Y4次累加结果除2→检测结果缓冲区启动A/D转换N转换结束Y 返回累加采样结果 结果低8位→51H 高8位→50H A 图3-2 温度检测子程序流程图
MOV A,TEMP0
A
RRC
四 温度控制模块
MOV TEMP0,A RET
将当前温度与预置温度比较,当前温度小于预置温度时,继电器闭合,接通电阻丝加热;当前温度大于预置温度时,继电器断开,停止加热;当二者相等时电炉保持原来状态;当前温度降低到比预置温度低2℃时,再重新启动加热;当前温度超出报警上下限时将启动报警,并停止加热。由于电炉开始加热时,当前温度可能低于报警下限,为了防止误报,在未达到预置温度时,不允许报警,为此设置了报警允许标志F0。模块流程见下图。 温度控制子程序CONT:
31
洛阳理工学院毕业设计(论文)
NY达到过预置温度Y置允许报警标志当前温度<预置温 度-2Y开电炉N关电炉当前温度<预置温度N当前温度与预置温度比较 返回图3-3 温度控制流程图
CONT: MOV A,TEMP0 ;当前温度-预置温度(双字节减)
CLR C SUBB A,ST0 MOV B,A MOV A,TEMP1 SUBB A,ST1
JNC LOFF ;无借位,表示当前温度≥预
置温度,转LOFF
JNB F0,LON ;当前温度<预置温度,判是否达到过预置温度
MOV A,B;若达到过预置温度,判二者差值是否大于2 CLR C SUBB A,#02H
JNC ACC.7,LOFF ;差值不大于2,转LOFF
32
;低8位相减的差值暂存B
洛阳理工学院毕业设计(论文)
LON: CLR P1.7
SJMP
;开电炉
EXIT ;返回
;设置允许报警标志
;关电炉
LOFF: SETB F0
SETB P1.7
EXIT: RET
在此,也可加入PID算法程序来实现PID控制。
五 温度越限报警模块
报警上限温度值为预置温度+5℃,即当前温度上升到高于预置温度+5℃时报警,并停止加热;报警下限温度值为预置温度-5℃,即在当前温度下降到低于预置温度-5℃,且报警允许时报警,这是为了防止开始从较低温度加温时误报警。报警的同时也关闭电炉。图为报警子程序流程图。 报警子程序ALARM ALARM:
MOV A,TEMP0 ;当前温度低字节→A
C
CLR
SUBB A,ST0 ;(当前温度低字节-预置温度低字节)→A
MOV B, A ;低字节相减结果送B暂存
MOV A,TEMP1 ;当前温度高字节→A
SUBB A,ST1 ;(当前温度高字节-预置温度高字节)→A
JC LA0 ;有借位,当前温度小于预置温度转LA0
SETB F0 ;当前温度≥预置温度,允许报警 AJMP LA1
LA0: MOV A,ST0 ;预置温度低字节→A CLR C
SUBB A,TEMP0 ;(预置温度低字节-当前温度低字节)→A MOV B,A ;低字节相减结果送B暂存 MOV A,ST1 ;预置温度高字节→A
SUBB A,TEMP1 ;(预置温度高字节-当前温度高
字节)→A
33