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

📄 led1.asm

📁 16f505程序 一个单线半双工接口的LED显示仪表开关板
💻 ASM
字号:
;===========================================================
;==========GAS LED DISPLAY CONTROL==========================
;===========================================================			
;1-8ms				PETROL_LED				25ms
;8-10ms				GAS_LED	SHANSUO			75ms
;10-18ms			LED1					125ms
;18-20ms			LED2
;20-28ms			LED3					225ms
;28-30ms			LED4
;30-38ms			LED5					325ms
;38-40ms			LED6					375ms
;40					SHANSUO 
;PORTB
#DEFINE		LIGHT_IN 	0x5
#DEFINE		GAS			0x2
;PORTC
#DEFINE		PERL		0x5
#DEFINE		LED1		0x4
#DEFINE		LED2		0x3
#DEFINE		LED3		0x2
#DEFINE		LED4		0x1
#DEFINE		LED5		0x0

#DEFINE		TMRA		0x10
#DEFINE		TMRB		0x11
#DEFINE		TMRC		0x12
#DEFINE		FLAG		0x13
#DEFINE		FLASH_BIT	0x0

#DEFINE		OLD			0x14
#DEFINE		OLD_PIN		0x0
#DEFINE		FILTER		0x15
#DEFINE		OLD1		0x16
#DEFINE		TIME		0x17


#DEFINE		LED_EN		0x18
#DEFINE		FLASH_EN	0x19
#DEFINE		GAS_BIT		0x0
#DEFINE		LED5_BIT	0x1
#DEFINE		LED4_BIT	0x2
#DEFINE		LED3_BIT	0x3
#DEFINE		LED2_BIT	0x4
#DEFINE		LED1_BIT	0x5
#DEFINE		PERL_BIT	0x6
#DEFINE		OUTB		0x1A
#DEFINE		OUTC		0x1B
#DEFINE		TIMEA		0x1C


include   	"P16F505.INC"
				ORG		0x0000
		NOP
		NOP
		NOP
		GOTO	START

		ORG	0x10
START:
	INI_PIN:
		MOVLW	0x3B		;111011		Only RB2 is output
		;MOVLW	0x1B
		TRIS	PORTB
		MOVLW	0x0			;All RC are output 
		TRIS	PORTC			
	INI_CNTL:
		CLRF	OSCCAL
		
		MOVLW	0x5			;Prescaler assigned to tmr0 1:256 128 64 
		OPTION				;4m/4=1m 1us *64=0.064MS  
		MOVLW	0xFF	
		MOVWF	PORTB
		MOVWF	PORTC
		MOVWF	FLAG		

		MOVLW	0xF0
		MOVWF	TMR0

		MOVLW	0x38
		MOVWF	TMRC

		MOVLW	0xA
		MOVWF	TMRA
		MOVWF	TMRB

		MOVLW	0x20
		MOVWF	OLD
		MOVWF	OLD1
		MOVLW	0x5
		MOVWF	FILTER
		CLRF	OUTB
		CLRF	OUTC
		CLRF	PORTB
		CLRF	PORTC
		CLRF	FLASH_EN
		CLRF	LED_EN
	WAIT:	
		CLRWDT
		;===========TIMER0============================
		TMRO_P:
			MOVF	TMR0,W
			BTFSS	STATUS,Z
			GOTO	WAIT
			MOVLW	0xF0
			MOVWF	TMR0		;1MS

			CALL	FILTER_LIGHT_IN
		;==========TMRA===============================
		TMRA_P:
			DECFSZ	TMRA,1
			GOTO	WAIT	
			MOVLW	0xA			;10MS
			MOVWF	TMRA
					
	
			BTFSC	OLD,LIGHT_IN
			;BTFSC	PORTB,LIGHT_IN
			GOTO	FRESH_TIME
			BSF		OLD1,LIGHT_IN
			MOVLW	0x38
			MOVWF	TMRC

			INCFSZ	TIMEA,1
			GOTO	DO_10MS_OVER
			MOVLW	0xFF
			MOVWF	TIMEA
			GOTO	DO_10MS_OVER

		FRESH_TIME:
			BTFSS	OLD1,LIGHT_IN
			GOTO	JUDGE_OVFL

		LOAD_TIME:
			BCF		OLD1,LIGHT_IN
			MOVF	TIMEA,W
			MOVWF	TIME
			CLRF	TIMEA
			GOTO	DO_10MS_OVER
		JUDGE_OVFL:
			INCFSZ	TMRC,1
			GOTO	DO_10MS_OVER
			; 2秒溢出
			CLRF	TIME
			MOVLW	0x38
			MOVWF	TMRC
		DO_10MS_OVER:
;1-8ms				PETROL_LED				25ms
;8-10ms				GAS_LED	SHANSUO			75ms
;10-18ms			GAS_LED					125ms
;18-20ms			LED1
;20-28ms			LED2					225ms
;28-30ms			LED3
;30-38ms			LED4					325ms
;38-40ms			LED5					375ms
;40					SHANSUO 
	;	MOVLW	0x0
	;	MOVWF	TIME
		;=================TMRB===================================
		TMRB_P:
			DECFSZ	TMRB,1
			GOTO	WAIT
			MOVLW	0x5		;1S
			MOVWF	TMRB

			CALL	CAL_DISPLAY_SUB
			CALL	DISPLAY_SUB
			GOTO	WAIT
RETURN
;===================================================================
;===================================================================
CAL_DISPLAY_SUB:	
	;	BTFSS	OLD1,LIGHT_IN
	;	RETURN
	;	BCF		OLD1,LIGHT_IN

		;===============================	
			MOVLW	0x40
			SUBWF	TIME,0	;F-0x40
			BTFSS	STATUS,C
			GOTO	LT40
		GT40:
			CLRF	FLASH_EN
			BSF		FLASH_EN,GAS_BIT
			CLRF	LED_EN
			RETURN
		;===============================
		LT40:
			MOVLW	0x38
			SUBWF	TIME,0	;F-0x40
			BTFSS	STATUS,C
			GOTO	LT38
		GT38:
			CLRF	FLASH_EN
			BSF		LED_EN,GAS_BIT
			BSF		LED_EN,LED5_BIT
			BSF		LED_EN,LED4_BIT
			BSF		LED_EN,LED3_BIT
			BSF		LED_EN,LED2_BIT
			BSF		LED_EN,LED1_BIT
			BCF		LED_EN,PERL_BIT
			RETURN		
		;==============================
		LT38:
			MOVLW	0x30
			SUBWF	TIME,0	;F-0x40
			BTFSS	STATUS,C
			GOTO	LT30
		GT30:
			CLRF	FLASH_EN
			BSF		LED_EN,GAS_BIT	
			BCF		LED_EN,LED5_BIT	
			BSF		LED_EN,LED4_BIT	
			BSF		LED_EN,LED3_BIT	
			BSF		LED_EN,LED2_BIT	
			BSF		LED_EN,LED1_BIT	
			BCF		LED_EN,PERL_BIT	
			RETURN		
		;==============================		
		LT30:
			MOVLW	0x28
			SUBWF	TIME,0	;F-0x40
			BTFSS	STATUS,C
			GOTO	LT28
		GT28:
			CLRF	FLASH_EN
			BSF		LED_EN,GAS_BIT	
			BCF		LED_EN,LED5_BIT	
			BCF		LED_EN,LED4_BIT	
			BSF		LED_EN,LED3_BIT	
			BSF		LED_EN,LED2_BIT	
			BSF		LED_EN,LED1_BIT	
			BCF		LED_EN,PERL_BIT	
			RETURN		
		;==============================			
		LT28:
			MOVLW	0x20
			SUBWF	TIME,0	;F-0x40
			BTFSS	STATUS,C
			GOTO	LT20
		GT20:
			CLRF	FLASH_EN
			BSF		LED_EN,GAS_BIT	
			BCF		LED_EN,LED5_BIT	
			BCF		LED_EN,LED4_BIT	
			BCF		LED_EN,LED3_BIT	
			BSF		LED_EN,LED2_BIT	
			BSF		LED_EN,LED1_BIT	
			BCF		LED_EN,PERL_BIT	
			RETURN		
		;==============================	
		LT20:
			MOVLW	0x18
			SUBWF	TIME,0	;F-0x40
			BTFSS	STATUS,C
			GOTO	LT18
		GT18:
			CLRF	FLASH_EN
			BSF		LED_EN,GAS_BIT	
			BCF		LED_EN,LED5_BIT	
			BCF		LED_EN,LED4_BIT	
			BCF		LED_EN,LED3_BIT	
			BCF		LED_EN,LED2_BIT	
			BSF		LED_EN,LED1_BIT	
			BCF		LED_EN,PERL_BIT	
			RETURN		
		;==============================	
		LT18:
			MOVLW	0x10
			SUBWF	TIME,0	;F-0x40
			BTFSS	STATUS,C
			GOTO	LT10
		GT10:
			CLRF	FLASH_EN
			BSF		LED_EN,GAS_BIT	
			BCF		LED_EN,LED5_BIT	
			BCF		LED_EN,LED4_BIT	
			BCF		LED_EN,LED3_BIT	
			BCF		LED_EN,LED2_BIT	
			BCF		LED_EN,LED1_BIT	
			BCF		LED_EN,PERL_BIT	
			RETURN		
		;==============================	
		LT10:
			MOVLW	0x8
			SUBWF	TIME,0	;F-0x40
			BTFSS	STATUS,C
			GOTO	LT8
		GT8:
			CLRF	FLASH_EN
			BSF		FLASH_EN,GAS_BIT		
			BCF		LED_EN,GAS_BIT	
			BCF		LED_EN,LED5_BIT	
			BCF		LED_EN,LED4_BIT	
			BCF		LED_EN,LED3_BIT	
			BCF		LED_EN,LED2_BIT	
			BCF		LED_EN,LED1_BIT	
			BCF		LED_EN,PERL_BIT	
			RETURN		
		;==============================	
		LT8:
			MOVF	TIME,W
			BTFSS	STATUS,Z
			GOTO	PERL_WORK
			BCF		LED_EN,PERL_BIT
			GOTO	NOT_WORK
		PERL_WORK:
			BSF		LED_EN,PERL_BIT	
		NOT_WORK:
			BCF		FLASH_EN,GAS_BIT		
			BCF		LED_EN,GAS_BIT	
			BCF		LED_EN,LED5_BIT	
			BCF		LED_EN,LED4_BIT	
			BCF		LED_EN,LED3_BIT	
			BCF		LED_EN,LED2_BIT	
			BCF		LED_EN,LED1_BIT	
		;==============================
	RETURN
;========================================================================
DISPLAY_SUB:
		BTFSS	FLAG,FLASH_BIT
		GOTO	SET_FLASH_BIT
	CLR_FLASH_BIT:
		BCF		FLAG,FLASH_BIT
		GOTO	SET_FLASH_BIT_OVER
	SET_FLASH_BIT:
		BSF		FLAG,FLASH_BIT
	SET_FLASH_BIT_OVER:
	;==========GAS DISPLAY==========================
		BTFSS	LED_EN,GAS_BIT
		GOTO	JUDGE_GAS_FLASH
		BSF		OUTB,GAS
		GOTO	GAS_LED_DIS_OVER
	JUDGE_GAS_FLASH:
		BTFSS	FLASH_EN,GAS_BIT
		GOTO	CLOSE_GAS_LED
	FLASH_GAS_LED:
		BTFSS	FLAG,FLASH_BIT
		GOTO	CLOSE_GAS_LED
		BSF		OUTB,GAS
		GOTO	GAS_LED_DIS_OVER
	CLOSE_GAS_LED:
		BCF		OUTB,GAS
	GAS_LED_DIS_OVER:
	;==========LED1 DISPLAY==========================
		BTFSS	LED_EN,LED1_BIT
		GOTO	CLOSE_LED1
		BSF		OUTC,LED1
		GOTO	LED1_DIS_OVER
	CLOSE_LED1:
		BCF		OUTC,LED1
	LED1_DIS_OVER:
	;==========LED2 DISPLAY==========================
		BTFSS	LED_EN,LED2_BIT
		GOTO	CLOSE_LED2
		BSF		OUTC,LED2
		GOTO	LED2_DIS_OVER
	CLOSE_LED2:
		BCF		OUTC,LED2
	LED2_DIS_OVER:
	;==========LED3 DISPLAY==========================
		BTFSS	LED_EN,LED3_BIT
		GOTO	CLOSE_LED3
		BSF		OUTC,LED3
		GOTO	LED3_DIS_OVER
	CLOSE_LED3:
		BCF		OUTC,LED3
	LED3_DIS_OVER:
	;==========LED4 DISPLAY==========================
		BTFSS	LED_EN,LED4_BIT
		GOTO	CLOSE_LED4
		BSF		OUTC,LED4
		GOTO	LED4_DIS_OVER
	CLOSE_LED4:
		BCF		OUTC,LED4
	LED4_DIS_OVER:
	;==========LED5 DISPLAY==========================
		BTFSS	LED_EN,LED5_BIT
		GOTO	CLOSE_LED5
		BSF		OUTC,LED5
		GOTO	LED5_DIS_OVER
	CLOSE_LED5:
		BCF		OUTC,LED5
	LED5_DIS_OVER:
	;==========PERL DISPLAY==========================
		BTFSS	LED_EN,PERL_BIT
		GOTO	CLOSE_PERL
		BSF		OUTC,PERL
		GOTO	PERL_DIS_OVER
	CLOSE_PERL:
		BCF		OUTC,PERL
	PERL_DIS_OVER:
	;================================================
DISPLAY_SUB_OVER:
	MOVF	OUTB,W
	MOVWF	PORTB
	MOVF	OUTC,W
	MOVWF	PORTC
	RETURN
;==================================================================
FILTER_LIGHT_IN:
		;===========GET LIGHT INPUT===================
		MOVF	PORTB,W
		MOVWF	OLD
		RETURN
		;===========JUDGE INPUT	CHANGE================
		XORWF	OLD,0
		ANDLW	0x20
		BTFSC	STATUS,Z
		RETURN

	FILTER_INPUT:
		DECFSZ	FILTER,1
		RETURN
		;==========RESET FILTER=======================
		MOVLW	0x5
		MOVWF	FILTER
		;==========FRESH OLD INPUT VALUE==============
		COMF	OLD,1
RETURN
;=========================================================================

END

⌨️ 快捷键说明

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