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

📄 试验.txt

📁 AT89s52的定时输出高电平方波的电磁阀控制程序。
💻 TXT
字号:
;==================================================================================
;  sw2 +1秒    sw3 +0.1秒     sw4 允许定时   sw5允许运行,禁止定时   sw7清零
;  P3.2运行
;==================================================================================


LED1	EQU	08H
LED2	EQU	09H
LED3	EQU	0AH
LED4	EQU	0BH
LED5	EQU	0CH
LED6	EQU	0DH
LED7	EQU	0EH

LedT0	EQU	0FH	;0-6 轮流点亮7个数据管
JS1	EQU	020H	
JS2	EQU	021H	
TimeS	EQU	022H	;秒
TimeM	EQU	023H	;0.1秒
NUMB1   EQU     024H    ;存十位
NUMB2   EQU     025H    ;存个位

	ORG     0000H 
	LJMP START;转入主程序

	ORG	000BH
       			
;定时器0中断入口

INT_TO:
	PUSH	ACC
	PUSH	PSW

;=============================显示
	CLR	TF0		;清定时0中断标志
	MOV	TH0,#0F6H	;2.5MS
	MOV	TL0,#03DH	;

	MOV	A,#11111110B	;关数码管
	ORL	P2,A

	MOV	A,LedT0
	CJNE	A,#0,INT_T0_1     ;秒
	MOV	A,LED1
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.7	
	MOV	LedT0,#1
	;点小数点
	SETB     P0.7
	
	LJMP	INT_T0_END
 INT_T0_1:                        ;0.1秒
  	
	MOV	A,LedT0
	CJNE	A,#1,INT_T0_2
	MOV	A,LED2
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.6	
	MOV	LedT0,#2		
	LJMP	INT_T0_END
 INT_T0_2:                        ;万位
  	
 	MOV	A,LedT0
	CJNE	A,#2,INT_T0_3
	MOV	A,LED3
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.5	
	MOV	LedT0,#3
	LJMP	INT_T0_END

 INT_T0_3:                             ;千位
  	
        MOV	A,LedT0
	CJNE	A,#3,INT_T0_4
	MOV	A,LED4
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.4	
	MOV	LedT0,#4
	LJMP	INT_T0_END
INT_T0_4:                            ;百位

	MOV	A,LedT0
	CJNE	A,#4,INT_T0_5
	MOV	A,LED5
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.3	
	MOV	LedT0,#5
	LJMP	INT_T0_END
  
INT_T0_5:                            ;十位

	MOV	A,LedT0
	CJNE	A,#5,INT_T0_6
	MOV	A,LED6
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.2	
	MOV	LedT0,#6
	LJMP	INT_T0_END
INT_T0_6:                            ;个位

	MOV	A,LED7
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.1	
	MOV	LedT0,#0
	LJMP	INT_T0_END   


 INT_T0_END:

	POP	PSW	
	POP	ACC

RETI
;========十六进制转换为十进制,A高位,B低位
HEXtoBCD:	
     mov   b,#0ah        ;  HEX>BCD
     div   ab
     anl   a,#00001111b
     anl   b,#00001111b
RET        

         
;==============================================外部中断0
INT_IN0:
      
        LJMP     CUTC
	
START:
	MOV	SP,#60H
	MOV	TMOD,#01H	;设定T0为十六位定时模式。
	MOV	TH0,#0F6H	;2MS
	MOV	TL0,#03DH	;
	       
	SETB	TR0		;开定时器0
	SETB	ET0		;致能定时0中断
	CLR	TF0		;清定时0中断标志

	SETB	EA		;开总中断

	MOV	LedT0,#00H
	MOV	DPTR,#TABLE
	MOV     NUMB1,#00
	MOV     NUMB2,#00
        MOV     TimeS,#00
	MOV     TimeM,#00
	MOV	LED1,#0
	MOV	LED2,#0
	MOV	LED3,#0
	MOV	LED4,#0
	MOV	LED5,#0
	MOV	LED6,#0
	MOV	LED7,#0
       

;=============================================允许
CUTC:
       	MOV	A,#00000011B
	ORL	A,P3
	CPL	A
        JNB	P1.3,$
	JNB	P3.3,KEY_SW3_RST
	JNB     P3.2,INT_TIME1
	JNB     P1.2,SCAN

	LJMP    CUTC

