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

📄 led.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		BEEP		0x0		
;#DEFINE		SW_IN		0x5		;1
#DEFINE		TEST		0x4		;1	
								;1
#DEFINE		GAS			0x2		;0
#DEFINE		LIGHT_IN 	0x5	;1
#DEFINE		SW_OUT		0x0		;0

;PORTC
#DEFINE		PERL		0x5
#DEFINE		LED1		0x4
#DEFINE		LED2		0x3
#DEFINE		LED3		0x2
#DEFINE		LED4		0x1
#DEFINE		LED5		0x0

#DEFINE		OUT_TIMER	0x10
#DEFINE		DOGCNT		0x11
#DEFINE		LG_FILTER	0x12
#DEFINE		FLAG		0x13
#DEFINE		START_COME	0x0
#DEFINE		WAIT_OVER	0x1

#DEFINE		DELAY		0x15
#DEFINE		BIT_CNT		0x16
#DEFINE		COM_DATA	0x17
#DEFINE		OUTB		0x1A



#DEFINE		SW_FILTER	0x1B
#DEFINE		OUT_VALUE	0x1C

#DEFINE		WIDTH		0x3;2--5
include   	"P16F505.INC"
				ORG		0x0000
		NOP
		NOP
		NOP
		GOTO	START

		ORG	0x10
START:
	INI_PIN:
		;MOVLW	0x2A		;11 1010		Only RB2 is output
		MOVLW	0x3A
		TRIS	PORTB
		MOVLW	0x0			;All RC are output 
		TRIS	PORTC			
	INI_CNTL:
	;	CLRF	OSCCAL
;	movlw	0Xff
;		movwf	OSCCAL	
		;MOVLW	0x5			;Prescaler assigned to tmr0 1:256 128 64 
		MOVLW	0x05	;0x3
		OPTION				;4m/4=1m 1us *64=0.064MS  
		MOVLW	0xFF	
		MOVWF	PORTB
		MOVWF	PORTC
		MOVWF	FLAG		

		MOVLW	0xF0
		MOVWF	TMR0

		CLRF	SW_FILTER

		MOVLW	0x0A
		MOVWF	LG_FILTER

		MOVLW	0xA
		MOVWF	OUT_TIMER
		MOVWF	DOGCNT

		CLRF	OUTB

		CLRF	PORTB
		CLRF	PORTC
		MOVLW	0x8
		MOVWF	BIT_CNT
		MOVLW	WIDTH
		MOVWF	DELAY
	WAIT:	
		CLRWDT
		;===========TIMER0============================
		TMRO_P:
				MOVF	TMR0,W
				BTFSS	STATUS,Z
				GOTO	WAIT
		
	;	COMF	PORTC,0x1
	;	GOTO	COM_OVER



		;================================================

		;==================================================
				MOVF	PORTB,W
				XORWF	OUTB,0x0

				ANDLW	0x02
				BTFSS	STATUS,Z
				GOTO	LG_CHANGE
				
				MOVLW	0x02
				MOVWF	LG_FILTER
				GOTO	FILTER_LG_OVER

		LG_CHANGE:
				DECFSZ	LG_FILTER,0x01
				GOTO	FILTER_LG_OVER

				MOVLW	0x02
				MOVWF	LG_FILTER
				
				BCF		OUTB,LIGHT_IN
				BTFSC	PORTB,LIGHT_IN
				BSF		OUTB,LIGHT_IN

		FILTER_LG_OVER:


			;	COMF PORTC,1
			;	GOTO	WAIT
		;-------------------------------------------------
				BTFSS	FLAG,WAIT_OVER
				GOTO	JUDGE_COME
				BTFSS	OUTB,LIGHT_IN 
				GOTO	COM_OVER
				BCF		FLAG,WAIT_OVER
				GOTO	COM_OVER

		JUDGE_COME:
				BTFSS	FLAG,START_COME			;judge start come
				GOTO	JUDGE_START
				GOTO	REC_DATA
		;-------------------------------------------------
		JUDGE_START:
				BTFSC	OUTB,LIGHT_IN			;judge start come
				GOTO	COM_OVER				
				
				BSF		FLAG,START_COME			;ONCE A LOW PULSE COME,SET START COME

				MOVLW	WIDTH
				MOVWF	DELAY						;SET DELAY VALUE

				MOVLW	0x2								;AND RESET DOG
				MOVWF	DOGCNT

				GOTO	COM_OVER
		;-------------------------------------------------
		REC_DATA: 
				DECFSZ	DELAY,0x1			;AFTER DEALY A MIDDLE WIDTH ABOUT 40MS
				GOTO	COM_OVER

				BTFSS	PORTB,LIGHT_IN		;JUDGE LIGHT INPUT
				GOTO	IN0
				GOTO	IN1
		IN0:	BCF		STATUS,C			;bit 0 to c
				GOTO	DEC_BIT_CNT
		IN1:	BSF		STATUS,C			;bit 1 to c

		DEC_BIT_CNT:
				RLF		COM_DATA,0x1		;SAVE THIS BIT
				BCF		FLAG,START_COME		;ONE BIT RECIEVE OVER 
				BSF		FLAG,WAIT_OVER	
				DECFSZ	BIT_CNT,0x1			
				GOTO	COM_OVER
				MOVF	COM_DATA,W
				MOVWF	OUT_VALUE			;FRESH OUT VALUE
		COM_OVER:
		;==========OUT_TIMER===============================
		OUT_TIMER_P:					;each 100ms fresh output value
				DECFSZ	OUT_TIMER,0x1		
				GOTO	OVER
				MOVLW	0x0C			;200MS			0xE IS STABLE  45MS 0x0A IS STABLE
				MOVWF	OUT_TIMER

		DO_10MS_OVER:
				BCF		PORTB,GAS
				BTFSC	OUT_VALUE,0x6
				BSF		PORTB,GAS
				CLRF	PORTC
				BTFSC	OUT_VALUE,0x0
				BSF		PORTC,LED1
				BTFSC	OUT_VALUE,0x1
				BSF		PORTC,LED2
				BTFSC	OUT_VALUE,0x2
				BSF		PORTC,LED3
				BTFSC	OUT_VALUE,0x3
				BSF		PORTC,LED4
				BTFSC	OUT_VALUE,0x4
				BSF		PORTC,LED5
				BTFSC	OUT_VALUE,0x5
				BSF		PORTC,PERL
		LED_OVER:  
		;=================DOGCNT===================================
		DOGCNT_P:
				DECFSZ	DOGCNT,0x1
				GOTO	OVER
				MOVLW	0x2		
				MOVWF	DOGCNT
				MOVLW	0x8
				MOVWF	BIT_CNT
				GOTO	OVER
		OVER:			
			MOVLW   0xE2
			MOVWF	TMR0

			GOTO	WAIT

;=========================================================================

END

⌨️ 快捷键说明

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