微机课程设计---多加热炉炉温检测系统设计

该博客介绍了微机课程设计的一个项目——多加热炉炉温检测系统。系统使用单片机进行控制,能每5秒检测并显示3路加热炉的实际与给定温度,当温度差超过50℃时触发报警。内容涵盖硬件接线、软件设计,包括主程序、中断服务子程序、A/D转换等,并详细说明了各个功能的实现和要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一.任务及要求:

二.基本接线及说明(参考)

1.实验选用芯片及其要求细则

2.检测系统应用软件主要包括:

3.多加热炉炉温检测系统硬件接线参考

三.实验代码

1.数据段内容

2.程序初始化部分

 3.主程序(主循环)

3.1拆字子程序

3.2显示子程序

 3.3报警子程序

4.定时中断服务子程序

5.A/D转换中断服务子程序

6.各通道对应的按键中断子程序

7.确定按键中断子程序


 

一.任务及要求:

1.加热炉的炉温可以在0~430℃之间任意调节;

2.系统每隔5秒检测一遍炉温;(3路)

3.利用六位七段码显示器实时显示加热炉的给定和实际温度,显示值为十进制数值。显示器的左三位显示加热炉的实际值,右三位显示给定值。每路显示时间为 5秒。

4.分别记录各加热炉的实际炉温数据,每一加热炉的数据保存256字节。每检测一次即保存一次,循环刷新;

5.对应各加热炉扩展功能按键。功能键按下后不影响检测功能,仅影响显示功能。具体要求如下:

       在循环显示方式下,按下某一功能键之后,七段码显示器即显示对应加热炉的给定温度和实际温度,如果此时按下另一个功能键,则会改变当前显示,即应显示与后一次按下的功能键对应的加热炉的给定温度和实际温度。只有连续按下同一个功能键两次才能回到循环显示方式状态;

6.扩展发光二极管担任报警功能,当实际值温度与给定值温度相差大于50℃即点亮发光二极管报警。

7.给定值由外部拨码输入确定,3路的给定温度不同。

 

二.基本接线及说明(参考)

1.实验选用芯片及其要求细则

⑴硬件部分为实验系统。包括0809、8253、8259、8255、七段码显示器及其驱动电路、按键和报警部分。图中虚线为需要连接的连线;

⑵实际温度由电位器给出,可由外部电位器调节。电压范围0~5V;

⑶实验系统中利用8253提供定时服务。8253的译码片选接译码地址360H,选用计数器1。

⑷实验系统中利用8259提供中断服务。8259片选接译码地址3A0H;

⑸实验系统中利用8255驱动报警发光二极管。

命令口地址:20FH;A口地址:203H;B口地址:207H; C口地址:20CH

A,B 口作输出,C口作输入。

⑹加热炉的实际温度用模拟电压表示。0809的输入通道选用IN4,IN5,IN6。

0809的译码地址为320H。

(7)七段码显示,位码输出接8255 B口,段码地址接译码地址340h

2.检测系统应用软件主要包括:

⑴主程序;

(2)定时器中断服务子程序;

(3) A/D转换中断服务子程序;

⑷代码转换子程序;

⑸显示子程序;

⑹按键中断服务子程序;

(7)报警子程序

3.多加热炉炉温检测系统硬件接线参考

图中虚线为实际接线部分

26df33ba45b84187ad56a316e030ed91.png


三.实验代码

1.数据段内容

.486
DATA SEGMENT AT 0 USE16  ;.486是由于实验室设备要求

ZDXL EQU 20H        ;中断向量
OPORT EQU 3A0H   ;中断向量偶地址
JPORT EQU 3A8H    ;中断向量奇地址

LED EQU 340H      ;七段译码管段选地址
;8255
PORTB EQU 207H    ;B口作为位选地址
PORTA EQU 203H     ;A口输出给led灯
CONTROL EQU 20FH
PORTC EQU 20BH    ;c口作为输入,输入给定值

;0809
ADPORT4 EQU 330H    ;通道4
ADPORT5 EQU 334H    ;通道5
ADPORT6 EQU 338H    ;通道6

