Guest User

Untitled

a guest
Apr 14th, 2018
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MPASM 4.14 KB | None | 0 0
  1. ;*************************************************************************************************
  2. ;**                                             **
  3. ;**             Header Information                      **
  4. ;**                                             **
  5. ;*************************************************************************************************
  6.  
  7.             list        p=16F628A, r=dec, w=-302
  8.             include     <P16F628A.INC>
  9.             __config    _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
  10.  
  11. ;*************************************************************************************************
  12. ;**                                             **
  13. ;**             Variable Declarations                       **
  14. ;**                                             **
  15. ;*************************************************************************************************
  16.  
  17.             cblock      0x20
  18.                     ANODE
  19.                     DIGIT1
  20.                     DIGIT2
  21.             endc
  22.  
  23.             cblock      0x70
  24.                     W_TEMP
  25.                     STATUS_TEMP
  26.                     PCLATH_TEMP
  27.             endc
  28.  
  29. ;*************************************************************************************************
  30. ;**                                             **
  31. ;**             Start Main Code                         **
  32. ;**                                             **
  33. ;*************************************************************************************************
  34.  
  35.             org     0x000           ;reset vector
  36.             goto        START
  37.  
  38. ;*************************************************************************************************
  39. ;**                                             **
  40. ;**             Interrupt Handler                       **
  41. ;**                                             **
  42. ;*************************************************************************************************
  43.  
  44.             org     0x004           ;interrupt vector
  45. ;interrupt context save
  46.             movwf       W_TEMP
  47.             swapf       STATUS,W
  48.             movwf       STATUS_TEMP
  49.             movfw       PCLATH
  50.             movwf       PCLATH_TEMP
  51.  
  52.             btfsc       INTCON,T0IF     ;timer 0 interrupt?
  53.             goto        Display         ;yes
  54.             goto        ISRExit         ;no, exit ISR      
  55.  
  56. Display         movfw       PORTB
  57.             movwf       ANODE
  58.             btfsc       ANODE,4         ;is right digit on?
  59.             goto        DigitLoad       ;no, load next digit
  60.  
  61.             movlw       b'00001000'     ;reset anode buffer
  62.             movwf       ANODE
  63.             movlw       0x20            ;reset RAM address pointer
  64.             movwf       FSR
  65.  
  66. DigitLoad       incf        FSR,F           ;increment RAM address pointer
  67.             rrf     ANODE,F         ;shift anode drive bits 1 left
  68.             movfw       INDF            ;load next digit value
  69.             clrf        PORTB           ;blank display
  70.             movwf       PORTA           ;send digit pattern to display
  71.             movfw       ANODE           ;turn on next digit
  72.             movwf       PORTB
  73.             clrf        TMR0            ;init timer 0
  74.             bcf     INTCON,T0IF     ;clear timer 0 interrupt flag
  75.  
  76. ;interrupt context restore
  77.  
  78. ISRExit         movfw       PCLATH_TEMP    
  79.             movwf       PCLATH
  80.             swapf       STATUS_TEMP,W
  81.             movwf       STATUS
  82.             swapf       W_TEMP,F
  83.             swapf       W_TEMP,W
  84.             retfie                  ;exit interrupt
  85.  
  86. ;*************************************************************************************************
  87. ;**                                             **
  88. ;**             Digit Lookup Table                      **
  89. ;**                                             **
  90. ;*************************************************************************************************
  91.  
  92. TABLE           addwf       PCL,F
  93.             retlw       b'10000000'     ;0
  94.             retlw       b'11011001'     ;1
  95.             retlw       b'01000100'     ;2
  96.             retlw       b'01010000'     ;3
  97.             retlw       b'00011001'     ;4
  98.             retlw       b'00010010'     ;5
  99.             retlw       b'00000010'     ;6
  100.             retlw       b'11011000'     ;7
  101.             retlw       b'00000000'     ;8
  102.             retlw       b'00010000'     ;9
  103.             retlw       b'11011111'     ;blank
  104.  
  105. ;*************************************************************************************************
  106. ;**                                             **
  107. ;**             Initialization Routine                      **
  108. ;**                                             **
  109. ;*************************************************************************************************         
  110.  
  111. START           movlw       7           ;disable on chip comparator
  112.             movwf       CMCON
  113.             movlw       0xFF            ;init PORTA all segments blank
  114.             movwf       PORTA
  115.             movlw       b'00000100'     ;init PORTB digit 1 on
  116.             movwf       PORTB
  117.             banksel     TRISA           ;bank 1
  118.             clrf        TRISA           ;port a and b all outputs
  119.             clrf        TRISB  
  120.             movlw       0xD3            ;timer 0 clock source = Tcy
  121.             movwf       OPTION_REG      ;1:16 prescale
  122.             banksel     0           ;bank 0
  123.            
  124.             movlw       2           ;fetch number 2 segment data
  125.             call        TABLE          
  126.             movwf       DIGIT1          ;load into digit 1 buffer  
  127.             movlw       4           ;fetch number 4 segment data
  128.             call        TABLE  
  129.             movwf       DIGIT2          ;load into digit 2 buffer
  130.             clrf        TMR0            ;init TMR0
  131.             bcf     INTCON,T0IF     ;clear timer 0 interrupt flag
  132.             bsf     INTCON,T0IE     ;enable timer 0 interrupt
  133.             bsf     INTCON,GIE      ;enable unmasked interrupts
  134.             goto        $
  135.  
  136.             end
Add Comment
Please, Sign In to add comment