ADC asm code

Discussion in 'Embedded Systems and Microcontrollers' started by zeeba, Oct 3, 2010.

  1. zeeba

    Thread Starter New Member

    Sep 26, 2010
    22
    0
    Hi

    How to write ADC asm code for PIC 16F876A

    can anybody help me??​
     
  2. wannaBinventor

    Member

    Apr 8, 2010
    179
    4
    This isn't for that PIC, but for the 16f818

    Code ( (Unknown Language)):
    1.  
    2.  
    3. ;*********************************************************
    4.  
    5. ; EQUATES SECTION
    6.  
    7. TMR0            EQU         1           ;means TMR0 is file 1.  
    8. STATUS          EQU         3           ;means STATUS is file 3.        
    9. PORTA           EQU         5              ;means PORTA  is file 5.        
    10. PORTB           EQU         6           ;means PORTB is file 6.
    11. ZEROBIT         EQU         2           ;means ZEROBIT is bit 2.        
    12. ADCON0          EQU         1FH           ;A/D Configuration reg.0
    13. ADCON1          EQU         9FH           ;A/D Configuration reg.1
    14. ADRES           EQU         1EH         ;A/D Result register.
    15. CARRY           EQU         0           ;CARRY IS BIT 0.
    16. TRISA            EQU            85H            ;PORTA Configuration Register
    17. TRISB            EQU            86H            ;PORTB Configuration Register
    18. OPTION_R         EQU            81H            ;Option Register
    19. OSCCON            EQU            8FH            ;Oscillator control register.
    20. CCPR1L            EQU            15H
    21. CCPR1H            EQU            16H
    22. CCP1CON            EQU            17H
    23. PR2                EQU            92H
    24. T2CON            EQU            12H
    25. ;USER FILES ARE BELOW
    26. COUNT           EQU         20H         ;COUNT a register to count events.
    27. COUNTERA        EQU            21H
    28. COUNTERB        EQU            22H              
    29. ADCSTO            EQU            23H    
    30. ;*********************************************************
    31.  
    32.     LIST        P=16F818             ;we are using the 16F818.
    33.     ORG         0                   ;the start address in memory is 0
    34.     GOTO          START               ;goto start!
    35.  
    36. ;*********************************************************
    37. ; Configuration Bits
    38.  
    39. __CONFIG H'3F10'       ;sets INTRC-A6 is port I/O, WDT off, PUT ;on, MCLR tied to VDD A5 is I/O
    40. ;BOD off, LVP disabled, EE protect disabled, ;Flash Program Write disabled,
    41. ;Background Debugger Mode disabled, CCP ;function on B2, Code Protection disabled.
    42.  
    43. ;*****************************************************
    44.  
    45. ;SUBROUTINE SECTION.
    46.  
    47. ;PIC Time Delay = 0.00171300 s with Osc = 4000000 Hz
    48. STARTB    movlw    D'3'
    49.         movwf    COUNTERB
    50.         movlw    D'56'
    51.         movwf    COUNTERA
    52. STTLOOP    decfsz    COUNTERA,1
    53.         goto    STTLOOP
    54.         decfsz    COUNTERB,1
    55.         goto    STTLOOP
    56.         RETLW    0
    57.  
    58. ;PIC Time Delay = 0.00131800 s with Osc = 4000000 Hz (50 38KHz cycles)
    59. TLOG1    movlw    .2
    60.         movwf    COUNTERB
    61.         movlw    .181
    62.         movwf    COUNTERA
    63. L1LOOP    decfsz    COUNTERA,1
    64.         goto    L1LOOP
    65.         decfsz    COUNTERB,1
    66.         goto    L1LOOP
    67.         RETLW    0
    68.  
    69.  
    70. ;PIC Time Delay = 0.00079000 s with Osc = 4000000 Hz
    71. TLOG0    movlw    D'2'
    72.         movwf    COUNTERB
    73.         movlw    D'5'
    74.         movwf    COUNTERA
    75. L0LOOP    decfsz    COUNTERA,1
    76.         goto    L0LOOP
    77.         decfsz    COUNTERB,1
    78.         goto    L0LOOP
    79.         RETLW    0
    80.  
    81. ;PIC Time Delay = 0.00210600 s with Osc = 4000000 Hz (80 38KHz cycles)
    82. TOFF    movlw    .3
    83.         movwf    COUNTERB
    84.         movlw    .187
    85.         movwf    COUNTERA
    86. OFFLOOP decfsz    COUNTERA,1
    87.         goto    OFFLOOP
    88.         decfsz    COUNTERB,1
    89.         goto    OFFLOOP
    90.         RETLW    0
    91.  
    92. P38KON    MOVLW    B'00001100'            ;SET PWM
    93.         MOVWF    CCPR1L                
    94.         BSF        CCP1CON,5
    95.         BSF        CCP1CON,4
    96.         RETLW    0
    97.    
    98. P38KOFF    CLRF    CCPR1L                ;set PWM to zero
    99.         BCF        CCP1CON,5
    100.         BCF        CCP1CON,4
    101.         RETLW    0
    102.  
    103. STRTBIT    CALL    P38KON
    104.         CALL    STARTB
    105.         CALL    P38KOFF
    106.         CALL    TOFF
    107.         RETLW    0
    108.  
    109.         ;Transmit a LOGIC 1
    110. TRANS1    CALL    P38KON
    111.         CALL    TLOG1                ;CALL A 1.31ms delay for logic 1 transmission
    112.         CALL    P38KOFF
    113.         CALL    TOFF                ;CALL A 2.106ms delay for a space
    114.         RETLW    0
    115.  
    116.         ;Tramsit a LOGIC 0
    117. TRANS0    CALL    P38KON
    118.         CALL    TLOG0
    119.         CALL    P38KOFF
    120.         CALL    TOFF
    121.         RETLW    0
    122.  
    123. ;*********************************************************
    124.  
    125. ;Configuration Section
    126.  
    127. START      BSF     STATUS,5            ;Turns to Bank1.
    128.  
    129.         MOVLW   B'11111111'         ;8 bits of PORTA are I/P
    130.         MOVWF    TRISA
    131.  
    132.         MOVLW      B'00001111'         ;AN0 IS ANALOG, AN1 IS DIGITAL, AN2 VREF+,AN3 VREF-,AN4 DIGITAL
    133.         MOVWF    ADCON1
    134.          
    135.         MOVLW   B'00000000'                    
    136.         MOVWF    TRISB               ;PORTB is OUTPUT
    137.  
    138.         MOVLW   B'01100000'                    
    139.         MOVWF    OSCCON               ;oscillator 4MHz
    140.  
    141.         MOVLW   B'00000111'         ;Prescaler is /256
    142.         MOVWF    OPTION_R            ;TIMER is 1/32 secs.
    143.  
    144.         MOVLW    B'00011001'            ;SET UP PWM PERIOD
    145.         MOVWF    PR2
    146.  
    147.         BCF     STATUS,5            ;Return to Bank0.
    148.  
    149.         MOVLW    B'00000100'            ;PRESCALE VALUE OF 1:1, TURN ON TMR2
    150.         MOVWF    T2CON                
    151.  
    152.         MOVLW    B'00111100'
    153.         MOVWF    CCP1CON
    154.  
    155.         MOVLW    B'00001100'
    156.         MOVWF    CCPR1L        
    157.  
    158.         ;NEED TO SEE CONFIGURATION FOR WHAT PIN IS PWM O/P
    159.  
    160.         BSF        ADCON0,0            ;Turn OFF A/D
    161.  
    162.         CLRF        PORTA           ;Clears PortA.
    163.         CLRF        PORTB           ;Clears PortB.
    164.  
    165. ;*********************************************************
    166. ;Program starts now.
    167.  
    168.  
    169. BEGIN    BTFSC    PORTA,1        ;was lazy and didnt debounce here
    170.         GOTO    BEGIN
    171.        
    172. TEST    BSF        ADCON0,2      ;Take measurement, set GO/DONE
    173. WAIT    BTFSC    ADCON0,2    ;Wait until GO/DONE is clear
    174.         GOTO    WAIT
    175.  
    176. ,,,,
    177.  
    178. ,,,,
    179.  
    180. ,,,,
    181. more
    182. ,,,,,,
    183. code,,,,,,,,
    184.  
    185. end
    186.  
     
  3. elementalrage

    Active Member

    Jul 30, 2009
    59
    3
Loading...