;8253
DS1 EQU 364H    ;计数器1
DSC EQU 36CH

ORG 4000H
DATA1 DB 18 DUP(?)        ;显示缓存区
ORG 4040H
DATA2 DB 6 DUP(?)          ;拆字
ORG 4060H
DATA3 DB 6 DUP(?)           ;缓存

DATA ENDS 

2.程序初始化部分

CODE SEGMENT USE16
     ASSUME CS:CODE,DS:DATA,ES:DATA

     ORG 2000H
BEG: CLI
     JMP START

TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
    DB 7FH,67H,77H,7CH,39H,5EH,79H,71H    ;段码表
TIMER DB 0                ;计数器
LEDNW DW 4000H            ;拆字完后的显示地址                
LOCK1 DB 0FFH             ;按键
LOCK2 DB 0FFH                  
LOCK3 DB 0FFH
LEDDATA DB 00H            ;锁存报警信号
LUZI   DB 01H             ;报警灯变量
DENG DB 0FEH              ;报警灯变量   
DATA2X DW 4040H           ;指向data2首地址
ADPORT4X DW 330H          ;指向通道4地址

START:
         MOV AX,DATA    ;初始化
         MOV DS,AX
         MOV ES,AX
         MOV AX,0
         MOV SS,AX
INIT8255:
	MOV AL,89H            ;8255初始化
	MOV DX,CONTROL
	OUT DX,AL
	MOV AL,00H
	MOV DX,PORTB
	OUT DX,AL

INIT8253:
         MOV DX,DSC        ;8253初始化
         MOV AL,01110110B
         OUT DX,AL
         MOV DX,DS1
         MOV AX,60000     ;计数初值,3M hz变为50 hz(即0.02s)
         OUT DX,AL
         MOV AL,AH
         OUT DX,AL 

SETVECT:
        MOV DI,0        ;中断向量初始化
        MOV DX,OFFSET SERVER
        MOV ZDXL[DI],DX
        MOV DX,CS
        MOV ZDXL[DI+2],DX

;AD中断1
INTADC4:
	MOV DI,4
        MOV DX,OFFSET ADC4
        MOV ZDXL[DI],DX
        MOV DX,CS
        MOV ZDXL[DI+2],DX  
;中断2
INT2:
	MOV DI,8
        MOV DX,OFFSET KEY1
        MOV ZDXL[DI],DX
        MOV DX,CS
        MOV ZDXL[DI+2],DX 
;中断3
INT3:
	MOV DI,12
        MOV DX,OFFSET KEY2
        MOV ZDXL[DI],DX
        MOV DX,CS
        MOV ZDXL[DI+2],DX  
;中断4
INT4:
	MOV DI,16
        MOV DX,OFFSET KEY3
        MOV ZDXL[DI],DX
        MOV DX,CS
        MOV ZDXL[DI+2],DX   
;中断5
INT5:
	MOV DI,20
        MOV DX,OFFSET KEY4
        MOV ZDXL[DI],DX
        MOV DX,CS
        MOV ZDXL[DI+2],DX  
INIT8259:
        MOV  AL,00010011B	;icw1
        MOV  DX,OPORT
        OUT  DX,AL
        MOV  AL,00001000B	;icw2
        MOV  DX,JPORT
        OUT  DX,AL
        MOV  AL,00000001B	;icw4
        MOV  DX,JPORT
        OUT  DX,AL
        MOV  AL,11000000B   ;ocw1
        MOV  DX,JPORT  
        OUT  DX,AL
        MOV  AL,20H
        MOV  DX,OPORT
        OUT  DX,AL

 3.主程序(主循环)

;---主程序-------------------------------------------------
AGAIN:
        STI           ;开中断
        CALL CZ       ;调拆字
        CALL DISP	  ;调显示
        CALL WARN1    ;调报警
        JMP AGAIN     ;循环

3.1拆字子程序

;---拆字
CZ PROC
    PUSH CX
	PUSH BX
	PUSH AX
	PUSH SI
	PUSH DI
    LEA SI,DATA2
    LEA DI,DATA1
CZ0:    
	MOV CX,6
