;*****************************************************
;lee un valor analogico por el AN0
;y escribe el resultado binario por el puerto D
;
;*****************************************************
 
  List  p=16F877a  ;procesador
  #include  <P16F877a.INC>;registros internos  
  org    0x000  ;vector reset
  goto  inicio  ;va a inicio
  nop
  org    0x005  ;vector interrupcion
inicio
  clrwdt      ;borra watch-dog
  bcf    STATUS,RP1    
  bsf    STATUS,RP0 ;banco 1          
  movlw  B'11111111'  
  movwf  TRISB    
  movlw  b'00000000'
  movwf  TRISD
  movwf  TRISC  ;portc salida  
  movwf  PIE2
  movlw  b'00000010'
  movwf  PIE1  ;cambiar bit 6
  movlw  b'00000111';prescaler TMR0 1:256
  movwf  OPTION_REG
  movwf  b'00100000';habilitada intrr TMR0
  movwf  INTCON
  movlw  b'11111111'
  movwf  PR2
  movlw  B'10000000'  
  movwf  ADCON1  ;justificacion<7>,conf port<3:0>
          ;se activan todos los ADC,vref+=RA<3>,vref-=vss          
  bcf    STATUS,RP0;banco 0
  movlw  b'00101101'
  movwf  CCPR1L
  movlw  b'00111111'
  movwf  CCP1CON
  movlw  b'01111111'
  movwf  T2CON
conv0
  clrwdt        ;borra watch-dog
  movlw  B'10000001'     ;81h-->w
  movwf  ADCON0         ;fosc/32<7:6>,adc0<5:3>,go/done<2>,adc on<0>
  bcf    PIR1,ADIF  ;borra PIR1
adc0
   clrwdt        ;borra watch-dog
  btfss  INTCON,T0IF    ;T0IF indica interrupcion por final
            ;de temorizacion(overflow)
            ;intcon<2>=1?
  goto  adc0           ;si.va a conv
  bcf    INTCON,T0IF    ;no.borra intcon<2>
  bsf    ADCON0,GO     ;adcon0<2>=1
            ;GO/DONE=estado de conversion
            ;GO/DONE=0-->done
            ;GO/DONE=1-->go
            ;comienza conversion A/D                  
retraso0
  clrwdt        ;borra watch-dog
  btfss  PIR1,ADIF  ;pir1<6>=1?
  goto   retraso0       ;no.va a retraso 
  bsf    STATUS,RP0  ;banco 1                  
  banksel ADRESL         ;si.adc_lsb-->w
  movf    ADRESL,w       ;adc_lsb-->w
  bcf    STATUS,RP0
    movwf  PORTD
    movwf  CCPR1L
bucle
  btfss  PIR1,TMR2IF
  goto  bucle
  clrf  PIR1
  goto conv0
  end