PIC18F24K20/25K20/44K20/45K20
DS80000425P-page 10 2008-2015 Microchip Technology Inc.
35. Module: EUSART
The OERR flag of the RCSTA register is reset only
by clearing the CREN bit of the RCSTA register or
by a device Reset. Clearing the SPEN bit of the
RCSTA register does not clear the OERR flag.
Work around
Clear the OERR flag by clearing the CREN bit
instead of clearing the SPEN bit.
Affected Silicon Revisions
36. Module: EUSART
In Asynchronous Receive mode, the RCIDL bit of
the BAUDCON register will properly go low when
an invalid Start bit less than 1/16th of a bit time is
received. The RCIDL bit will then properly go high
1/8th of a bit time later. However, if another invalid
Start bit occurs less than 1 bit time after the leading
edge of the first invalid Start bit, then the RCIDL bit
will improperly stay high then improperly go low
one bit time later. The RCIDL bit will then stay low
improperly until a valid Start bit is received.
Work around
When monitoring the RCIDL bit, measure the
length of time between the RCIDL going low and
the RCIF flag going high. If this time is greater than
one character time, then restore the RCIDL bit by
resetting the EUSART module. The EUSART
module is reset when the SPEN bit of the RCSTA
register is cleared.
Affected Silicon Revisions
37. Module: Interrupt-on-Change
When any interrupt-on-change is enabled and the
corresponding input is high, then waking from
Sleep by a source other than interrupt-on-change
may cause the RBIF interrupt flag bit to become
set improperly.
Work around
1. Use the INTx interrupt in lieu of interrupt-on-
change.
Or
2. Store the state of the PORTB inputs before
entering Sleep. Upon waking, if an RBIF is
detected, then compare the PORTB levels
with those stored. If they are the same, then
clear and ignore the RBIF interrupt.
Affected Silicon Revisions
38. Module: BOR
An unexpected Brown-out Reset may occur when
enabling the comparator with the Fixed Voltage
Reference (FVR) selected as the V
IN+ input.
Work around
Disconnect the FVR from the VIN+ comparator
inputs prior to enabling the comparator and then
reconnect it after enabling the comparator.
Affected Silicon Revisions
0xA
0xC
0xE
0x11
0x16
0x18
0x19
0x1B
0x1C
XXXXXXXXX
0xA
0xC
0xE
0x11
0x16
0x18
0x19
0x1B
0x1C
XXXXXXXXX
0xA
0xC
0xE
0x11
0x16
0x18
0x19
0x1B
0x1C
XXXXXXXXX
0xA
0xC
0xE
0x11
0x16
0x18
0x19
0x1B
0x1C
XXXXXXXXX
2008-2015 Microchip Technology Inc. DS80000425P-page 11
PIC18F24K20/25K20/44K20/45K20
39. Module: Wake-up from Low-Power Sleep
mode
The device may not wake from Sleep when both of
the following conditions are met:
1. The device is in Sleep mode for <1 ms;
2. On waking, the device executes a SLEEP
instruction within 100 µs.
Under these conditions, the oscillator may stop
before completing execution of the SLEEP
instruction. The device will enter Sleep mode but
will not wake-up on any enabled wake-up event,
including the Watchdog Timer.
Work around
1. Disable High-Speed Start-up
Disabling High-Speed Start-up in the Configuration
Word will delay the device executing code on
wake-up by 250 µs, nominally, allowing the
oscillator to stabilize.
The wake-up time from Sleep will increase by
about 250 µs, nominally.
2. BOR enabled during Sleep
Configuring the device for hardware only BOR or
software-controlled BOR and enabling SBOREN,
the voltage reference is on during Sleep.
The device will wake-up and the oscillator will be
stable. This will add 20 µA (nominal) to the Sleep
current.
3. Enable the FVR during Sleep
In the same manner as the BOR, the FVR will keep
the voltage reference on during Sleep, causing the
oscillator to be stable on wake-up.
4. Avoid executing SLEEP within 100 µs of any
wake-up event
This can be achieved by adding more instructions
(NOP) before executing the SLEEP instruction. This
minimizes the probability of the SLEEP instruction
only partially executing.
Affected Silicon Revisions
40. Module: Low-Voltage Detect
If Low-Voltage Detect is enabled, the band gap is
disabled in Sleep, and the part is put to Sleep for a
short period of time, the LVD will trigger
immediately upon waking-up from Sleep.
Work around
Do not disable the band gap in Sleep when using
the LVD.
Affected Silicon Revisions
41. Module: Timer1/3
When Timer1 or Timer3 is operated in
Asynchronous External Input mode, unexpected
interrupt flag generation may occur if an external
clock edge arrives too soon following a firmware
write to the TMRxH:TMRxL registers. An
unexpected interrupt flag event may also occur
when enabling the module or switching from
Synchronous to Asynchronous mode.
Work around
This issue only applies when operating the timer
in Asynchronous mode. Whenever possible,
operate the timer module in Synchronous mode
to avoid spurious timer interrupts.
If Asynchronous mode must be used in the
application, potential strategies to mitigate the
issue may include any of the following:
Design the firmware so it does not rely on
the TMRxIF flag or keep the respective
interrupt disabled. The timer still counts
normally and does not reset to 0x0000
when the spurious interrupt flag event is
generated.
Design the firmware so that it does not
write to the TMRxH:TMRxL registers or
does not periodically disable/enable the
timer, or switch modes. Reading from the
timer does not trigger the spurious interrupt
flag events.
If the firmware must use the timer inter-
rupts and must write to the timer (or dis-
able/enable, or mode switch the timer),
implement code to suppress the spurious
interrupt event, should it occur. This can be
achieved by following the process shown in
Example 1.
0xA
0xC
0xE
0x11
0x16
0x18
0x19
0x1B
0x1C
XXXXXXXXX
0xA
0xC
0xE
0x11
0x16
0x18
0x19
0x1B
0x1C
XXXXXXXXX
PIC18F24K20/25K20/44K20/45K20
DS80000425P-page 12 2008-2015 Microchip Technology Inc.
EXAMPLE 1: ASYNCHRONOUS TIMER MODE WORK AROUND TO AVOID SPURIOUS
INTERRUPT
Affected Silicon Revisions
//Timer1 update procedure in asynchronous mode
//The code below uses Timer1 as example
T1CONbits.TMR1ON = 0; //Stop timer from incrementing
PIE1bits.TMR1IE = 0; //Temporarily disable Timer1 interrupt vectoring
TMR1H = 0x00; //Update timer value
TMR1L = 0x00;
T1CONbits.TMR1ON = 1; //Turn on timer
//Now wait at least two full T1CKI periods + 2T
CY
before re-enabling Timer1 interrupts.
//Depending upon clock edge timing relative to TMR1H/TMR1L firmware write operation,
//a spurious TMR1IF flag event may sometimes assert. If this happens, to suppress
//the actual interrupt vectoring, the TMR1IE bit should be kept clear until
//after the "window of opportunity" (for the spurious interrupt flag event has passed).
//After the window is passed, no further spurious interrupts occur, at least
//until the next timer write (or mode switch/enable event).
while(TMR1L < 0x02); //Wait for 2 timer increments more than the Updated Timer
//value (indicating more than 2 full T1CKI clock periods elapsed)
NOP(); //Wait two more instruction cycles
NOP();
PIR1bits.TMR1IF = 0; //Clear TMR1IF flag, in case it was spuriously set
PIE1bits.TMR1IE = 1; //Now re-enable interrupt vectoring for timer 1
0xA
0xC
0xE
0x11
0x16
0x18
0x19
0x1B
0x1C
XXXXXXXXX

PIC18F45K20-I/MV

Mfr. #:
Manufacturer:
Microchip Technology
Description:
8-bit Microcontrollers - MCU 32KB FL 1536b RAM 8b Familynanowatt XLP
Lifecycle:
New from this manufacturer.
Delivery:
DHL FedEx Ups TNT EMS
Payment:
T/T Paypal Visa MoneyGram Western Union