CZ1:
	MOV AX,0
	MOV AL,[SI]
	MOV BX,56H
	MUL BX
	MOV BX,33H
	DIV BX                   ;00H-FFH 转换 0到430       
                  
    MOV DL,64H
	DIV DL
	MOV [DI],AL       ;存百位
	MOV AL,AH         ;存余数
	MOV AH,0H
	MOV DL,0AH
	DIV DL
	MOV [DI+1],AL    ;存十位
	MOV [DI+2],AH    ;存个位
	INC SI
	ADD DI,3
	LOOP CZ1

	POP DI
	POP SI
	POP AX
	POP BX
    POP CX
       RET
CZ ENDP

3.2显示子程序

;-----显示
DISP PROC
        PUSH CX
	    PUSH BX
	    PUSH AX
	    PUSH SI
        LEA BX,TAB       ;段码表
        MOV SI,[LEDNW]
        MOV AH,01H
DISP1:
        MOV DX,PORTB    ;位码启动
        MOV AL,AH
        OUT DX,AL
        MOV DX,LED      ;段码输出 
        MOV AL,[SI]
        XLAT            ;换码
        OUT DX,AL
        MOV CX,0200H
        LOOP $          ;延时,使显示稳定不闪烁
        INC SI
        SAL AH,1
        CMP AH,40H      ; 显示6位
        JNZ DISP1
	    POP SI
	    POP AX
	    POP BX
        POP CX
        RET
DISP ENDP

 3.3报警子程序

;;;;;;;;;;;;;;;;;;;;LED报警子程序;
WARN1 PROC 
    PUSH SI
    PUSH DI
    PUSH AX
    PUSH BX  
    LEA DI,LEDDATA      ;读LED状态
    MOV AL,[DI]
    MOV CX,3      
    LEA SI,DATA2   
     
DENGDENG:
    MOV BH,[SI]	    ;读炉子的实际值
    MOV BL,[SI+1]	;读炉子的给定值
    SUB BL,30
    CMP BH,BL           ;低于50         
    JL  LEDLOWUP
    ADD BL,60	                    
    CMP BH,BL           ;高于50
    JG  LEDLOWUP

    MOV DX,PORTA     	;正常情况,不亮灯
    OR AL,LUZI    	    ;当前炉子温度正常,保留另外两炉子的状态,清零当前炉子的状态(灭灯)
    OUT DX,AL 
    JMP HUI
                         ;炉子低温高温亮灯
LEDLOWUP:
    MOV DX,PORTA        ;报警,亮灯
    OR AL,LUZI      	;保留另外两个炉子报警灯的状态,清零当前炉子的状态
    AND AL,DENG         ;更改当前炉子的状态
    OUT DX,AL  
    
HUI:
    ADD SI,2            ;检测下一个炉子
    ROL LUZI,1          ;更改报警灯
    ROL DENG,1          ;更改报警灯
   LOOP DENGDENG
   MOV BYTE PTR [LUZI],01H    ;重置
   MOV BYTE PTR [DENG],0FEH   ;重置

END4:    
    POP BX
    POP AX
    POP DI
    POP SI
    RET
WARN1 ENDP    

4.定时中断服务子程序

;-------定时中断
SERVER PROC
       CLI
       PUSH AX
       PUSH DX
       PUSH SI
       LEA SI,TIMER
       MOV AL,[SI]
       INC AL
       CMP AL,250                     ;调试时改为50(即1s),方便调试
       JAE  ADC4START
       MOV [SI],AL
       JMP EXIT
ADC4START:
	MOV DX,ADPORT4                 ;启动ad
	OUT DX,AL
   	MOV BYTE PTR [SI],00H          ;清空计数值
LEDDANCE:
	CMP LOCK1,0
	JZ EXIT
	CMP LOCK2,0
	JZ EXIT
	CMP LOCK3,0
	JZ EXIT                ;若按键按下,则跳出循环
	LEA SI,LEDNW           ;循环部分
	MOV AX,[SI]
	CMP AX,400CH            
	JAE EXMT
	ADD AX,6
	MOV [SI],AX
	JMP EXIT
	
