基于8086处理器采用汇编语言实现电阻炉温度控制,包含实时温度显示、温度给定值修改、数字PID算法自动控制
时间: 2023-12-24 16:05:07 浏览: 87
基于数字PID的电阻炉温度控制.doc
以下是一个基于8086处理器采用汇编语言实现电阻炉温度控制的代码,包含实时温度显示、温度给定值修改和数字PID算法自动控制。
```assembly
.486
.model small
.stack 100h
; 定义IO口
heater equ 0000h ; 加热器控制端口
k1 equ 0001h ; 键盘按键1端口
k2 equ 0002h ; 键盘按键2端口
k3 equ 0003h ; 键盘按键3端口
k4 equ 0004h ; 键盘按键4端口
led1 equ 0005h ; LED1端口
led2 equ 0006h ; LED2端口
temp_sensor equ 0007h ; 温度传感器端口
; 定义变量
current_temp dw ? ; 当前温度
target_temp dw ? ; 目标温度
kp dw ? ; PID算法参数
ki dw ?
kd dw ?
err dw ? ; PID算法中的误差、上一次误差、积分项和微分项
err_last dw ?
integral dw ?
derivative dw ?
; 读取温度函数
read_temp proc near
mov ax, temp_sensor ; 读取温度传感器温度
in al, ax
mov current_temp, ax
ret
read_temp endp
; 显示函数
display proc near
mov ax, current_temp
call display_2digit ; 显示当前温度
ret
display endp
; PID算法函数
pid_control proc near
mov ax, target_temp
sub ax, current_temp ; 当前误差
mov err, ax
add integral, ax ; 积分项
mov ax, integral
cmp ax, 1000h ; 积分项限幅
jg integral_max
cmp ax, -1000h
jl integral_min
jmp pid_derivative
integral_max:
mov integral, 1000h
jmp pid_derivative
integral_min:
mov integral, -1000h
pid_derivative:
mov ax, err
sub ax, err_last ; 微分项
mov err_last, err ; 保存上一次误差
mov derivative, ax
mov ax, kp
imul err
mov bx, ki
imul integral
add ax, bx
mov bx, kd
imul derivative
add ax, bx
mov output, ax ; PID控制输出
cmp output, 1000h ; 输出限幅
jg output_max
cmp output, 0000h
jge output_min
mov output, 0000h
jmp pid_control_end
output_max:
mov output, 1000h
output_min:
mov ax, current_temp
cmp output, ax
jg pid_control_heat
mov heater, 0 ; 根据控制输出控制加热器
jmp pid_control_end
pid_control_heat:
mov heater, 1
pid_control_end:
ret
pid_control endp
; 主函数
main proc near
mov ax, @data
mov ds, ax ; 初始化数据段寄存器
; 初始化代码
loop:
call read_temp ; 读取当前温度
call display ; 显示当前温度
; 处理键盘输入,修改目标温度和PID算法参数
mov ah, 1 ; 检查键盘是否有按键
int 21h
cmp al, 0FFh ; 如果有按键
je loop
cmp al, '1'
je k1_pressed
cmp al, '2'
je k2_pressed
cmp al, '3'
je k3_pressed
cmp al, '4'
je k4_pressed
jmp loop
k1_pressed:
add target_temp, 5
jmp loop
k2_pressed:
sub target_temp, 5
jmp loop
k3_pressed:
add kp, 1
jmp loop
k4_pressed:
sub kp, 1
jmp loop
main endp
; 显示2位数字函数
display_2digit proc near
push bx
push cx
push dx
mov bx, 10
xor cx, cx
div bx
add ax, '0'
mov dl, al
mov ah, 02h
int 21h
mov al, cl
add al, '0'
mov dl, al
mov ah, 02h
int 21h
pop dx
pop cx
pop bx
ret
display_2digit endp
end main
```
这个代码实现了温度传感器的读取、PID算法控制、键盘输入的处理和数字显示等功能。具体实现还需要根据具体硬件平台和软件环境进行调整。
阅读全文