?? 爐溫控制實(shí)現(xiàn).txt
字號(hào):
RETI
PLDD: MOV A, 54H ;取Ki’
MOV B, 45H ;取當(dāng)前溫差
MUL AB
MOV R6, B ;乘得結(jié)果高位送R6
MOV R7, A ;低位送R7
CLR C ;清進(jìn)位位
;當(dāng)前溫差與上次采樣時(shí)刻誤差之差存入R2
MOV A, 45H
MOV B, 46H
SUBB A, B
MOV R2, A
MOV 1BH, C ;進(jìn)位送入1BH
JNC PLD1 ;不為負(fù)跳轉(zhuǎn)
;A取反加1,變?yōu)檠a(bǔ)碼
CPL A
ADD A, #01H
MOV R2, A ;存入R2
PLD1: MOV B, 53H ;取比例常數(shù)
MUL AB ;當(dāng)前溫差與上次采樣時(shí)刻誤差之差乘上比例常
JB 1BH, PLD2 ;根據(jù)上一步的進(jìn)位判斷操作是加還是減
LCALL AD67 ;加法
LJMP PLD3 ;下一步
PLD2: LCALL SU67 ;減
PLD3: CLR C ;清進(jìn)位
MOV A, R2 ;取當(dāng)前溫差與上次采樣時(shí)刻誤差之差
MOV B, 56H ;取Kd’
MUL AB ;當(dāng)前溫差與上次采樣時(shí)刻誤差之差乘上Kd’
JB 1BH, PLD4 ;根據(jù)進(jìn)位判斷操作是加還是減
LCALL AD67
LJMP PLD5
PLD4: LCALL SU67
PLD5: CLR C ;清進(jìn)位
MOV A, 47H ;取上上次采樣時(shí)刻的誤差
SUBB A, 46H ;減去上次采樣時(shí)刻的誤差
JNC PLD6 ;為正跳轉(zhuǎn)
;為負(fù),取反加1,變?yōu)檠a(bǔ)碼
CPL A
ADD A, #01H
PLD6: MOV B, 56H ;取Kd’
MUL AB ;上上次采樣時(shí)刻的誤差與上次采樣時(shí)刻的誤差乘
上Kd’
JC PLD7 ;如果上上次誤差大于上次誤差,減法
LCALL AD67 ;加法
LJMP PLD8
PLD7: LCALL SU67
PLD8: MOV 48H, R6 ;把R6送入調(diào)整量增量高位
MOV 49H, R7 ;R7送入調(diào)整量增量低位
CLR C ;清進(jìn)位
;計(jì)算本次調(diào)整量增量低位與上次調(diào)整量增量低位之和
MOV A, 49H
ADDC A, 4DH
MOV 4BH, A ;送入本次調(diào)整量低位
;計(jì)算本次調(diào)整量增量高位與上次調(diào)整量增量高位之和
MOV A, 48H
ADDC A, 4CH
MOV 4AH, A ;送入本次調(diào)整量高位
MOV 47H, 46H ;上次采樣時(shí)刻的誤差送上上次采樣時(shí)刻的誤差
MOV 46H, 45H ;當(dāng)前溫差送上次采樣時(shí)刻的誤差
MOV 4CH, 4AH ;本次調(diào)整量高位送上次調(diào)整量高位
MOV 4DH, 4BH ;本次調(diào)整量低位送上次調(diào)整量低位
RET
AD67: MOV 5DH, B ;A、B送5E、5D暫存
MOV 5EH, A
CLR C ;清進(jìn)位
MOV A, R7 ;取調(diào)整量增量低位
ADD A, 5EH ;加剛才的運(yùn)算結(jié)果
MOV R7, A ;作為新的整量增量低位存入R7
MOV A, R6 ;取調(diào)整量增量高位
ADD A, 5DH ;加剛才的運(yùn)算結(jié)果
MOV R6, A ;作為新的整量增量高位存入R6
RET
SU67: MOV 5DH, B ;A、B送5E、5D暫存
MOV 5EH, A
CLR C ;清進(jìn)位
MOV A, R7 ;取調(diào)整量增量低位
SUBB A, 5EH ;減剛才的運(yùn)算結(jié)果
MOV R7, A ;作為新的整量增量低位存入R7
MOV A, R6 ;取調(diào)整量增量高位
SUBB A, 5DH ;減剛才的運(yùn)算結(jié)果
MOV R6, A ;作為新的整量增量高位存入R6
RET
CDTB: MOV R2, #03H ;送循環(huán)次數(shù)3到R2
MOV R0, #3CH ;將指針R0制向顯示存儲(chǔ)單元3CH
CDDD: MOV R3, #00H ;清R3
MOV A, @R0 ;將R0指向的顯示緩沖區(qū)地址內(nèi)數(shù)據(jù)送入A
MOV R4, A ;將A移入R4,R4用于存儲(chǔ)結(jié)果,
CDTL: MOV A, R4 ;取R4內(nèi)容
MOV B, #10
MUL AB ;A乘10
MOV R4, A ;將計(jì)算結(jié)果的低位送入R4保存
MOV A, B ;將計(jì)算結(jié)果的高位送入A
XCH A, R3 ;交換A和R3內(nèi)容
MOV B, #10
MUL AB ;計(jì)算A乘10
ADD A, R3 ;用結(jié)果加上R3的內(nèi)容
MOV R3, A ;結(jié)果送R3保存
DEC R0 ;R0減1,指向顯示緩沖區(qū)下一地址
MOV A, R4 ;取入R4中保存的數(shù)據(jù)
ADD A, @R0 ;用當(dāng)前值加上顯示緩沖區(qū)中的值
MOV R4, A ;將結(jié)果送入R4
MOV A, R3 ;將R3內(nèi)容移入A
ADDC A, #0 ;用A加上進(jìn)位位
MOV R3, A ;將結(jié)果移入到R3保存
DJNZ R2, CDTL ;R2減1,如果不等于零繼續(xù),否則跳轉(zhuǎn)到CDTL
RET ;子程序返回
CTBB: MOV DPTR, #TAB1 ;將表格TAB1首地址送入DPTR
CLR C ;清進(jìn)位位
MOV A, R4 ;將R4值送A
RLC A ;A內(nèi)容乘2
MOV R4, A ;將結(jié)果移入R4
XCH A, R3 ;交換A和R3內(nèi)容
RLC A ;A內(nèi)容乘2
XCH A, R3 ;交換A和R3內(nèi)容
ADD A, DPL ;A加DPTR低位
MOV DPL, A ;將結(jié)果送DPTR低位
MOV A, DPH ;DPTR高位送A
ADDC A, R3 ;A加R3
MOV DPH, A ;結(jié)果送DPTR高位
CLR A ;清空A
MOVC A, @A+DPTR ;根據(jù)DPTR查表格
MOV R3, A ;將結(jié)果送到R3
CLR A ;清A
INC DPTR ;DPTR加1
MOVC A, @A+DPTR ;根據(jù)DPTR查表格
MOV R4, A ;結(jié)果送R4
RET ;子程序返回
;鍵值處理子程序
KEYI: JNB 22H, KEYI ;循環(huán)等待中斷
MOV A, 27H ;將鍵值送A
CLR C ;清進(jìn)位位
SUBB A, #08H ;鍵值減8
JNC LC ;如果按下的是8、9、A、B,則跳轉(zhuǎn)到LC
MOV A, 27H ;如果按下的上0、1、2、3,則直接送到A
CLR 22H ;清空22H,表示鍵值處理結(jié)束
RET ;子程序返回
LC: MOV A, 27H ;將鍵值送到A
CLR C ;清進(jìn)位位
SUBB A, #04H ;得到8、9、A、B轉(zhuǎn)換后的鍵值
CLR 22H ;清空22H,表示鍵值處理結(jié)束
RET ;子程序返回
DIR: MOV R2, #06H ;顯示子程序,和實(shí)驗(yàn)一相同
MOV DPTR, #5FFFH ;送8279控制口地址到DPTR
MOV A, #92H ;8279寫顯示RAM命令,地址自動(dòng)加1,從2地
址開始
MOVX @DPTR, A ;送控制字
MOV R1, #39H ;令R1指向顯示緩沖區(qū)39H
TY11: MOV A, @R1 ;將R1所指地址內(nèi)的數(shù)據(jù)送入A
MOV DPTR, #CODE ;將表格CODE的地址送入16位數(shù)據(jù)指針
MOVC A, @A+DPTR ;根據(jù)表格起始地址+偏移量查找數(shù)據(jù)
MOV DPTR, #5EFFH ;將8279數(shù)據(jù)口地址送DPTR
MOVX @DPTR, A ;送顯示數(shù)據(jù)到8279
INC R1 ;顯示緩沖區(qū)指針加1,指向下一地址
DJNZ R2, TY11 ;6個(gè)緩沖區(qū)都讀完則繼續(xù),否則跳轉(zhuǎn)到TY11
RET ;子程序返回
CODE: DB 0C0H, 0F9H, 0A4H, 0B0H ;顯示數(shù)據(jù)的表格
DB 99H, 92H, 82H, 0F8H, 80H
DB 90H, 88H, 83H, 0C6H, 0A1H
DB 86H, 8EH, 8CH, 0C1H, 89H
DB 0C7H, 0BFH, 91H, 00H, 0FFH
DB 8CH, 0C7H, 87H, 0FFH, 0FFH
;外中斷1中斷處理子程序,處理8279鍵盤事件
INT0: ;入棧保護(hù)現(xiàn)場
PUSH ACC ;累加器入棧
PUSH DPH ;DPTR高位入棧
PUSH DPL ;DPTR低位入棧
MOV DPTR, #5FFFH ;送8279控制口地址到DPTR
MOV A, #40H ;8279控制字,讀FIFO 0地址內(nèi)容,地址不自加
1
MOVX @DPTR, A ;送控制字
MOV DPTR, #5EFFH ;送8279數(shù)據(jù)口地址到DPTR
MOVX A, @DPTR ;讀鍵值
MOV 27H, A ;將鍵值送到27H保存
SETB 22H ;將22H置位,按鍵標(biāo)志
NOP ;空操作
;出棧恢復(fù)現(xiàn)場
POP DPL ;DPTR低位出棧
POP DPH ;DPTR高位出棧
POP ACC ;累加器出棧
RETI ;中斷處理子程序返回
;計(jì)時(shí)器0溢出中斷處理子程序
PIT0: CLR TR0 ;清計(jì)時(shí)器0中斷類型位,使其為0有效
NOP ;空操作
MOV TH0, #0FFH ;復(fù)位計(jì)時(shí)器高位
MOV TL0, #0FFH ;復(fù)位計(jì)時(shí)器低位
SETB 25H ;置25H
NOP ;空操作
RETI ;中斷處理子程序返回
;計(jì)時(shí)器1溢出處理子程序
PIT1: ;入棧保護(hù)現(xiàn)場
PUSH ACC ;累加器入棧
PUSH PSW ;程序狀態(tài)字入棧
SETB PSW.4 ;使用第三組寄存器,從10H到17H
CLR EX0 ;清外部中斷0中斷允許位,關(guān)中斷
NOP ;空操作
MOV TH1, #0D8H ;置D8H為計(jì)時(shí)器1高位初值
MOV TL1, #0F0H ;置F0H為計(jì)時(shí)器1低位初值
MOV A, 50H ;將1.5秒對(duì)應(yīng)的時(shí)間常數(shù)96H送A
DEC A ;A減1
MOV 50H, A ;將A送回50H
JNZ P333 ;如果控制周期1.5秒不到,跳轉(zhuǎn)到P333
MOV 50H, #96H ;置1.5秒對(duì)應(yīng)的時(shí)間常數(shù)96H
MOV 5AH, 4AH ;將本次調(diào)整里量增量高位送調(diào)整量緩沖單元高位
P333: LCALL OUTT ;調(diào)用調(diào)整量輸出子程序
CLR C ;清進(jìn)位位
MOV A, 52H ;送采樣周期低位到A
SUBB A, #01H ;A減1
MOV 52H, A ;送結(jié)果到采樣周期低位
MOV A, 51H ;送采樣周期高位到A
SUBB A, #01H ;A減1
MOV 51H, A ;送結(jié)果到采樣周期高位
ORL A, 52H ;得到采樣周期
JNZ P335 ;如果采樣周期不為0,跳轉(zhuǎn)到P335
LCALL PLDD ;調(diào)用PLDD進(jìn)行PID運(yùn)算
CLR C ;清進(jìn)位位
MOV A, 43H ;將當(dāng)前溫度值送A
SUBB A, 42H ;減去設(shè)定溫度值
JC P335 ;如果當(dāng)前溫度值小于設(shè)定溫度值,跳轉(zhuǎn)到P335
SETB P3.5 ;截止可控硅
NOP ;空操作
LJMP P336 ;跳轉(zhuǎn)到P336
P335: NOP
NOP
P336: ;出棧恢復(fù)現(xiàn)場
POP PSW ;程序狀態(tài)字出棧
POP ACC ;累加器出棧
SETB EX0 ;置計(jì)時(shí)器0中斷允許位,允許中斷
NOP ;空操作
RETI ;中斷處理子程序返回
;顯示子程序
OUTT: MOV R2, 5AH ;將調(diào)整量高位送R2
CJNE R2, #00H, OUT1 ;判斷如果R2不等于0,跳轉(zhuǎn)到OUT1
SETB P3.5 ;如果調(diào)整量高位為0,關(guān)閉可控硅
NOP ;空操作
RET ;子程序返回
OUT1: SETB TR0 ;置計(jì)時(shí)器0中斷類型為高有效
NOP ;空操作
SETB ET0 ;置計(jì)時(shí)器0中斷允許位,允許中斷
NOP ;空操作
MOV IP, #02H ;設(shè)中斷優(yōu)先級(jí)定時(shí)器0中斷最高
OUT2: JB P3.4, OUT2 ;如果電網(wǎng)工頻過零脈沖為高則跳轉(zhuǎn)到OUT2
;循環(huán)等待T0溢出
CLR P3.5 ;啟動(dòng)可控硅
NOP ;空操作
DEC R2 ;調(diào)整量減1
MOV 5AH, R2 ;調(diào)整量送調(diào)整量緩沖單元高位
CLR 25H ;清25H
NOP ;空操作
CLR ET0 ;清計(jì)時(shí)器0中斷允許位,禁止中斷
NOP ;空操作
RET ;子程序返回
TAB1: DW 0000, 0001, 0002 0003
DW 0004, 0005, 0006, 0007
DW 0008, 0009, 0010H, 0011H
DW 0012H, 0013H, 0014H, 0015H
DW 0016H, 0017H, 0018H, 0019H
DW 0020H, 0021H, 0022H,0023H
DW 0024H, 0025H, 0026H, 0027H
DW 0028H, 0029H, 0030H, 0031H
DW 0032H, 0033H, 0034H, 0035H
DW 0036H, 0037H, 0038H, 0039H
DW 0040H, 0041H, 0042H, 0043H
DW 0044H, 0045H, 0046H, 0047H
DW 0048H, 0049H, 0050H, 0051H
DW 0052H, 0053H, 0054H, 0055H
DW 0056H, 0057H, 0058H, 0059H
DW 0060H, 0061H, 0062H, 0063H
DW 0064H, 0065H, 0066H, 0067H
DW 0068H, 0069H, 0070H, 0071H
DW 0072H, 0073H, 0074H, 0075H
DW 0076H, 0077H, 0078H, 0079H
DW 0080H, 0081H, 0082H, 0083H
DW 0084H, 0085H, 0086H, 0087H
DW 0088H, 0089H, 0090H, 0091H
DW 0092H, 0093H, 0094H, 0095H
DW 0096H, 0097H, 0098H, 0099H
DW 0100H, 0101H, 0102H,0103H
DW 0104H, 0105H, 0106H, 0107H
DW 0108H, 0109H, 0110H, 0111H
DW 0112H, 0113H, 0114H, 0115H
DW 0116H, 0117H, 0118H, 0119H
DW 0120H, 0121H, 0122H,0123H
DW 0124H, 0125H, 0126H, 0127H
DW 0128H, 0129H, 0130H, 0131H
DW 0132H, 0133H, 0134H, 0135H
DW 0136H, 0137H, 0138H, 0139H
DW 0140H, 0141H, 0142H,0143H
DW 0144H, 0145H, 0146H, 0147H
DW 0148H, 0149H, 0150H, 0151H
DW 0152H, 0153H, 0154H, 0155H
DW 0156H, 0157H, 0158H, 0159H
DW 0160H, 0161H, 0162H,0163H
DW 0164H, 0165H, 0166H, 0167H
DW 0168H, 0169H, 0170H, 0171H
DW 0172H, 0173H, 0174H, 0175H
DW 0176H, 0177H, 0178H, 0179H
DW 0180H, 0181H, 0182H,0183H
DW 0184H, 0185H, 0186H, 0187H
DW 0188H, 0189H, 0190H, 0191H
DW 0192H, 0193H, 0194H, 0195H
DW 0196H, 0197H, 0198H, 0199H
DW 0200H, 0201H, 0202H,0203H
DW 0204H, 0205H, 0206H, 0207H
DW 0208H, 0209H, 0210H, 0211H
DW 0212H, 0213H, 0214H, 0215H
DW 0216H, 0217H, 0218H, 0219H
DW 0220H, 0221H, 0222H,0223H
DW 0224H, 0225H, 0226H, 0227H
DW 0228H, 0229H, 0230H, 0231H
DW 0232H, 0233H, 0234H, 0235H
DW 0236H, 0237H, 0238H, 0239H
DW 0240H, 0241H, 0242H,0243H
DW 0244H, 0245H, 0246H, 0247H
DW 0248H, 0249H, 0250H, 0251H
DW 0252H, 0253H, 0254H, 0255H
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -