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

📄 tcmain.asm

📁 51单片机用汇编实例 包括ad
💻 ASM
字号:
; 闭环温度控制实验说明
; 实验在联机调试时,需要修改如下一些参数
; 实验时,按照参考参数将各单元中的数据先进行修改,再运行程序
;======================================================================================
; 符号	单元	参考参数	单位	取值范围	名称及作用
; TK	39H	  30H		10ms	00H--FFH	采样周期:决定数据采集快慢程度
; SPEC	3AH	  28H		℃	14H--46H	数字给定:要求温控单元达到的温度
; IBAND	3BH	  60H			00H--7FH	积分分离值:PID算法中积分分离值
; KPP	40H(高)	  1FH			0000H--1FFFH	比例系数:PID中比例项系数值
; 	41H(低)	  10H			(0--2倍)	
; KII	42H(高)	  00H		10ms	0001H--1FFFH	积分系数:PID中积分项系数值
; 	43H(低)	  14H			(1--8192毫秒)	
; KDD	44H(高)	  00H		10ms	0000H--1FFFH	微分系数:PID中微分项系数值
; 	45H(低)	  20H			(0--8192毫秒)	
;======================================================================================

	ORG	0000H
	LJMP	MAIN

	ORG	0013H
	LJMP	IINT1	    ;外部中断1,读AD转换结果

	ORG	000BH	    ;定时器T0,启动AD转换
	LJMP	TT0
         
	ORG     001BH
	LJMP    TT1

	ORG     0030H
MAIN:	MOV     SP,#08H
	LCALL   INIT        ;初始化,开中断
	CLR	7FH         ;AD-MARK=0  7FH中存放采样标志位

WAIT1:	JNB	7FH,WAIT1   ;判断采样值形成否
	CLR	7FH         ;7FH=1表示形成采样
	
	MOV	A,38H       ;38H中为AD转换值
	MOV	DPTR,#TAB1                 
	MOVC	A,@A+DPTR   ;查温度表
        
	MOV     5BH,A       ;5BH中为反馈Yk
    
	LCALL   PID         ;调用PID子程序进行运算得到控制量
	CLR     C
	MOV     A,58H       ;58H中为CK
	SUBB    A,#80H
	JC      IS0         ;产生PWM脉冲,CY为1跳转
	MOV     68H,A	    ;68H中为a原值
	LJMP    COU         ;传送结果显示

IS0:	MOV     A,#00H
	MOV     68H,A	    ;a原值清零

COU:	LCALL   COUNTA      ;产生PWM脉冲

	MOV   A,3AH         ;3AH中为给定温度
	MOV   34H,A         ;34H中为显示子程序给定值
         
	MOV   A,5BH         ;5BH中为反馈Yk
	MOV   30H,A         ;30H为显示子程序采样值
	LJMP    WAIT1       ;跳转至判断采样址形成否
COUNTA: 
	CLR    	C
	MOV    	A,#07FH
	SUBB   	A,68H       ;不带符号位求补码
	MOV    	5CH,A	    ;B原值
	RET

;*****************
; 初始化子程序
;*****************
INIT:   MOV     A,#00H
	MOV     R0,#50H
I1:	MOV     @R0,A
	INC     R0
	CJNE    R0,#80H,I1      ;50H----80H赋初值0

	MOV	39H, #30H	;参数初始化
	MOV	3AH, #28H
	MOV	3BH, #60H
	MOV	40H, #1FH	;KP
	MOV	41H, #10H
	MOV	42H, #00H	;KI
	MOV	43H, #14H
	MOV	44H, #00H	;KD
	MOV	45H, #20H

	MOV     30H,#00H
	MOV     34H,#00H

        MOV     5EH,#01H        ;5EH标志位,将CK送入PWM的标志位
	MOV     6AH,#7FH        ;6AH中存放a原值
        MOV     68H,#7FH        ;68H中存放B原值
        MOV     90H,#00H	;P1.0=0开始加热
	CLR	7FH             ;7FH 采样标志清零
 
        MOV     TMOD,#11H       ;TMOD(89H)T1,T0为16位定时器
       
    	MOV	IP,#02H         ;PT0 定时器0为高优先级
        
	SETB	IT1             ;IT1(TCON)边沿触发方式INT1为负跳变有效
                                ;所以ADC0809的EOC经过非门与INT1连接
	SETB	EX1             ;EX1(IE)允许INT1中断
        
	MOV     TH0,#0D8H
	MOV     TL0,#0EFH       ;T0 10MS

        MOV     TH1,#0D8H       ;改变定时中断的时间可以改正LED显示时一个灯特别亮的问题
	MOV     TL1,#0EFH 
 
	;MOV    TH1,#0E8H     	
	;MOV    TL1,#00H

        SETB    ET0          ;ET0(IE)允许定时器0中
	SETB    ET1
	SETB    TR0          ;(TCON.4)TR0=1启动定时器T0

	SETB    TR1

	SETB	EA           ;EA(IE)开中断
        RET

;************************
;外部中断1子程序,读AD转换结果
;************************
IINT1:  PUSH	ACC
	PUSH	DPH
	PUSH	DPL	
	PUSH	0D0H
        
	MOV     DPTR,#0FEFFH  ;P2.0接AD片选IN7为选择通道
	MOVX	A,@DPTR
     
        MOV     38H,A         ;38H中为AD转换值
	SETB	7FH           ;置7FH标志位说明采样结束

	POP 	0D0H
	POP	DPL
	POP	DPH
	POP	ACC
	RETI		      ;返回

;************************
;定时器T0中断
;************************

TT0:                         ;定时器T0,启动AD转换  	
        PUSH   DPH
	PUSH   DPL
        PUSH   ACC
	PUSH   0D0H

        MOV    TH0,#0D8H
	MOV    TL0,#0EFH     ;T0 10MS(12M)

	SETB    ET0          ;允许T0中断
        MOV    	A,39H        ;39H中为采样系数(恒定值)
        CJNE	A,51H,INCTK  ;51H中为TC. 39H不等于51H时跳转
                             ;判断采样周期到否,没有到跳转
AD:	
        MOV	DPTR,#0FEFFH ;
	MOVX	@DPTR,A      ;启动AD转换
	MOV	51H,#00H     ;清TC
       	LJMP	BACK

INCTK:  INC	51H          ;51H初值为00H TC=TC+1  
	LCALL 	KJ
BACK:   
        POP 0D0H
	POP ACC
	POP DPL
	POP DPH
        RETI

KJ:                              ;这段程序的作用,产生PWM脉冲
	PUSH   	ACC
	MOV    	A,5EH            ;5EH标志位,将CK送入PWM的标
	CJNE   	A,#01H,TEST2    
	MOV    	A,6AH            ;a变量6AH中
	JNZ    	ANOT0            ;A不等于0跳
	MOV    	A,#02H       
	MOV    	5EH,A            ;5EH标志位送入02H
	MOV    	A,5CH            ;5CH为B原值
	CLR    	C
	RRC    	A
	MOV    	59H,A            ;59H为B变量
	LJMP   	TEST2

ANOT0:  CLR    	C
	MOV    	A,6AH            ;6AH为a变量
	SUBB   	A,#01H
	MOV    	6AH,A
        CLR	P1.7             ;脉冲清零加热
 
TEST2:  MOV    	A,5EH            ;5EH标志位,将CK送入PWM的标志
	CJNE   	A,#02H,OUT       ;不相等时跳转
	MOV    	A,59H            ;59H中为B变量
	JNZ    	BNOT0            ;A不等于0跳转
	MOV    	A,#01H
	MOV    	5EH,A            ;5EH标志位置1
	MOV    	A,68H            ;68H中为a原值
	CLR    	C
        RRC    	A
	MOV    	6AH,A            ;6AH中为a变量
	LJMP   	OUT
BNOT0:  CLR    	C
	MOV    	A,59H
	SUBB   	A,#01H
	MOV    	59H,A
	SETB    P1.7             ;停止加热
OUT:    POP    	ACC
	RET

;*********************
;定时器T1中断发送显示
;*********************
TT1:
        MOV    TH1,#0D8H
	MOV    TL1,#0EFH     
 
        SETB   ET1          ;允许T1中断
       	LCALL  LED_DISPLAY
	RETI

TAB1:	DB 14H,14H,14H,14H,14H,14H,14H,14H,14H,14H,15H,16H,17H,18H,19H,1AH
	DB 1BH,1CH,1DH,1EH,1EH,1FH,20H,21H,23H,24H,25H,26H,27H,28H,29H,2AH
	DB 2BH,2CH,2DH,2EH,2FH,31H,32H,32H,33H,34H,35H,36H,37H,38H,39H,3AH
	DB 3BH,3CH,3DH,3EH,3FH,40H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH
	DB 4CH,4DH,4EH,4FH,50H,4FH,50H,51H,52H,53H,54H,55H,56H,57H,58H,59H
	DB 5AH,5BH,5CH,5DH,5EH,5FH,60H,61H,62H,63H,64H,64H,65H,65H,66H,66H
	DB 67H,68H,69H,6AH,6BH,6CH,6DH,6EH,6EH,6FH,6FH,70H,71H,72H,73H,74H
	DB 75H,76H,77H,78H,79H,7AH,7BH,7CH,7DH,7EH,7FH,80H,81H,82H,83H,84H
	DB 84H,85H,86H,87H,88H,89H,8AH,8BH,8CH,8EH,8FH,90H,91H,92H,93H,94H
	DB 95H,96H,97H,98H,99H,9AH,9BH,9BH,9CH,9CH,9DH,9DH,9EH,9EH,9FH,9FH
	DB 0A0H,0A1H,0A2H,0A3H,0A4H,0A5H,0A6H,0A7H,0A8H,0A9H,0AAH,0ABH,0ACH
	DB 0ADH,0AEH,0AFH
	DB 0B0H,0B0H,0B1H,0B2H,0B3H,0B4H,0B4H,0B5H,0B6H,0B7H,0B8H,0B9H,0BAH
	DB 0BBH,0BDH,0BEH
	DB 0BEH,0C1H,0C2H,0C3H,0C4H,0C5H,0C6H,0C8H,0CAH,0CCH,0CEH,0CFH,0D0H
	DB 0D1H,0D2H,0D4H
	DB 0D5H,0D6H,0D7H,0D8H,0D9H,0DAH,0DBH,0DCH,0DDH,0DEH,0E3H,0E6H,0E9H
	DB 0ECH,0F0H,0F2H
	DB 0F6H,0FAH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
	DB 0FFH,0FFH,0FFH
	DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
	DB 0FFH,0FFH,0FFH	
   	$include(PIDCONTRAL.asm)
	$include (LED_DISPLAY.ASM)
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -