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

📄 4-led-2.asm

📁 使用PIC控制3个4LED数码管并联延时显示数值的程序
💻 ASM
字号:
  
   LIST     P=16F876A
   INCLUDE  "P16F876A.INC"

   #DEFINE DELAYTIME   0AH   ;CONTROL THE cycle number of timer
;***************************************
;定义变量区
;***************************************
   COUNT     EQU    20H
   COUNT1    EQU    21H
   COUNT2    EQU    22H
   COUNT3    EQU    23H
   CYCLE_NUM EQU    24H
   DELAY_NUM EQU    25H
   FLAG      EQU    26H

   W_TEMP    EQU    71H
   STATUS_TEMP EQU  72H
   
   ORG     0X0000
         
RESET    
   NOP
         
   GOTO    START
         
;***************************************
;中断入口程序
;***************************************
   ORG     0X0004
   GOTO    INT_SERVE



;***************************************
;主程序
;***************************************
         ORG    0010H
START
         BCF    STATUS,RP1
         BCF    STATUS,RP0
         BCF    INTCON,GIE
         CALL   INITIO
         CALL   INITTMR1
         CALL   INITINT
         BSF    INTCON,GIE
         CLRF   FLAG
NO_DISPLAY
        CLRF   FLAG
        CLRF   DELAY_NUM
        MOVLW  30H
        MOVWF  PORTA
        MOVLW  0E0H
        MOVWF  PORTB
        MOVLW  0FH
        MOVWF  PORTC

TEST_RB0
         BTFSC  PORTB,0
         GOTO   A_TEST_RB0
         GOTO   TEST

A_TEST_RB0
         CALL   DELAY
         GOTO   TEST_RB0
        
TEST     CALL    LONGDELAY
         BTFSC   PORTB,0
         GOTO    TEST_RB0
 

;The programme test the 0 bit of the flag.
;if the bit 0 is '0',the system will display
;the normal data.if the bit is '1',the register
;of delay1 will subtract 1 when the timer1 interrupt
;the data displayed will not be changed till
;the delay is subtracted to 0.
;****************************************************
;The first time
BEGIN
         MOVLW   06H
         MOVWF   DELAY_NUM
         BSF     FLAG,0
OUT_1
         NOP

TEST_RB0_1
         BTFSC  PORTB,0
         GOTO   A_TEST_RB0_1
         GOTO   TEST_1

A_TEST_RB0_1
         CALL   DELAY
         BTFSC  PORTB,0
         GOTO   NO_DISPLAY
         GOTO   TEST_RB0_1
        
TEST_1
         CALL    DELAY
         BTFSC   PORTB,0
         GOTO    TEST_RB0_1
     
         MOVLW   32H
         MOVWF   PORTA
         MOVLW   0E0H
         MOVWF   PORTB
         MOVLW   0CH
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   11H
         MOVWF   PORTA
         MOVLW   0E0H
         MOVWF   PORTB
         MOVLW   0DH
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   23H
         MOVWF   PORTA
         MOVLW   0C2H
         MOVWF   PORTB
         MOVLW   17H
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   30H
         MOVWF   PORTA
         MOVLW   0ACH
         MOVWF   PORTB
         MOVLW   29H
         MOVWF   PORTC

;THE bit 1 of the flag is to indicate if the display the normal data(OR the unormal data) should be over 
  
         BTFSS   FLAG,1
         GOTO    OUT_1 
         BCF     FLAG,1
;************************************************

;************************************************
;The second time
         MOVLW   06H
         MOVWF   DELAY_NUM
         BSF     FLAG,0
OUT_2 
         NOP

TEST_RB0_2
         BTFSC  PORTB,0
         GOTO   A_TEST_RB0_2
         GOTO   TEST_2

A_TEST_RB0_2
         CALL   DELAY
         BTFSC  PORTB,0
         GOTO   NO_DISPLAY
         GOTO   TEST_RB0_2
        
TEST_2
         CALL    DELAY
         BTFSC   PORTB,0
         GOTO    TEST_RB0_2
     
         MOVLW   32H
         MOVWF   PORTA
         MOVLW   0E0H
         MOVWF   PORTB
         MOVLW   0CH
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   12H
         MOVWF   PORTA
         MOVLW   0E0H
         MOVWF   PORTB
         MOVLW   0DH
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   27H
         MOVWF   PORTA
         MOVLW   0C2H
         MOVWF   PORTB
         MOVLW   17H
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   30H
         MOVWF   PORTA
         MOVLW   0AEH
         MOVWF   PORTB
         MOVLW   49H
         MOVWF   PORTC

;THE bit 1 of the flag is to indicate if the display the normal data(OR the unormal data) should be over 
  
         BTFSS   FLAG,1
         GOTO    OUT_2 
         BCF     FLAG,1
;************************************************

;************************************************
;The third time 
         MOVLW   06H
         MOVWF   DELAY_NUM
         BSF     FLAG,0
OUT_3 
         NOP

TEST_RB0_3
         BTFSC  PORTB,0
         GOTO   A_TEST_RB0_3
         GOTO   TEST_3

A_TEST_RB0_3
         CALL   DELAY
         BTFSC  PORTB,0
         GOTO   NO_DISPLAY
         GOTO   TEST_RB0_3
        
TEST_3
         CALL    DELAY
         BTFSC   PORTB,0
         GOTO    TEST_RB0_3
     
         MOVLW   32H
         MOVWF   PORTA
         MOVLW   0E0H
         MOVWF   PORTB
         MOVLW   0CH
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   13H
         MOVWF   PORTA
         MOVLW   0E0H
         MOVWF   PORTB
         MOVLW   0DH
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   21H
         MOVWF   PORTA
         MOVLW   0C2H
         MOVWF   PORTB
         MOVLW   17H
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   30H
         MOVWF   PORTA
         MOVLW   0B2H
         MOVWF   PORTB
         MOVLW   29H
         MOVWF   PORTC

;THE bit 1 of the flag is to indicate if the display the normal data(OR the unormal data) should be over 
  
         BTFSS   FLAG,1
         GOTO    OUT_3 
         BCF     FLAG,1
;************************************************

;************************************************
;The fourth time
         MOVLW   06H
         MOVWF   DELAY_NUM
         BSF     FLAG,0

OUT_4
         NOP
TEST_RB0_4
         BTFSC  PORTB,0
         GOTO   A_TEST_RB0_4
         GOTO   TEST_4

A_TEST_RB0_4
         CALL   DELAY
         BTFSC  PORTB,0
         GOTO   NO_DISPLAY
         GOTO   TEST_RB0_4
        
TEST_4
         CALL    DELAY
         BTFSC   PORTB,0
         GOTO    TEST_RB0_4
     
         MOVLW   32H
         MOVWF   PORTA
         MOVLW   0E0H
         MOVWF   PORTB
         MOVLW   0CH
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   13H
         MOVWF   PORTA
         MOVLW   0E0H
         MOVWF   PORTB
         MOVLW   0DH
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   29H
         MOVWF   PORTA
         MOVLW   0C2H
         MOVWF   PORTB
         MOVLW   17H
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   30H
         MOVWF   PORTA
         MOVLW   0B0H
         MOVWF   PORTB
         MOVLW   39H
         MOVWF   PORTC

;THE bit 1 of the flag is to indicate if the display the normal data(OR the unormal data) should be over 
  
         BTFSS   FLAG,1
         GOTO    OUT_4 
         BCF     FLAG,1
;************************************************

;************************************************
;The fifth time
         MOVLW   06H
         MOVWF   DELAY_NUM
         BSF     FLAG,0
OUT_5
         NOP
TEST_RB0_5
         BTFSC  PORTB,0
         GOTO   A_TEST_RB0_5
         GOTO   TEST_5

A_TEST_RB0_5
         CALL   DELAY
         BTFSC  PORTB,0
         GOTO   NO_DISPLAY
         GOTO   TEST_RB0_5
        
TEST_5
         CALL    DELAY
         BTFSC   PORTB,0
         GOTO    TEST_RB0_5
     
         MOVLW   32H
         MOVWF   PORTA
         MOVLW   0E0H
         MOVWF   PORTB
         MOVLW   0CH
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   12H
         MOVWF   PORTA
         MOVLW   0E0H
         MOVWF   PORTB
         MOVLW   0DH
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   25H
         MOVWF   PORTA
         MOVLW   0C2H
         MOVWF   PORTB
         MOVLW   17H
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   30H
         MOVWF   PORTA
         MOVLW   0AEH
         MOVWF   PORTB
         MOVLW   29H
         MOVWF   PORTC

