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

📄 infrared.a51

📁 Infrared Interruption counter (AT89C2051)
💻 A51
字号:
 INCLUDE REG_51.PDF
 
RB0     EQU     000H    ; Select Register Bank 0
RB1     EQU     008H    ; Select Register Bank 1  ...poke to PSW to use

DIS_A	EQU	P1.5	
DIS_B	EQU	P1.4	
DIS_C	EQU	P1.3
DIS_D	EQU	P1.1
DIS_E	EQU	P1.2
DIS_F	EQU	P1.6
DIS_G	EQU	P1.7

DIS1	EQU	P1.0
DIS2	EQU	P3.7                
DIS3	EQU	P3.3

INPUT	EQU	P3.4

BUZZER	EQU	P3.5

DSEG            ; This is internal data memory
ORG     20H     ; Bit adressable memory

COUNT:	DS	1
SPEED:	DS	1
VALUE_1:	DS	1
VALUE_2:	DS	1
VALUE_3:	DS	1

NUMB1:	DS	1
NUMB2:	DS	1
NUMB3:	DS	1
FINAL:		DS	1
FIN:		DS	1
TENS:		DS	1
STACK	DATA	3FH
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; ***MACRO'S***

CSEG     AT      0        ; RESET VECTOR
;---------==========----------==========---------=========---------
;              PROCESSOR INTERRUPT AND RESET VECTORS
;---------==========----------==========---------=========---------
 
	ORG     00H    		; Reset
	JMP     MAIN

	ORG 	000BH		;Timer Interrupt0
	JMP 	REFRESH

;---------==========----------==========---------=========---------
;  Main routine. Program execution starts here.
;---------==========----------==========---------=========---------
MAIN:	 
		MOV PSW,#RB0      	; Select register bank 0
	   MOV SP,STACK
		MOV SPEED,#00H
		MOV COUNT,#00H
		CLR BUZZER
		CLR DIS1
		CLR DIS2
		CLR DIS3
		
		MOV TMOD,#01H		;enable timer0 for scanning
		MOV TL0,#00H
		MOV TH0,#0FDH
		SETB ET0		
		CLR    IT1          		 ; triggered by a high to low transition
		SETB EA		
		SETB TR0		;Start the Timer
		MOV VALUE_1,#00H
		MOV VALUE_2,#00H
		MOV VALUE_3,#00H
		CALL DELAYS
		CALL DELAYS
		CALL DELAYS
		
MAINS:		
		MOV VALUE_1,#00H
		MOV VALUE_2,#00H
		MOV VALUE_3,#00H
		
		SETB INPUT
		MOV DPTR,#0000H
		
		
UPP:	JNB INPUT,$
		SETB BUZZER
		INC DPTR
		MOV A,DPL
		CJNE A,#0E8H,FGH1
		MOV A,DPH
		CJNE A,#03H,FGH1
		AJMP MAINS
FGH1:	MOV R1,DPH
      MOV R2,DPL
		MOV R3,#00D
      MOV R4,#00D
      MOV R5,#00D
      MOV R6,#00D
      MOV R7,#00D  
		CALL HEX2BCD
		MOV VALUE_3,R3
	   MOV VALUE_2,R4
	   MOV VALUE_1,R5
	   JB INPUT,$
	   JB INPUT,$
	   CALL DELAY
	   CLR BUZZER
	   AJMP UPP	
;**********************************************************
DELAY:
	MOV R1,#4FH
REP2:	MOV R2,#0FFH
REP1:	NOP
	DJNZ R2,REP1
	DJNZ R1,REP2
	RET
;**************************************************	
DELAYS:
	MOV R1,#0FFH
RSP2:	MOV R2,#0FFH
RSP1:	NOP
	DJNZ R2,RSP1
	DJNZ R1,RSP2
	RET
;**************************************************	
HEX2BCD: 
		  MOV B,#10D
        MOV A,R2
        DIV AB
        MOV   R3,B              ;   
        MOV   B,#10             ; R7,R6,R5,R4,R3
        DIV   AB
        MOV   R4,B
        MOV   R5,A
        CJNE R1,#0H,HIGH_BYTE   ; CHECK FOR HIGH BYTE
        SJMP ENDD
 
HIGH_BYTE:
			MOV   A,#6
        	ADD   A,R3
			MOV   B,#10
			DIV   AB
        	MOV   R3,B
			ADD   A,#5
        	ADD   A,R4
			MOV   B,#10
			DIV   AB
        	MOV   R4,B
			ADD   A,#2
        	ADD   A,R5
			MOV   B,#10
			DIV   AB
        	MOV   R5,B
        	CJNE R6,#00D,ADD_IT
        	SJMP CONTINUE
ADD_IT:
        	ADD A,R6
CONTINUE:
       	 MOV R6,A
       	 DJNZ R1,HIGH_BYTE
       	 MOV B, #10D
      	 MOV A,R6
       	 DIV AB
       	 MOV R6,B
       	 MOV R7,A
ENDD:  	 RET
;***************************************************************************
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
; 	7 SEGMENT DISPLAY ROUTINE
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DISP:
	MOV R2,SPEED
	CJNE R2,#00H,AAS1
	CLR DIS_A
	CLR DIS_B
	CLR DIS_C
	CLR DIS_D
	CLR DIS_E
	CLR DIS_F
	SETB DIS_G
	RET
AAS1:	CJNE R2,#01H,AS2
	CLR DIS_B
	CLR DIS_C
	SETB DIS_A
	SETB DIS_D
	SETB DIS_E
	SETB DIS_F
	SETB DIS_G
	RET
AS2:	CJNE R2,#02H,AS3
	CLR DIS_A
	CLR DIS_B
	CLR DIS_D
	CLR DIS_E
	CLR DIS_G
	SETB DIS_C
	SETB DIS_F
	RET
AS3:	CJNE R2,#03H,AS4
	CLR DIS_A    
	CLR DIS_B
	CLR DIS_C
	CLR DIS_D
	CLR DIS_G
	SETB DIS_E
	SETB DIS_F
	RET
AS4:	CJNE R2,#04H,AS5
	CLR DIS_B
	CLR DIS_C
	CLR DIS_F
	CLR DIS_G
	SETB DIS_A
	SETB DIS_D
	SETB DIS_E
	RET
AS5:	CJNE R2,#05H,AS6
	CLR DIS_A
	CLR DIS_C
	CLR DIS_D
	CLR DIS_F
	CLR DIS_G
	SETB  DIS_B
	SETB DIS_E
	RET
AS6:	CJNE R2,#06H,AS7
	CLR DIS_A
	CLR DIS_C
	CLR DIS_D
	CLR DIS_E
	CLR DIS_F
	CLR DIS_G
	SETB DIS_B
	RET
AS7:	CJNE R2,#07H,AS8
	CLR DIS_A
	CLR DIS_B
	CLR DIS_C
	SETB DIS_D
	SETB DIS_E
	SETB DIS_F
	SETB DIS_G
	RET
AS8:	CJNE R2,#08H,AS9
	CLR DIS_A
	CLR DIS_B
	CLR DIS_C
	CLR DIS_D
	CLR DIS_E
	CLR DIS_F
	CLR DIS_G
	RET
AS9:	CJNE R2,#09H,AS10
	CLR DIS_A
	CLR DIS_B
	CLR DIS_C
	CLR DIS_D
	CLR DIS_F
	CLR DIS_G
	SETB DIS_E
	RET
AS10:	CJNE R2,#15H,AS11		;symbol for -
	SETB DIS_A
	SETB DIS_B
	SETB DIS_C
	SETB DIS_D
	SETB DIS_E
	SETB DIS_F
	CLR DIS_G
	RET
AS11:	CJNE R2,#16H,AS12		;switch off all disp
	SETB DIS_A
	SETB DIS_B
	SETB DIS_C
	SETB DIS_D
	SETB DIS_E
	SETB DIS_F
	SETB DIS_G
	RET
AS12:	MOV SPEED,#00H
	AJMP DISP
;**********************************************************	
;		INTRRUPT ROUTINE TO REFRESH THE DISPLAY
;**********************************************************	
REFRESH:
	PUSH   PSW           ; save current registerset
   MOV    PSW,#RB1
   PUSH   ACC
	INC COUNT
	MOV R4,COUNT
QA1:	CJNE R4,#01H,QA2
	MOV SPEED,VALUE_1
	SETB DIS1
	CLR DIS2
	CLR DIS3
	CALL DISP 
	AJMP DOWN   
QA2:	CJNE R4,#02H,QA3
	MOV SPEED,VALUE_2
	CLR DIS1
	SETB DIS2
	CLR DIS3
	CALL DISP 
	AJMP DOWN
QA3:	CJNE R4,#03H,QA4
	MOV SPEED,VALUE_3
	CLR DIS1
	CLR DIS2
	SETB DIS3
	CALL DISP 
	AJMP DOWN
QA4:	MOV COUNT,#01H
	MOV R4,COUNT
	AJMP QA1
DOWN:	MOV TL0,#0FFH
	MOV TH0,#0F0H
	POP    ACC
   POP    PSW
	RETI
;**********************************************************	




END


⌨️ 快捷键说明

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