;=============================================
SCAN:	

	;按键扫描
	MOV	A,#11000000B
	ORL	A,P1
	CPL	A
	JZ	SCAN
	LCALL	DELAY10MS	;去抖动
	JNB	P1.0,KEY_SW1_INC1  ;秒
	JNB	P1.1,KEY_SW2_INC2  ;0.1秒
        JNB     P1.3,CUTC

	LJMP	SCAN


;===========================================================================时间设定十位
KEY_SW1_INC1:

	JNB	P1.0,$	;放开按键

	INC	LED1
	MOV	A,LED1
	MOV     TimeS,A
	MOV     NUMB1,A
	CJNE	A,#10,KEY_SW1_END	;等于10,进位
	MOV	LED1,#00
	MOV     TimeS,#00
        MOV     NUMB1,#00

KEY_SW1_END:

	JMP	SCAN
;=============================================时间设定个位
KEY_SW2_INC2:

	JNB	P1.1,$	;放开按键

	INC	LED2
	MOV	A,LED2
	MOV     TimeM,A
	MOV     NUMB2,A
	CJNE	A,#10,KEY_SW2_END
	MOV	LED2,#00
        MOV     TimeM,#00
	MOV     NUMB2,#00        

			
KEY_SW2_END:

	JMP	SCAN	
		
;=============================================清零
KEY_SW3_RST:
	MOV	LED3,#00
	MOV	LED4,#00
	MOV	LED5,#00
	MOV	LED6,#00
	MOV	LED7,#00

	JNB	P3.3,$
KEY_SW3_END:
        JMP	CUTC				
;=============================================运行
INT_TIME1: 



        SETB     P2.0
	JNB     P3.2,$

	INC	JS1
	MOV	A,JS1
	CJNE	A,#50,TIME_T1_END
	MOV	JS1,#00

	INC	JS2
	MOV	A,JS2
	CJNE	A,#50,TIME_T1_END
	MOV	JS2,#00 


      ;定时个位减1
        MOV      A,TimeM
        SUBB     A,#1
        MOV      TimeM,A
        JNC     TIME_T1_END
       	CLR     C
	MOV	TimeM,#09 
       ;定时十位减1
	MOV     A,TimeS
	SUBB    A,#1
	MOV     TimeS,A
	JNC     TIME_T1_END
	CLR     C
;	MOV     TimeS,NUMB1 
	MOV     A,NUMB1
	MOV     TimeS,A
	MOV     A,NUMB2
	MOV     TimeM,A
        CLR    P2.0
;============================================计数
;计数个位加1
        INC     LED7
        MOV     A,LED7
        CJNE    A,#10,KEY_SW3_END
	MOV     LED7,#00
;计数十位加1
	INC     LED6
	MOV     A,LED6
	CJNE    A,#10,KEY_SW3_END
	MOV     LED6,#00
;计数百位加1
 	INC     LED5
	MOV     A,LED5
	CJNE    A,#10,KEY_SW3_END
	MOV     LED5,#00       
;计数千位加1
	INC     LED4
	MOV     A,LED4
	CJNE    A,#10,KEY_SW3_END
	MOV     LED4,#00

;计数万位加1
	INC     LED3
	MOV     A,LED3
	CJNE    A,#10,KEY_SW3_END
	MOV     LED3,#00

	LJMP    INT_IN0
  




TIME_T1_END:

	MOV	A,TimeS
	CALL	HEXtoBCD

	MOV	A,TimeM
	CALL	HEXtoBCD
	SJMP    INT_TIME1

DELAY10MS: 
	MOV R4,#20
DELAY10MSA:
	MOV R5,#247
	DJNZ R5,$
	DJNZ R4,DELAY10MSA
RET

TABLE:

	DB      00111111B       ;0
	DB      00000110B       ;1
	DB      01011011B       ;2
	DB      01001111B       ;3
	DB      01100110B       ;4
	DB      01101101B       ;5
	DB      01111101B       ;6
	DB      00000111B       ;7
	DB      01111111B       ;8
	DB      01101111B       ;9
	DB      01110111B       ;A
	DB      01111100B       ;B
	DB      00111001B       ;C
	DB      01011110B       ;D
	DB      01111001B       ;E
	DB      01110001B       ;F
	DB      01000000B       ;-
	DB      00000000B       ;

	END 

⌨️ 快捷键说明

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