;THE bit 1 of the flag is to indicate if the display the normal data(OR the unormal data) should be over 
  
         BTFSS   FLAG,1
         GOTO    OUT_5 
         BCF     FLAG,1
;************************************************

;************************************************
;The sixth time
         MOVLW   06H
         MOVWF   DELAY_NUM
         BSF     FLAG,0

OUT_6
         NOP
TEST_RB0_6
         BTFSC  PORTB,0
         GOTO   A_TEST_RB0_6
         GOTO   TEST_6

A_TEST_RB0_6
         CALL   DELAY
         BTFSC  PORTB,0
         GOTO   NO_DISPLAY
         GOTO   TEST_RB0_6
        
TEST_6
         CALL    DELAY
         BTFSC   PORTB,0
         GOTO    TEST_RB0_6
     
         MOVLW   32H
         MOVWF   PORTA
         MOVLW   0E0H
         MOVWF   PORTB
         MOVLW   0CH
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   11H
         MOVWF   PORTA
         MOVLW   0E0H
         MOVWF   PORTB
         MOVLW   0DH
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   29H
         MOVWF   PORTA
         MOVLW   0C2H
         MOVWF   PORTB
         MOVLW   17H
         MOVWF   PORTC
         CALL    DELAY

         MOVLW   30H
         MOVWF   PORTA
         MOVLW   0ACH
         MOVWF   PORTB
         MOVLW   19H
         MOVWF   PORTC

;THE bit 1 of the flag is to indicate if the display the normal data(OR the unormal data) should be over 
  
         BTFSS   FLAG,1
         GOTO    OUT_6 
         BCF     FLAG,1
         GOTO    BEGIN
;************************************************


INITIO
        BSF    STATUS,RP0
        MOVLW  00H;
        MOVWF  TRISA
        MOVLW  01H
        MOVWF  TRISB
        MOVLW  00H             
        MOVWF  TRISC
        BCF    STATUS,RP0
        MOVLW  30H
        MOVWF  PORTA
        MOVLW  0E0H
        MOVWF  PORTB
        MOVLW  0EH
        MOVWF  PORTC
        RETURN

INITTMR1
;******************************
;INITIAL TMR1,TMR1=0B DB,WHEN 
;THE TIMER OVERFLOW,THE DELAY IS 0.5S
;******************************
         MOVLW  01H
         MOVWF	TMR1L
	     MOVLW	1FH
	     MOVWF	TMR1H
	     MOVLW  31H            
	     MOVWF	T1CON
       	 RETURN


INITINT
;******************************                
;INITIAL THE INTERRUPT
;******************************
        BSF    INTCON,PEIE
        BSF    STATUS,RP0
        BSF    PIE1,TMR1IE
        BCF    STATUS,RP0
        RETURN



DELAY
    MOVLW    20H
    MOVWF    COUNT
DLOOP
    DECFSZ   COUNT,F
    GOTO     DLOOP
    RETURN
;******************************
;*LONGDELAY  长延时子程序
;******************************
LONGDELAY
    CLRF     COUNT
    CLRF     COUNT1
    MOVLW    0X03
    MOVWF    COUNT2
LDLOOP
    DECFSZ   COUNT,F
    GOTO     LDLOOP
    DECFSZ   COUNT1,F
    GOTO     LDLOOP
    DECFSZ   COUNT2,F
    GOTO     LDLOOP
    RETURN



INT_SERVE
   MOVWF    W_TEMP
   MOVF     STATUS,W
   MOVWF    STATUS_TEMP

   BCF      STATUS,RP0
   BCF      STATUS,RP1

   BCF      PIR1,TMR1IF
   MOVLW  01H
   MOVWF  TMR1L
   MOVLW  1FH
   MOVWF  TMR1H
   MOVLW    31H            
   MOVWF	T1CON

   BTFSS    FLAG,0
   GOTO     BACK
   DECFSZ   DELAY_NUM,F
   GOTO     BACK
   BSF      FLAG,1
   BCF      FLAG,0

BACK
   MOVF     STATUS_TEMP,W
   MOVWF    STATUS
   MOVF     W_TEMP,W
   RETFIE
 
    END

⌨️ 快捷键说明

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