DATAS SEGMENT use16
__Show_End_ DB 13,10,13,10,13,10,13,10,13,10,13,10,'Mission Accomplished',13,10,'$'
;;;;;;;;;;;;;;
;;显示
;;;;;;;;;;;;;;
;ID参数显示段
__Show_ DB 'P: '
P_Para DB '00000'
DB 13,10,'I: '
I_Para DB '00000'
DB 13,10,'D: '
D_Para DB '00000'
DB 13,10,13,10
DB 'Give Speed: '
Num_Give_speed DB '10000'
DB 13,10
DB 'Current Speed: '
Num_Cur_speed DB '10000'
DB 13,10,'$'
;;;;;;;;;;;;;;
;;PID
;;;;;;;;;;;;;;
;三次数值
in_e_0 DW 0 ; 偏差输入
in_e_1 DW 0
in_e_2 DW 0
;PID系数
KP DB 5 ; 比例
KI DB 5 ; 积分
KD DB 5 ; 微分
;归一化参数
A0 DB 0 ;
A1 DB 0 ;
A2 DB 0 ;
;最后一次数值
Last_Var DW 0 ; 正负判断最高位
push dx
mov dx,0
mov bx,10000
; 压入实参
push ax
div bx
; 得出万位
pop bx ; 弹出原始数据
push ax ; 压入万位
mov dx,10000
mul dx
; 得出X0000
sub bx,ax ; 除去万位
push bx ; 压入0XXXX
mov ax,bx ; 置入0XXXX
mov bx,1000
div bx
pop bx ; 弹出数据
push ax ; 压入千位
mov dx,1000
mul dx
sub bx,ax ; 除去千位
push bx ; 压入XXX
mov ax,bx
mov bx,100
div bx
pop bx ; 弹出数据
push ax ; 压入百位
mov dx,100
mul dx
sub bx,ax ; 得出数据 0XX
mov ax,bx
mov dl,10
div dl
push ax
and ax,00FFH ; 保留十位
pop bx ; 弹出数据
push ax ; 压入十位
and bx,0FF00H
mov al,bh
push ax ; 压入个位
;此处需要弹出五位
pop ax
mov cl,al
pop ax
mov ch,al
pop ax
mov dl,al
pop ax
mov dh,al
pop ax
;; 万 千 百 十 壹
;; al dh dl ch cl
pop bx
mov si,0
cmp al,0
jne __five_dec_savseg_wan_
cmp dh,0
jne __five_dec_savseg_qian_
cmp dl,0
jne __five_dec_savseg_bai_
cmp ch,0
jne __five_dec_savseg_shi_
;cmp cl,0
jmp __five_dec_savseg_yi_
__five_dec_show_null_:
mov al,32
mov DS:[bx],al
add si,1
add bx,1
jmp __five_dec_judge_null_
__five_dec_show_end_:
pop si
pop ax
pop bx
pop cx
pop dx
ret
__five_dec_savseg_ endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;功能函数段:ByteR显示:数显范围 0 ~ 255
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;传入寄存器为AX,要求必须小于Byte
;;传出寄存器为AX,传出数据为原始数据,其余寄存器不变
;;要求:必须>100,或者是若<100,则0XX(以后更新)
__ByteR_show_ PROC near
push bx
mov bx,0
push ax
push ax ; 压入原始数据
mov bl,100
div bl
; al 为 百位数
pop bx ; 弹出原始数据
and ax,00FFH
push ax ; 压入百位数
mov bh,100
mul bh
sub bl,al ; 得出2位十进制数据 => bl
mov al,bl
mov bl,10
div bl
pop bx ; 弹出百位数
mov bh,al ; 十位数压入 bh
mov al,bl ; 百位数
call __show_Dec_
mov al,bh
call __show_Dec_
mov al,ah
call __show_Dec_
pop ax
pop bx
RET
__ByteR_show_ ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;功能函数段:显示0 ~ 9
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;传入寄存器为al
__show_Dec_ PROC near
push dx
ADD AL,30H
PUSH BX
PUSH AX
mov dl,al
MOV AH,02H
int 21H
POP AX
POP BX
pop dx
RET
__show_Dec_ ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;功能函数段:显示0 ~ F
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;传入寄存器为al
;;传出数据保证不变
__show_Bin_ PROC near
push dx
push ax
push bx
and al,0FH
cmp al,10
jnb __show_Bin_change_AF
add al,'0'
jmp __show_Bin_show
__show_Bin_change_AF:
sub al,10
add al,'A'
__show_Bin_show:
mov ah,02H
mov dl,al
int 21H
pop bx
pop ax
pop dx
RET
__show_Bin_ ENDP