It is necessary to understand basic I/O operations of PIC18F4550 before dealing with its complexities. This article presents a way to take simple output from a PIC microcontroller. This learning would also help in interfacing of external devices with the controller. Here the output from the microcontroller is taken on a set of LEDs which are made to blink in an alternate fashion.
PIC18F4550 has a total of 35 I/O (input-output) pins which are distributed among 5 Ports. The following table shows the names and numbers of I/O pins of these 5 ports:
Port Name
|
Number of Pins
|
Pins
|
PORTA
|
7
|
RA0-RA6
|
PORTB
|
8
|
RB0-RB7
|
PORTC
|
7
|
RC0-RC2, RC4-RC7
|
PORTD
|
8
|
RD0-RD7
|
PORTE
|
4
|
RE0-RE3
|
|
Bit 7
|
Bit 6
|
Bit 5
|
Bit 4
|
Bit 3
|
Bit 2
|
Bit 1
|
Bit 0
|
TRISA
|
–
|
TRISA6
|
TRISA5
|
TRISA4
|
TRISA3
|
TRISA2
|
TRISA1
|
TRISA0
|
PORTA
|
–
|
RA6
|
RA5
|
RA4
|
RA3
|
RA2
|
RA1
|
RA0
|
LATA
|
–
|
LATA6
|
LATA5
|
LATA4
|
LATA3
|
LATA2
|
LATA1
|
LATA0
|
|
Bit 7
|
Bit 6
|
Bit 5
|
Bit 4
|
Bit 3
|
Bit 2
|
Bit 1
|
Bit 0
|
TRISB
|
TRISB7
|
TRISB6
|
TRISB5
|
TRISB4
|
TRISB3
|
TRISB2
|
TRISB1
|
TRISB0
|
PORTB
|
RB7
|
RB6
|
RB5
|
RB4
|
RB3
|
RB2
|
RB1
|
RB0
|
LATB
|
LATB7
|
LATB6
|
LATB5
|
LATB4
|
LATB3
|
LATB2
|
LATB1
|
LATB0
|
|
Bit 7
|
Bit 6
|
Bit 5
|
Bit 4
|
Bit 3
|
Bit 2
|
Bit 1
|
Bit 0
|
TRISC
|
TRISC7
|
TRISC6
|
–
|
–
|
–
|
TRISC2
|
TRISC1
|
TRISC0
|
PORTC
|
RC7
|
RC6
|
RC5
|
RC4
|
–
|
RC2
|
RC1
|
RC0
|
LATC
|
LATC7
|
LATC6
|
–
|
–
|
–
|
LATC2
|
LATC1
|
LATC0
|
|
Bit 7
|
Bit 6
|
Bit 5
|
Bit 4
|
Bit 3
|
Bit 2
|
Bit 1
|
Bit 0
|
TRISD
|
TRISD7
|
TRISD6
|
TRISD5
|
TRISD4
|
TRISD3
|
TRISD2
|
TRISD1
|
TRISD0
|
PORTD
|
RD7
|
RD6
|
RD5
|
RD4
|
RD3
|
RD2
|
RD1
|
RD0
|
LATD
|
LATD7
|
LATD6
|
LATD5
|
LATD4
|
LATD3
|
LATD2
|
LATD1
|
LATD0
|
|
Bit 7
|
Bit 6
|
Bit 5
|
Bit 4
|
Bit 3
|
Bit 2
|
Bit 1
|
Bit 0
|
TRISE
|
–
|
–
|
–
|
–
|
–
|
TRISE2
|
TRISE1
|
TRISE0
|
PORTE
|
RPDU
|
–
|
–
|
–
|
RE3
|
RE2
|
RE1
|
RE0
|
LATE
|
–
|
–
|
–
|
–
|
–
|
LATE2
|
LATE1
|
LATE0
|
TRISB
|
TRISB7
|
TRISB6
|
TRISB5
|
TRISB4
|
TRISB3
|
TRISB2
|
TRISB1
|
TRISB0
|
Value
|
0
|
…
|
…
|
…
|
…
|
…
|
…
|
1
|
TRISB
|
TRISB7
|
TRISB6
|
TRISB5
|
TRISB4
|
TRISB3
|
TRISB2
|
TRISB1
|
TRISB0
|
Value
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
Project Source Code
###
/******************Chip config*******************
PLLDIV = 5
CPUDIV = OSC1 / 2
USBDIV = 2
FOSC = HIGH_SPEED HS
FCMEN = OFF
IESO = OFF
PWRT = OFF
BOR = OFF
BORV = 3
VREGEN = OFF
WDT = OFF
WDTPS = 1:32768
CCP2MX = ON
PBADEN = OFF
LPT1OSC = OFF
MCLRE = OFF
STVREN = ON
LVP = OFF
ICPRT = OFF
XINST = OFF
DEBUG = OFF
CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF
CPB = OFF
CPD = OFF
WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF
WRTC = OFF
WRTB = OFF
WRTD = OFF
EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF
EBTRB = OFF
******************Chip config*******************/
#include <p18cxxx.h>
void delay_ms ( int delay );
void delay_ms ( int delay )
{
int ms, i;
for ( ms = 0; ms < delay; ms ++ )
for ( i = 0; i < 5; i ++ );
}
void main()
{
TRISB = 0x00; // Set PORTB as output PORT
LATB = 0xFF; // Set PORTB high initially (All LEDs on)
while ( 1 )
{
LATB = ~LATB; // Toggle the value of PORTB
delay_ms ( 1000 ); // Delay of 1 sec
}
}
###
Circuit Diagrams
Project Components
Project Video
Source: How to interface LEDs with PIC Microcontroller (PIC18F4550)