📄 rrr.txt
字号:
炉温控制系统的软件程序:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP PINTO
ORG 0013H
AJMP PINT1
ORG 0100H
MAIN: MOV 32H,#67H ;设给定温度初始值为404度
MOV 33H,#00H ;温度给定值的符号位为0
MOV 3CH,#00H ;前一时刻的偏差信号E(k-T)
MOV 3DH,#00H ;前一时刻的偏差信号E(k-T)符号位为0
MOV 3EH,#00H ;E(k-2T)
MOV 3FH,#00H
MOV 5FH,#00H ;U的初值
MOV 60H,#CCH ;报警的上限温度值800
MOV 61H,#66H ;报警的下限温度值400
MOV DPTR,#7FFFH ;8279
MOV A,#0D1H
MOVX @DPTR,A
WEIT: MOVX A,@DPTR
JB ACC.7,WEIT ;等待清显结束
MOV A,#34H ;值分频系数,CLK=2MHz
MOV A,#12H ;八字符显示,右端入口方式,n键轮回
MOVX @DPTR,A
SETB IT0 ;INTO边沿触发
SETB EA ;开中断
SETB EX0 ;允许INTO中断
AD : SETB IT1 ;INT1边沿触发
SETB EA ;开中断
SETB EX1 ;允许INT1中断
MOV DPTR,#7FF8H;指向INO通道
MOVX @DPTR,A ;启动A/D
LOOP: NOP
AJMP LOOP
PINTO: PUSH PSW
PUSH DPL
PUSH DPH
PUSH ACC
PUSH B
SETB PSW.3
MOV DPTR,#7FFFH ;置状态口地址
MOV A,@DPTR ;读FIFO状态
MOV A,#5OH ;置读FIFO命令(每次读后ai自动加一)
MOV @DPTR,A
MOV DPTR,#7FFEH ;置数据口地址
MOVX A,@DPTR ;读数据
KEY: MOV 3AH,A
MOVX A,@DPTR
MOV 39H,A
MOVX A,@DPTR
MOV 38H,A
MOV A,@DPTR
ACALL CHACK ;检查按键是否是以“*”键结尾
CJMP A,#OBH,PKYR ;如果不是中断返回
MOV A,3AH ;百位求键值
ACALL CHACK
MOV 3AH,A
MOV A,39H ;十位求键值
ACALL CHACK
MOV 39H,A
MOV A,38H ;个位求键值
ACALL CHACK
MOV 38H,A
MOV R0,#3AH ; 把百位地址给R0,调显示子程序
ACALL DIS
XIUGAI: CLR C ; 以下程序用于修改给定温度值
MOV B,#100
MOV A,3AH ;
MUL AB
MOV R1,B
MOV 3AH,A
MOV B,#10
MOV A,39H
MUL AB
ADD A,38H ;十位与个位相加
ADD A,3AH :十位与个位相加D的结果与百位的底 8位相加
MOV A,R1
ADDC A,00H ;百位的高 8位加进位CY
CLR C ;把当前值/4放入给定温度地址
RRC A
MOV R1,A
MOV A,3AH
RRC A
MOV 3AH,A
MOV A,R1
RRC A
MOV A,3AH
RRC A
MOV 32H,A ;修改完成
PKYR: POP B
POP ACC
POP DPH
POP DPL
POP PSW
RET1
PINT1: PUSH PSW
PUSH DPL
PUSH DPH
PUSH ACC
PUSH B
MOV DPTR,#7FF8H
MOVX A,@DPTR
PID : MOV 32H,A
ACALL ALARM ;调用报警子程序
ACALL CHEN ;温度采集值转化为十进制数(为了显示的需要)
MOV R0,#34H ;十进制数的首地址
ACALL DIS ;显示
MOV R0,#30H ;给定值30H-31H
MOV R1,#32H
MOV R2,#3BH ;3BH-3CH偏差信号E(k)
ACALL BSUB
MOV A,#3CH ;查看E(K)的符号位
JB ACC.7,CONVER1
MOV A,38H
MOV B.#OAH
MUL AB
MOV 41H,A
MOV 42H,B
AJMP H1
CONVER1: MOV A,3BH
DEC A
CPL A
MOV B,#OAH
MUL AB
CPL A
INC A
MOV A,B
CPL A
SETB ACC.7
MOV 42H,A
H1: MOV A,3FH
JB ACC.7,CONVER2
MOV A,3DH
MOV B,#0EH ;
MUL AB
MOV 43H,A
MOV 44H,B
AJMP H2
CONVER2 :MOV A,3DH
DEC A
CPL A
MOV B,#0EH
MUL AB
CPL A
INC A
MOV 43H,A
MOV A,B
CPL A
INC A
SETB ACC.7
MOV 44H,A
MOV R0,41H
MOV R1,43H
MOV R2,43H
ACALL BSUB
MOV A,4OH
JB ACC.7,CONVER3
MOV A,3FH
MOV B,#05H
MUL AB
MOV 3FH,A
MOV 40H,B
AJMP H3
CONVER3 :MOV A,3FH
DEC A
CPL A
MOV B,#05H
MUL AB
CPL A
INC A
MOV 3FH,A
MOV A,B
CPL A
INC A
SETB ACC.7
MOV 40H,A
MOV R0,43H
MOV R1,3FH
MOV R2,3FH
ACALL BADD
CLR C ;整体乘4
MOV A,40H
MOV R2,A ;保存符号位
RRC A
MOV R1,A
MOV 40H,A
MOV A,3FH
RRC A
MOV 3FH,A
MOV A,R1
RRC A
MOV 40H,A
MOV A,3FH
RRC A
MOV 3FH,A
MOV A,R2
JNB ACC.7,H4
MOV A,40H
SETB ACC.7
SETB ACC.6
H4 : CLR C
MOV A,5EH ;把KP的值给A
MOV B,3FH ;把△u的低8位给B
MUL AB
MOV 49H,A ;低8位放到49H里
MOV R6,B ;高8位暂存入R6
MOV A,5EH
MOV B,40H ;把△u的高8位给B
MUL AB
ADD A,R6 ;
MOV 4AH,A ;
MOV A,B
ADDC A,#00H ;加进位
MOV 4BH,A ;△u*kp的高8位存入4BH
MOV A, 5FH
ADD A, 49H ;
MOV DPTR,#BFFFH
MOV @DPTR,A ;启动D/A
ACALL DEL ;延时
MOV DPTR,#7FF8H
MOVX @DPTR,A ;再次启动A/D
RET1 ;中断返回
;子程序
;双字节减法
BSUB: MOV R7,#2
CLR C
LOOP1:MOV A,@R0
SUBB A, @R1
MOV R2,A
INC R0
INC R1
INC R2
DJNZ R7,LOOP1
RET
;双字节加法
BADD: MOV R7,#2
CLR C
LOOP1:MOV A,@R0
ADDC A, @R1
MOV R2,A
INC R0
INC R1
INC R2
DJNZ R7,LOOP1
RET
;显示子程序:
DIS :MOV DPTR,#7FFFH ; 置8279的命令/状态口地址
MOV R7,#03H ; 三位显示
MOV A, #90H ; 设置显示命令字
MOVX @DPTR, A ; 送显示命令字
MOV DPTR,#7FFEH ; 设置数据口地址
LP :MOV A, @R0 ; 取显示数据
ADD A, #6
MOVC A, @A+PC
MOVX @DPTR, A
INC R0
DJNZ R7,IP
RET
SEG :DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7EH 6FH
;温度采集值转化为十进制数(为了显示的需要)
CHEN :MOV A,32H ;33H是温度采集的地址
MOV B,#100 ;除以100得到百位数
DIV AB
MOV 36H,A
MOV A,B
MOV B,#10 ;除以10得到十位,个位数
DIV AB
MOV 35H,A ;十位
MOV 34H,B ;个位
MOV B ,#4 ;整体乘以4变成需要显示的数
MOV A,34H
MUL AB
MOV B,#10
DIV AB
MOV 34H,B ;需要显示的个位数存放在34H
MOV R1,A ;进位的数暂存R1中
MOV A,35H
MOV B,#4
MUL AB
ADDC A,R1
MOV B,#10
DIV AB
MOV 35H,B ;需要显示的十位数存放在35H
MOV R1,A
MOV B,#4
MOV A,36H
MUL AB
ADD A,R1
MOV 36H,A ;需要显示的百位数存放在36H
RET
;报警程序:
ALARM:MOV P1,0FFH
MOV A,30H
SUB A,60H
JNC TMAX
MOV A,30H
SUB A,61H
JC TMIN
ACALL DIS
R:RET
TMAX:MOV P1,0FBH
AJMP R
TMIN:MOV P1,0FAH
AJMP R
;检查按键是否是以“*”键结尾
CHACK :MOV R1,A
ANL A,#07H ;求列值
MOV R2,A
MOV A, R1
ANL A, #38H ;求行值
RR A
RR A
RR A
MOV B,#3H
MUL AB
ADD A,R2 ;求键值=行号*列数+列号
RET
;延迟子程序
DEL : MOV R7,#3O
DEL1: MOV R6,#15
NOP
DEL2: DJNZ R6,DEL2
DJNZ R7,DEL1
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -