📄 kr.asm
字号:
AOOL1:
MOV A,BCPCHL
MOV SCPCHL,A
MOV A,BCPCHH
MOV SCPCHH,A
JB BLPCFH,MLLP1 ;将本次偏差数值与符号赋给上次保存地址
CLR SCBLPCFH
JMP MLLP2
MLLP1:
SETB SCBLPCFH
MLLP2:
MOV R2,BCPCHH
MOV R3,BCPCHL
MOV R4,#0 ;求kp*e(t)
MOV R5,#0
MOV R6,#0
MOV R7,BLXS
CALL MULD
MOV BLCSL,R5 ;结果送到比例常数存储
MOV BLCSH,R4
MOV R3,PCWFL
MOV R2,PCWFH
MOV R4,#0
MOV R5,#0
MOV R6,#0
MOV R7,WFXS
CALL MULD ;求kd*(e(t)-e(t-1))
MOV WFCSL,R5
MOV WFCSH,R4 ;结果送到微分常数存储
JB BLPCFH,FOOL2 ;比例相为负,不计算结果,直接赋pouth=#00 poutl=#200,退出中断
JB WFPCFH,AOOL2 ;微分项为负转走
CLR C
MOV A,BLCSL
ADD A,WFCSL ;KP>0,KD>0
MOV ZSJCSL,A ;将结果存入总时间常数中 kp*e(t)+kd*(e(t)-e(t-1))
MOV A,BLCSH
ADDC A,WFCSH
MOV ZSJCSH,A
AOOL4:
CLR C
MOV A,ZSJCSL
SUBB A,#0D0H
MOV A,ZSJCSH
SUBB A,#07H
;为什么是小于2000而不是200呢,因为进行偏差计算时时带一位小数的扩大了10倍
JC AOOL3 ;有借位,说明总时间常数《2000h,数据没有溢出继续
MOV ZSJCSL,#0D0H
MOV ZSJCSH,#07H ;无借位说明总时间常数>2000h,数据溢出赋最大值2000h继续
JMP AOOL3
FOOL2:
MOV ZSJCSL,#0 ;比例项小于微分项不加热
MOV ZSJCSH,#0
JMP AOOL3
AOOL2:
CLR C
MOV A,BLCSL
SUBB A,WFCSL ;KP>0,KD<0
MOV ZSJCSL,A ;将结果存入总时间常数中 kp*e(t)-kd*(e(t)-e(t-1))
MOV A,BLCSH
SUBB A,WFCSH
MOV ZSJCSH,A
JNC AOOL4 ;KP>KD
MOV ZSJCSL,#0 ;比例项小于微分项不加热
MOV ZSJCSH,#0
JMP AOOL3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下程序的4舍5入是为了增加精度,否则总时间常数可以直接除以10得POUTH值;;;;;;;;
AOOL3: MOV R6,ZSJCSH
MOV R7,ZSJCSL ;总数据常数里面存的是16进制数
MOV R3,#0
MOV R4,#0
MOV R5,#0
CALL HB2 ;换算成bcd码出口在r3,r4,r5中
MOV A,R5
ANL A,#0FH ;取小数位
CLR C
SUBB A,#5
JC PPPOOP1 ;小数位<5,转走
MOV A,R5
ANL A,#0F0H
SWAP A
INC A
PPPOOP2:
MOV R5,A ;小数位>5,个位数加1实现四舍五入
MOV A,R4
ANL A,#0FH
SWAP A
ADD A,R5
MOV R3,A
MOV A,R4
ANL A,#0F0H
SWAP A
MOV R2,A
CALL BH2
MOV POUTH,R3
MOV A,#200
SUBB A,R3
MOV POUTL,A
RET
PPPOOP1: MOV A,R5
ANL A,#0F0H
SWAP A
JMP PPPOOP2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示画面程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HM1:
call fengmingqi
MOV DPTR,#HM1SJ ;赋数据地址
MOV FSGESHU,#00H
MOV A,FSGESHU
HM11: MOVC A,@A+DPTR
CALL FSA
INC FSGESHU
MOV A,FSGESHU
CJNE A,#0ffH,HM11 ;共发送255个数
CLR HM2BZ
CLR HM3BZ
CLR HM4BZ
CLR HM5BZ
SETB HM1BZ
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;画面2显示程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HM2:
call fengmingqi
MOV DPTR,#HM2SJ ;赋数据地址
MOV FSGESHU,#00H
MOV A,FSGESHU
HM21: MOVC A,@A+DPTR
CALL FSA
INC FSGESHU
MOV A,FSGESHU
CJNE A,#0c9H,HM21 ;共发送201个数
CLR HM1BZ
CLR HM3BZ
CLR HM4BZ
CLR HM5BZ
SETB HM2BZ
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;画面3显示程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HM3:
call fengmingqi
MOV DPTR,#HM3SJ ;赋数据地址
MOV FSGESHU,#00H
MOV A,FSGESHU
HM31: MOVC A,@A+DPTR
CALL FSA
INC FSGESHU
MOV A,FSGESHU
CJNE A,#0f1H,HM31 ;共发送235个数
MOV DPTR,#L3K
MOV FSGESHU,#0
MOV A,FSGESHU
HM32: MOVC A,@A+DPTR
CALL FSA
INC FSGESHU
MOV A,FSGESHU
CJNE A,#30H,HM32
CLR HM1BZ
CLR HM2BZ
CLR HM4BZ
CLR HM5BZ
SETB HM3BZ
mov zhuanhuancishu,#00h
call jbgssaaa
call bjdjhoutui
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;画面4显示程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HM4:
call fengmingqi
call ys500ms
MOV DPTR,#HM4SJ ;赋数据地址
MOV FSGESHU,#00H
MOV A,FSGESHU
HM41: MOVC A,@A+DPTR
CALL FSA
INC FSGESHU
MOV A,FSGESHU
CJNE A,#241,HM41 ;共发送241个数
MOV DPTR,#H4YPH3
MOV FSGESHU,#0
MOV A,FSGESHU
HM42: MOVC A,@A+DPTR
CALL FSA
INC FSGESHU
MOV A,FSGESHU
CJNE A,#244,HM42 ;;;239
MOV DPTR,#H4FHJ
MOV FSGESHU,#0
MOV A,FSGESHU
HM43: MOVC A,@A+DPTR
CALL FSA
INC FSGESHU
MOV A,FSGESHU
CJNE A,#26,HM43 ;;;239
CLR HM1BZ
CLR HM2BZ
CLR HM3BZ
CLR HM5BZ
SETB HM4BZ
clr dadaowdbz
call jbgssaaa
call bjdjhoutui
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;画面5显示程序;;;;;;;;;;;;;;;;;;;;;;;;;;;
HM5: call fengmingqi
call readdzj
MOV DPTR,#HM5SJ ;赋数据地址
MOV FSGESHU,#00H
MOV A,FSGESHU
HM51: MOVC A,@A+DPTR
CALL FSA
INC FSGESHU
MOV A,FSGESHU
CJNE A,#0f9H,HM51 ;共发送249个数
MOV DPTR,#H5SJ1
MOV FSGESHU,#0
MOV A,FSGESHU
HM52: MOVC A,@A+DPTR
CALL FSA
INC FSGESHU
MOV A,FSGESHU
CJNE A,#0F8H,HM52 ;;;248
call xsshijian
setb sjsxbz
CLR HM1BZ
CLR HM2BZ
CLR HM3BZ
CLR HM4BZ
SETB HM5BZ
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;画面6显示程序 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
hm6:
MOV DPTR,#hm6sj
MOV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -