Molti pin del microcontrollore hanno funzioni diverse. La funzione 'normale' si riferirebbe a GPIO, Input / Output per scopi generici . In tal caso, è possibile utilizzare questi pin direttamente scrivendo e leggendo dai relativi registri.
Le funzioni "alternative" si riferiscono ad altre funzioni, che possono includere I 2 C, SPI, USART, CCP, PWM, Clock, ADC, ecc ... Il modo in cui controlli i pin quando in una funzione alternativa dipende dalla periferica, ma generalmente si tratta di scrivere e leggere da registri di funzioni speciali (SFR); il periferico si occupa del resto.
Quale funzione è standard dopo un RESET dipende (è non è sempre GPIO!), E si può trovare che nella scheda tecnica relativa. Il più delle volte, è possibile selezionare la funzione che si desidera utilizzare al volo, in modo da poter passare da una periferica all'altra.
Utilizzando un pin per diverse periferiche, è possibile creare microcontrollori con molte funzionalità. Tuttavia, poiché la maggior parte delle volte vuoi sempre quella periferica su quel pin (e non vuoi cambiare le funzioni al volo) non puoi usare tutte le periferiche in un programma, o almeno non allo stesso tempo. D'altra parte, ciò non è molto spesso necessario comunque.
Come sottolinea Connor , "funzione alternativa" può riferirsi anche a qualcos'altro, in un contesto leggermente diverso: qui non si tratta di quale funzione si inserisce in un pin, ma di quale pin si utilizza per una funzione. Questo si chiama Peripheral Pin Select, e sostanzialmente significa che puoi selezionare quale pin sta usando la tua periferica. Ad esempio, è possibile eseguire RS232 su RA1 e RA2 o su RB1 e RB2.
Vedi la risposta di Connor per una descrizione più dettagliata (e votalo per questo).