|Your JW part will accept new calibration memory setting, and therefore won't |run with the correct timing unless you SET the calibration memory for each |individual chip. If you didn't write this down before you erased the chip |first time, (how many times have I forgotten to do this?) then it is gone. |Trust that the OTP calibratrion memory is programmed properly. You can |whistle confidently past the graveyard, no ghosts will come out to haunt you |this time. On a "nice" programmer, if your code includes the proper opcode for a calibration instruction but that location in the chip contains a different value, the programmer will just accept the one in the chip (not try to burn the bits that happen to be different). If you are using such a prog- rammer, you can just include a movlw (50x's) or retlw (67x's) at that loc- ation and be fine whether you're using OTP or /JW parts. Otherwise, for the '50x parts you may (if you don't care about oscillator speed) leave the location blank and things will still work. On the '671, this won't work since a call to the last location will cause code execu- tion to wrap to the first location creating and endless-loop condition. To avoid this, you may wish to code something like [at address zero]: btfsc PCLATH,0 goto START bsf PCLATH,0 movlw default_cal_value_plus_one call $7FF START: movwf Calib If location $7FF is unprogrammed, this will use the default calibration value; otherwise, it will use the one at $7FF. Similar tricks may be used on the '50x parts to allow for a useful default when the calibration addr- ess isn't programmed, but care must be used with the bank-switching jumps.