📄 led1.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 + -