Hi to all engineers. I am trying to make analog control A/D generator. I connected 20 Mhz crystal with 16c71. on output I am getting only 20 Khz. I know 20/4 = 5 Mhz do you think A/D conversion slowing it down. Is there any thing I am doing wrong? here is my code. TMR0 EQU 0x01 ; COUNTER PC EQU 0x02 ; PROGRAM COUNTER STATUS EQU 0x03 ; STATUS REGISTER FSR EQU 0x04 ; FILE SELECT REGISTER PORTA EQU 0x05 ; OUTPUTS PORTB EQU 0x06 RP0 EQU 0x05 TRISA EQU 0x05 ; TRISB EQU 0x06 ; OPTION_REG EQU 0x81 ; ADCON0 EQU 0x08 ADCON1 EQU 0x08 ; ADRES EQU 0x09 PCLATH EQU 0x0A INTCON EQU 0x0B CARRY EQU 0x00 ; CARRY BIT DCARRY EQU 0x01 ; DIGIT CARRY BIT PDOWN EQU 0x03 ; POWER DOWN BIT WATDOG EQU 0x04 ; WATCHDOG TIMEOUT BIT F EQU 0x01 Z EQU 0x02 PORTA EQU 0x05 ; PIN PORTB EQU 0x06 ; INPUTS FROM DIP SWITCH CH_1_RESOLT EQU 0x0C ; TEMP REGISTER CH_2_RESOLT EQU 0x0D CH_3_RESOLT EQU 0x0E CH_4_RESOLT EQU 0x0F COUNT EQU 0x1D COUNT1 EQU 0x1C TEMP EQU 0x1E LIST P=16C71 ERRORLEVEL -302 #DEFINE BANK1 BSF STATUS,RP0 #DEFINE BANK0 BCF STATUS,RP0 ORG 00H GOTO INIT ; ****************** SUBROUTINES ********************** DELAY MOVF CH_1_RESOLT,W ; LOAD DECIMAL .25 TO COUNT MOVWF COUNT ; SAVE IT THERE DECFSZ COUNT,F ; DECRIMENT COUNT2 GOTO $ - 1 ; IF NOT JUMP RETURN ; ****************** INITALISATION ******************** INIT CLRF PORTB BANK1 ; SET UP PAGE 1 MOVLW B'00000000' MOVWF TRISB ; B0 AND B1 INPUTS THE REST OUTPUTS MOVLW B'00011111' MOVWF TRISA ; SET AS INPUTS A4 OUTPUT MOVLW B'00000000' MOVWF ADCON1 ; SET A/D INPUTS ON A0/1 REST DIGITAL BANK0 ; RETURN TO PAGE 0 MOVLW B'11000001' ; SET A/D INTERNAL RC CLOCK AND 11 FOR CH 4 MOVWF ADCON0 ; DO IT ; ****************** THE START ************************ MAIN BSF PORTB,2 BSF ADCON0,2 ; START CONVERSION MOVLW 10 ; THIS LINE IS 10 MOVWF TEMP DECFSZ TEMP,F ; WAIT A WHILE GOTO $-1 BTFSC ADCON0,2 ; TEST FOR END OF CONVERSION GOTO $-1 MOVF ADRES,W ; LOAD A/D RESULT INTO W MOVWF CH_1_RESOLT ; STORE IT BSF PORTB,0 CALL DELAY BCF PORTB,0 CALL DELAY GOTO MAIN END