多加热炉炉温检测课程设计报告.doc
《多加热炉炉温检测课程设计报告.doc》由会员分享,可在线阅读,更多相关《多加热炉炉温检测课程设计报告.doc(13页珍藏版)》请在冰点文库上搜索。
课题3多加热炉炉温检测系统设计
一.任务及要求:
1.加热炉的炉温可以在60℃~180℃之间任意调节;
2.系统每隔3秒钟检测一遍炉温(三个炉子);
3.利用六位七段码显示器实时显示加热炉的炉号和实际温度,显示值为十进制数值。
显示器的右三位显示加热炉的炉号,左三位显示实际值。
程序启动运行之后即开始循环显示,每次显示时间为3秒钟;
4.分别记录各加热炉的实际炉温数据,轮流显示。
每检测一次即保存一次,循环刷新;
5.对应各加热炉扩展功能按键。
功能键按下后不影响检测功能,仅影响显示功能。
具体要求如下:
⑴在循环显示方式下,按下某一功能键之后,七段码显示器即显示对应加热炉的炉号和实际温度。
如果此时按下另外功能键则不起作用,既不会改变当前显示。
只有再次按下同一个功能键之后才能使系统回到循环显示方式状态;
⑵在循环显示方式下,按下某一功能键之后,七段码显示器即显示对应加热炉的炉号和实际温度,如果此时按下另一个功能键,则会改变当前显示,即应显示与后一次按下的功能键对应的加热炉的炉号和炉温。
只有连续按下同一个功能键两次才能回到循环显示方式状态;
6.扩展发光二极管担任报警功能,当温度超过200℃即点亮发光二极管报警,并显示错误号“EF”,当温度低于50℃,点亮发光二极管报警,并显示错误号“E0”。
二.基本工作原理及说明
1.系统硬件连接参考“多加热炉炉温检测系统硬件参考图”。
⑴硬件部分为PD32实验系统或8051单片机实验系统。
包括0809、8253、8259、8255、数据存储器62256、七段码显示器及其驱动电路、按键和报警部分。
图中虚线为需要连接的连线;
⑵加热炉的实际温度用电压表示,由电位器给出。
模拟量电压经A/D转换器0809转换成数字量。
0809的输入通道选用IN0、IN1、IN2、IN3、…。
A/D采样结束后由EOC信号发出中断请求。
0809的译码地址为3C0H。
通道0~7分别为3C0H,3C4H,3C8H,3CCH,3D0H,3D4H,3D8H,3DCH。
A/D采样结束后由EOC信号发出中断请求;
⑶PD32实验系统中利用8253提供定时服务。
8253的译码地址控制口:
30CH,
计数器1:
300H,计数器2:
304H,计数器3:
308H;
8051单片机实验系统中利用单片机内部定时器提供定时;
⑷PD32实验系统中利用8259提供中断服务。
偶地址:
3A0H,奇地址:
3A8H;
8051单片机实验系统中利用单片机内部定时中断和外部中断为系统提供中断服务;
⑸PD32实验系统中利用74LS273驱动七段码显示器。
位地址:
360H,段地址:
340H;
8051单片机实验系统中利用驱动芯片驱动七段码显示器;
⑹PD32实验系统中利用74LS245驱动报警发光二极管。
地址:
340H;
8051单片机实验系统中利用P1口驱动报警发光二极管;
⑺数据存储器62256不需连接,地址范围08000H~0FFFFH;
⑻PD32实验系统中功能键连到8259的中断端;
8051单片机实验系统中功能键利用P1口和外部中断1实现中断检测;
⑼实际温度由电位器给出,可由外部调节。
电压范围0~5V;
2.检测系统应用软件主要包括:
⑴主程序;
⑵A/D转换中断服务子程序;
⑶定时器中断服务子程序;
⑷代码转换子程序;
⑸显示子程序;
⑹按键中断服务子程序;
3.程序流程图;
4.多加热炉炉温检测系统硬件图。
三、源程序
.486
DATASEGMENTAT0USE16
;8255各个端口的地址
PORTAEQU203H
PORTBEQU207H
PORTCEQU20BH
CONTROLPORTEQU20FH
;七段码地址
WEIEQU360H
DUANEQU340H
;8253各个端口地址
DS0EQU300H
DSIEQU304H
DS2EQU308H
DSCEQU30CH
;8259端口地址
OPORTEQU3A0H
JPORTEQU3A8H
;0809地址
ADPORTEQU3C0H
ADPORTIEQU3C4H
ADPORI2EQU3C8H
;中断向量
ZDIROEQU20H;定时器中断
ZDLR1EQU24H;AD中断
ZDIR2EQU28H;开笑1中断
ZDIR3EQU2CH;开关2中断
ZDIR4EQU30H;开关3中断
;定义数据缓冲区
ORG4000H
DATA4ADDB3DUP(?
);AD转换后的数据存储处
DATA4LEDDB18DUP(?
);十六进制列BCD的显爪数据存储处
DATAENDS
CODESEGMENTUSE16
ORG2000H
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
BEG:
CLI
JMPSTART
TABDB3FH,06H.5BH,4FH,66H,6DH,7DH.07H,7FH,67H,77H,7CI-L39H,5EH.79H,71H;段码表
;AD转换中断用
ADATANWDWDATA4AD
ADPTNWDW3C0H;通道口内存保留
;显示程序用
LEDNWDWDATA4LED
;定时中断用
TIMEDB150;设置计数值
;开关中断用
SWH1DB0FFH
SWH2DB0FFH
SWH3DB0FFH
START:
MOVAX,DATA
MOVDS,AX
MOVAX,0
MOVSS,AX
MOVSP,1000H
MOVAL,0C0H
MOVDX,WEI,
OUTDX,AL
INITA8259:
MOVAL,00010011B;ICWI;写入ICW1
MOVDX,OPORT
OUTDX,AL
MOVAL,00001000B;写入ICW2
MOVDX,JPORT
OUTDX,AL
MOVAL,00000001B;写入ICW4
MOVDX,JPORT
OUTDX,AL
MOVAL,11100000B;写入OCW1屏蔽字
MOVDX,JPORT
OUTDX,AL
MOVAL,20H;清ISR
MOVDX,OPORT
OUTDX.AL
INITLA8255:
MOVAL,10000000B;A、B、C口都工作于方式0,都为输出
MOVDX,CONTROLPORT
OUTDX,AL
MOVAL,0FFH
MOVDX,PORTA
OUTDX,AL
INITIA8253:
MOVDX,DSC
MOVAL,00110110B;方式3二进制计数
OUTDX,AL
MOVDX,DS0
MOVAL,60H;计数初值设为0EA60H/6000D
OUTDX,AL
MOVAL,0EAH
OUTDX,AL
;中断向量初始化
MOVDI,ZDIR0
MOVAX,OFFSETTIMER
STOSW
MOVAX,SEGTIMER
STOSW
MOVDI,ZDIRI
MOVAX,OFFSETADPROC
STOSW
MOVAX,SEGADPROC
STOSW
MOVDI,ZDIR2
MOVAX,OFFSETSWITCH1
STOSW
MOVAX,SEGSWITCH1
STOSW
MOVDI,ZDIR3
MOVAX,OFFSETSWITH2
STOSW
MOVAX,SEGSWITH2
STOSW
MOVDI,ZDIR4
MOVAX,OFFSETswitcb3
STOSW
MOVAX,SEGSWITCH3
STOSW
MOVDX,ADPORT;启动ADC
OUTDX.AL
;炉号初始化
MOVDX,4003H
MOVBYTEPTR[DI],0
INCDI
MOVBYTEPTR[DI],0
INCDI
MOVBYTEPTR[DI],1
ADDDI,4
MOVBYTEPTR[DI],0
INCDI
MOVBYTEPTR[DI],0
INCDI
MOVBYTEPTR[D1],2
ADDDL4
MOVBYTEPTR[DI],0
INCDI
MOVBYTEPTR[DI],0
INCDI
MOVBYTEPTR[DI],3
AGAIN:
STI
CALLCZBCD
CALLDISP
JMPAGAIN
;一一拆字十六进制转BCD码一一
CZBCDPROC
PUSHBx
PUSHCX
PUSHAX
LEASI,DATA4AD;AD转换后的数据存储处
LEADI,DATA4LED;十六进制到BCD的显示数据存储处
ADDDI,2
CZ0
MOVAL,[SI]
CMPAL,11H;与60比较
JBEST0
CMPAL,0DDH;与180比较
JAEST1
JMPCZ00
ST0:
MOVBYTEPTR[DI+1],0EH
MOVBYTEPTR[DI+2],00H
JMPCZ00
ST1:
MOVBYTEPTR[DI+1],0EH
MOVBYTEPTR[DI+2],0FH
JMPCZ00
CZ00:
MOVBX,1EH;转换为实际温度值
MULBX
MOVDL,51
DIVDL
ADDAX,50
MOVAH,00H
MOVBL,0AH
MOVCX,3
CZ1:
DIVBL
MOV[DI],AH
DECDI
MOVAH,00H
LOOPCZ1
ADDDI,9
INCSI
CMPSI,4002H:
AD转换后的数据存储处是否到头
JBECZ0
POPAX
POPCX
POPBX
RET
CZBCDENDP
DISPPROC
PUSHDX
PUSHCX
PUSHBX
PUSHAX
LEABX,TAB;段码表
MOVSI,LEDNW
MOVAH,0C1H
DISP1:
MOVDX,WEI
MOVAL,AH
OUTDX.AL;位输山
MOVDX,DUAN
MOVAL,[SI]
XLAT
OUTDX,AL;段输出
MOVCX,0200H
LOOP$
INCSI
SALAH.1
ORAH,0C0H
CMPAH,0C0H
JNZDISP1
POPAX
POPBX
POPCX
POPDX
RET
DISPENDP
:
一一AD采样程序一一
ADPROCPROC
PUSHAX
PUSHSI
PUSHDX
MOVDX,[ADPTNW];A/D通道0
CMPDX,3c8H;到第三号炉rr?
JBENEXT
MOV【ADPTNW],3COH;就置数据区7号炉端口
NEXT:
MOVSI,[ADATANW]
CMPSI,4002H
JBENEXT2
MOV[ADATANW),4000H
JMPCHU
NEXI2:
INAL,DX
MOV[SI],AL
ADD[ADPTNW],4
INC[ADATANW]
CMPAL,11H;是否在60和180之间
JBEBAOJIN
CMPAL,0DDH
JAEBAOJIN
JMPOK
CMPSI,4000H
JZOK
CMPSI,4001H
JZOK1
CMPSI,4002H
JZOK2
BAOJIN:
CMPSI,4000H
JZBAOJIN1
CMPSI,4001H
JZBAOJIN2
CMPSI,4002H
JZBAOJIN3
JMPCHUQU
BAOJINl:
MOVDX,203H:
报警1
MOVAX,0FEH
OUTDX,AL
JMPCHUQU
BAOJIN2:
MOVDX,207H:
报警2
MOVAX,0FDH
OUTDX,AL
JMPCHUQU
BAOJIN3:
MOVDXT,20BH;报警3
MOVAX,OFCH
OUTDX,AL
JMPCHUQU
OK:
MOVDX,203H;解除报警
MOVAX,0FFH
OUTDX,AL
OK1:
MOVDX,207H
OUTDX,AL
OK2:
MOVDX,20BH
OUTDX,AL
CHUQU:
MOVDX,[ADPTNW];启动ADC
OUTDX,AL
CHU:
MOVAL,20H
MOVDX,OPORT
OUTDX,AL
POPDX
POPSI
POPAX
IRET
ADPROCENDP
:
一一定时器中断
TIMERPROC
PUSHAX
PUSHDX
MOVAL,[TIME]
DECAL
MOV[TIME],AL
CMPAL,0;是否到0
JNZEND0
CMP[SWH1,0:
判断是否有按键按下
JZENDD
CMP[STWH2],0
JZENDDCMP[SWH3],0
JZENDD
MOVAX,[LEDNW];
CMPAX,400FH;
JAEDALE;
ADDAX,6;
MOV[LEDNW],AX;
JMPENDD;
DALE:
MOV[LEDNW],4003H;改变显示参数
ENDD:
MOVDX,ADPORT;到了开A/D
OUTDX,AL;
MOV[TIME],150;
END0:
MOVAL,20H
MOVDX,OPORT
OUTDX,AL
POPDX
POPAX
IRET
TIMERENDP
:
一——开关l的中断———一
SWITCH1PROC
NOTSWHI
CMPSWHI,O
JNZBACK1
MOV[LEDNW],4003H;第1次按T'
BACK1:
MOVAL,20H
MOVDX,OPORT
OUTDX,AL
STI
IRET
SWITCH1ENDP
:
——一一开关2的中断——
SWITH2PROC
NOTSTWH2
CMPSTWH2,0
JNZBACK2
MOV[LEDNW],4009H;是第1次按下
BACK2:
MOVAL,20H
MOVDX,OPORT
OUTDX,AL
STI
IRET
SWITH2ENDP
:
一一·一开关3的中断——一一
SWITCH3PROC
NOTSWH3
CMPSWH3,0
JNZBACK3
MOV[LEDNW],400FH;是第1次按下
BACK3:
MOVAL,20H
MOVDX,OPORT
OUTDX,AL
STI
IRET
SWITCH3ENDP
CODEENDS
ENDBEG
四、程序流程图
N
N
N
N
N
N
N
Y
Y
Y
Y
Y
Y
Y
是否不小于DDH
报警3
报警2
采样通道号加1
温度否不大于11H
不报警
采样通道号是否大于3
SI=4000H?
SI=4001H?
SI=4002H?
置1号炉
读A/D采样数据
中断返回
启动A/D
显示
是否到三号炉?
拆字
开中断
预置Tk值
预置采样通道号0
程序初始化
清数据区
主程序A/D转换中断服务子程序
报警1
定时器中断服务子程序
N
定时时间到(TK-1=0)?
拆字子程序
LED地址加2
Y
换炉显示
Y
温度≤11H(60)
输出报错号E0
N
Y
≥DDH(180)
输出报错号EF
启动A/D
N
转换为实际温度(乘30除51加50)
N
Y
Y
N
N
Y
显示子程序
结束
AH=3C0H?
AH左移
SI加1
延时
段输出
位输出
取段码表
SI+1≤4002?
?
RET
CX=0?
CX-1
除以10取余
CX=3
中断返回
重置TK值
五、硬件连接图
0V
+5V
D0~D7
A2
A3
A4
IN2
IN1
IN0
0~5V
0809
START
ALE
IN0
IN1
OE
IN2
CLK
EOC
ADDA
ADDB
ADDC
D0~D7
EOC
74LS02
CLOCK
CS-4CS-4
报警1
报警2
+5V
按键1
GND
470W+5V
IOR
+5VSP/1
RST
A0
A1
IOW
IOR
CSCS7
CS1CS
A3
IORIOW
IRQ1
8255
RESET
A0PA0
A1
WRRDPB1
CSPC2
RD
WR INT
IRQ1 CS
IRQ2 INTA
IRQ3
IRQ4D0~
D7
SP/EN
A0
8253
Q_1
Q_2
Q_0
按键2
按键3
INT1INTR
INTA
D0~D7
CS-1CS6
P_1
P_0
3MHz
+5VIRQ0
A2
A3
报警3
CS3CS2
VCC
74LS273
74LS273
CLRQ0
Q1
Q2
Q3
Q4
Q5
CLKQ6
Q7
Q0
CLKQ1
Q2
Q3
Q4
Q5
Q6
CLRQ7
CS4CS1
IOW
位码驱动
段码驱动
abcdefgdp
VCC
多加热炉炉温检测硬件连接图
+5V
D0~D7
1
4
2
3
6
5
IOW
IOR
IOW
8259
CSCLK0
D0GATE0
~OUT0
D7
RD A0
WR A1