📄 我参加电子竞赛 做的温度控制的单片机程序.asm
字号:
;*****平均值滤波*****
FILTER:MOV R0,#20H
MOV R6,#00H
MOV R7,#00H
MOV R2,#04H
SUM10:MOV A,R7 ;求四次采样结果的和
ADD A,@R0
MOV R7,A
MOV A,R6
ADDC A,#00H
MOV R6,A
INC R0
DJNZ R2,SUM10
MOV R2,#02H ;求平均值
SUM12:MOV A,R6
CLR C
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A
DJNZ R2,SUM12
MOV 24H,R7 ;本次采样平均值存放在24H
RET
;*****PID算法*****
PID:MOV R2,25H ;设定值U送R2
MOV R3,24H ;采样平均值R送R3
LCALL CPL1
LCALL SUM ;求偏差E(K),存放于R2中
MOV 29H,R2 ;本次偏差E(k)送29H
MOV R3,27H ;Ki送R3
LCALL SMUL ;求得Pi
MOV 30H,R4 ;Pi的高字节送30H
MOV 31H,R5 ;Pi的低字节送31H
MOV R2,29H ;E(K)送R2
MOV R3,2AH ;上次偏差E(K-1)送R3
LCALL CPL1
LCALL SUM ;求得E(K)-E(K-1),存放于R2中
MOV R3,26H ;Kp送R3
LCALL SMUL ;求得Pp,高字节存R4,低字节存R5
MOV R2,30H ;Pi送R2R3
MOV R3,31H
LCALL DSUM ;求得Pi+Pp
MOV 30H,R4 ;结果高字节送30H
MOV 31H,R5 ;结果低字节送31H
MOV R2,29H ;本次偏差E(k)送R2
MOV R3,2BH ;上上次偏差E(K-2)送R3
LCALL SUM ;求得E(K)+E(K-2),存放于R2中
MOV R3,2AH ;上次偏差E(K-1)送R3
LCALL CPL1 ;E(K-1)取补码
LCALL SUM ;求得E(K)+E(K-2)-E(K-1),存放于R2中
LCALL SUM ;求得E(K)+E(K-2)-2E(K-1),存放于R2中
MOV R3,28H ;Kd送R3
LCALL SMUL ;求得Pd,高字节存R4,低字节存R5
MOV R2,30H ;取Pi+Pp
MOV R3,31H
LCALL DSUM ;求得Pi+Pp+Pd,高字节存R4,低字节存R5
MOV R2,2CH ;取上次计算的P(K-1)
MOV R3,2DH
LCALL DSUM ;求得本次P(K)=Pi+Pp+Pd+P(K-1)
MOV 2CH,R4 ;结果高字节存2CH
MOV 2DH,R5 ;结果低字节送2DH
MOV 2BH,2AH ;E(K-1)送E(K-2)
MOV 2AH,29H ;E(K)送E(K-1)
RET
;*****单字节求补码*********************************************************
CPL1:MOV A,R3
CPL A
ADD A,#01H
MOV R3,A
RET
;*****单字节加法*************************************************************
SUM:MOV A,R2
ADD A,R3
MOV R2,A
RET
;*****单字节有符号数乘法****************************************************
SMUL: NOP
SBIT BIT 2EH.0
SBIT1 BIT 2EH.1
SBIT2 BIT 2EH.2
MOV A,R2
RLC A
MOV SBIT1,C
MOV A,R3
RLC A
MOV SBIT2,C
ANL C,/SBIT1
MOV SBIT,C
MOV C,SBIT1
ANL C,/SBIT2
ORL C,SBIT
MOV SBIT,C
MOV A,R2
JNB SBIT1,NCH1
CPL A
INC A
NCH1:MOV B,A
MOV A,R3
JNB SBIT2,NCH2
CPL A
ADD A,#01H
NCH2:MUL AB
JNB SBIT,NCH3
CPL A
ADD A,#01H
NCH3:MOV R5,A
MOV A,B
JNB SBIT,NCH4
CPL A
ADDC A,#00H
NCH4:MOV R4,A
RET
;*****双字节加法*************************************************************
DSUM:MOV A,R5
ADD A,R3
MOV R5,A
MOV A,R4
ADDC A,R2
MOV R4,A
RET
;********************************************************************************
SUM00:CPL 2EH.3
JB 2EH.3,SUM01
MOV A,24H
ADD A,#02H
MOV 24H,A
RET
SUM01:MOV A,24H
ADD A,#03H
MOV 24H,A
RET
;********************************************************************************
SUBB00:CPL 2EH.3
JB 2EH.3 ,SUB01
MOV A,24H
CLR C
SUBB A,#03H
MOV 24H,A
RET
SUB01: MOV A,24H
CLR C
SUBB A,#02H
MOV 24H,A
RET
;********************************************************************************
;(8) 标号: D457 功能:双字节二进制无符号数除以单字节二进制数
;入口条件:被除数在R4、R5中,除数在R7中。
;出口信息:OV=0 时,单字节商在R3中,OV=1 时溢出。
;影响资源:PSW、A、R3~R7 堆栈需求: 2字节
;入口条件:待转换的数据在R0中,
;出口条件:转换结果在R0(高),R1,R2(低 )中
TRANSF:MOV A,#64H
MOV B,R0 ;;;;;;;;;;;;;;;
MUL AB
MOV R5,A
MOV R4,B
MOV R7,#0FFH
D457:CLR C
MOV A,R4
SUBB A,R7
JC DV50
SETB OV ;商溢出
RET
DV50:MOV R6,#8 ;求平均值(R4R5/R7-→R3)
DV51:MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DV52
MOV R4,A
DV52:CPL C
MOV A,R3
RLC A
MOV R3,A
DJNZ R6,DV51
MOV A,R4 ;四舍五入
ADD A,R4
JC DV53
SUBB A,R7
JC DV54
DV53:INC R3
DV54:CLR OV
MOV A,R3
MOV B,#64H
DIV AB
MOV R0,A ;;;;;;;;;;;
MOV A,B
MOV B,#0AH
DIV AB
MOV R1,A ;;;;;;;;;;;;
MOV R2,B ;;;;;;;;;;;;
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,8CH,0C1H,0CEH,91H,89H,0C7H,0FFH
END
;******************************************************************************
;*****T1中断程序********************************************************************
T100: CLR EA
PUSH ACC
PUSH B
PUSH PSW
PUSH DPH
PUSH DPL
CLR RS1 ;T1工作于1区
SETB RS0
;MOV TH1 重设定时器初植?????????
;MOV TL1
LCALL SAMP ;调用采样子程序
LCALL FILTER ;调用数字滤波子程序
;****************************************************************************
KEY00:MOV DPTR,#1FFFH
MOV A,#0FEH
MOVX @DPTR,A
JB P2.7,KEY01
INC 38H
MOV A,38H
CJNE A,#0AH,KEY01
SETB 2EH.5
CLR 2FH.0
KEY01:MOV 38H,#00H
MOV A,#0FDH
MOVX @DPTR,A
JB P2.7,KEY02
INC 39H
MOV A,39H
CJNE A,#0AH,KEY02
SETB 2EH.6
CLR 2EH.7
CLR 2FH.0
KEY02:MOV 39H,#00H
MOV A,#0FBH
MOVX @DPTR,A
JB P2.7,KEY03
INC 40H
MOV A,40H
CJNE A,#0AH,KEY03
SETB 2EH.7
CLR 2EH.6
CLR 2FH.0
KEY03:MOV 40H,#00H
MOV A,#0F7H
MOVX @DPTR,A
JB P2.7,T101
INC 41H
MOV A,41H
CJNE A,#0AH,T101
SETB 2FH.0
CLR 2EH.5
CLR 2EH.6
CLR 2EH.7
;********************************************************************************
KEYBOARD:JNB 2EH.5,OUT ;键盘处理
LCALL KEY1
JNB 2EH.6,OUT
LCALL KEY2
CLR 2EH.6
JNB 2EH.7,OUT
LCALL KEY3
CLR 2EH.7
JNB 2FH.0,OUT
LCALL KEY4
CLR 2FH.0
;********************************************************************************
FIR:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -