⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 我参加电子竞赛 做的温度控制的单片机程序.asm

📁 这是一个基于单片机的温度控制系统的源码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*****平均值滤波*****
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 + -