svein97, I have also changed from 16F877 to 18F452 without any problems. Down load the data sheet and make sure the oscillator settings are correct and the RA6 pin is set correctly. It can be used as an I/O line with this processor unlike the 16F877. Also make sure the oscillator switch is disabled as it can be changed within the operating software. Attached is one of the configuration sequences I use. Look at the registers I set and read the data sheet to see if they affect the way you configure your old code for the 16F877.

OSCCON = 0 'SET SYSTEM CLOCK SWITCH BIT
RCON = %00011111 'CLEAR IPEN,RI,TO,PD,POR,BOR
INTCON2 = %11000000 'NO PULL-UPS,INTEDG0 RISING,INTEDG1,INTEDG2,TMR01P,RBIP
INTCON3 = %00000000 'CLEAR INT2IP,INT1IP,INT2IE,INT1IE,INT2IF,INT1IF
' PIE1 = %00100000 'CLEAR ALL INTERRUPT ENABLE BITS(EXCEPT RCIE)
PIE2 = %00000000 'CLEAR ALL INTERRUPT ENABLE BITS
IPR1 = %00000000 'SET ALL INTERRUPT PRIORITY BITS TO LOW
IPR2 = %00000000 'SET ALL INTERRUPT PRIORITY BITS TO LOW
PIR1 = %00000000 'CLEAR ALL INTERRUPT FLAGS
PIR2 = %00000000 'CLEAR ALL INTERRUPT FLAGS
ADCON0 = %10000001 'FOSC/64,AN0,A/DONE,A/D OFF
ADCON1 = %11000010 'RIGHT JUST,A/D CLOCK SELECT,RA0:RA3,RA5 ANALOG PINS, RE0:RE2 DIGITAL PINS
LVDCON = %00001111 'CLEAR IRVST,LVDEN,AND SELECT LVDIN
WDTCON = %00000000 'DISABLE WATCH DOG TIMER

TRISA = %101111 'INITIALIZE PORT DIRECTIONS
TRISB = %01101111
TRISC = %10101001
TRISD = %00000011
TRISE = %00000111

T0CON = %00000000 'PRESCALER,WRITE PRESCALER 1/2, TURN OFF TIMER 0
' T1CON = %10000100 'WRITE PRESCALER 1/1, TURN OFF TIMER 1
T2CON = %00000100 'WRITE PRESCALER 1/1, TURN ON TIMER 2
T3CON = %10000100 'WRITE PRESCALER 1/1, TURN OFF TIMER 3
TMR2 = 0 'CLEAR TMR2 MODULE REGISTER
PR2 = $FF 'SET PERIOD (1/1 PRESCALE * 256 PR2 * 1/40,000,000 * 4 = 39.06 Khz.
CCPR1L = $00 'CLEAR UPPER 8 BITS
CCPR2L = $00 'CLEAR UPPER 8 BITS
CCP1CON = $0C 'PLACE CCP1 INTO PWM MODE
CCP2CON = $0C 'PLACE CCP2 INTO PWM MODE


Dave Purola,
N8NTA