3.4.1 What Can Cause Glitches on Output Ports?

In most cases, this is caused by using ordinary variables to access port bits or the entire port itself. These variables should be qualified volatile.

The value stored in a variable mapped over a port (hence the actual value written to the port) directly translates to an electrical signal. It is vital that the values held by these variables only change when the code intends them to and that they change from their current state to their new value in a single transition (see 5.3.8.2 Volatile Type Qualifier). The compiler attempts to write to volatile variables in one operation.