EXMT:	
	MOV AX,4000H
	MOV [SI],AX	 
EXIT:
      MOV AL,20H
      MOV DX,OPORT
      OUT DX,AL 
      POP SI
      POP DX
      POP AX
      IRET                ;中断返回
SERVER  ENDP

5.A/D转换中断服务子程序

ADC4 PROC
	CLI
       PUSH AX
       PUSH DX
       PUSH SI	
       
    MOV DI,[DATA2X]     
    MOV DX,[ADPORT4X]
    IN AL,DX             ;读取ad转换结束的值
    MOV [DI],AL          ;存数据
    CMP DX,338H
    JAE ADCADC

    ADD [ADPORT4X],4
    MOV DX,[ADPORT4X]
    OUT DX,AL            ;启动ad
    ADD [DATA2X],2
    JMP ENDD

ADCADC:
	MOV [ADPORT4X],330H    ;重置
	MOV [DATA2X],4040H     ;重置
ENDD:
	MOV AL,20H
	MOV DX,OPORT
	OUT DX,AL
      POP SI
      POP DX
      POP AX
      IRET
ADC4 ENDP

6.各通道对应的按键中断子程序

KEY1 PROC            ;按键1对应通道4
	CLI
       PUSH AX
       PUSH DX
       PUSH SI
	
	NOT LOCK1           ;屏蔽循环
	MOV LOCK2,0FFH  
	MOV LOCK3,0FFH

	MOV [LEDNW],4000H
	MOV DX,PORTC
	IN AL,DX             ;读取拨码的给定值
	LEA SI,DATA3+1	    
	MOV  [SI],AL	    ;存入缓存区
ENDKEY1:
	MOV AL,20H
	MOV DX,OPORT
	OUT DX,AL
      POP SI
      POP DX
      POP AX
      IRET
KEY1 ENDP

KEY2 PROC                ;按键2对应通道5
	CLI
       PUSH AX
       PUSH DX
       PUSH SI
	
	NOT LOCK2            ;屏蔽循环
	MOV LOCK1,0FFH
	MOV LOCK3,0FFH

	MOV [LEDNW],4006H
	MOV DX,PORTC    
	IN AL,DX             ;读取拨码的给定值
	LEA SI,DATA3+3	    
	MOV  [SI],AL	    ;存入缓存区
ENDKEY2:
	MOV AL,20H
	MOV DX,OPORT
	OUT DX,AL
      POP SI
      POP DX
      POP AX
      IRET
KEY2 ENDP

KEY3 PROC                ;按键3对应通道6
	CLI
       PUSH AX
       PUSH DX
       PUSH SI
	
	NOT LOCK3            ;屏蔽循环
	MOV LOCK1,0FFH
	MOV LOCK2,0FFH

	MOV [LEDNW],400CH
	MOV DX,PORTC
	IN AL,DX            ;读取拨码的给定值
	LEA SI,DATA3+5	
	MOV  [SI],AL	    ;存入缓存区
ENDKEY3:
	MOV AL,20H
	MOV DX,OPORT
	OUT DX,AL
      POP SI
      POP DX
      POP AX
      IRET
KEY3 ENDP

7.确定按键中断子程序

KEY4 PROC
	CLI
       PUSH AX
       PUSH SI
       PUSH DI
       PUSH CX  
        MOV CX,3
	LEA SI,DATA3+1    ;缓存区
	LEA DI,DATA2+1    ;拆字区
KEY:	
    MOV AL,[SI]
	MOV  [DI],AL
	ADD SI,2
	ADD DI,2
	LOOP KEY

	MOV AL,20H
	MOV DX,OPORT
	OUT DX,AL
      POP CX
      POP DI
      POP SI
      POP AX
      IRET
KEY4 ENDP
CODE  ENDS
     END BEG

 注意:

1.子程序可以不压栈(PUSH,POP),但中断子程序必须压栈,否则可能会出现数据丢失,导致无法达到对应的功能。

2.程序中部分注释的分号是中文,报错就把对应行的分号改成英文或者把注释删除。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值