Any microcontroller based system typically has an input and a corresponding output. Taking simple output with a PIC microcontroller has been explained in LED blinking with PIC18F4550. This article explains how to provide an input to the controller and get a corresponding output using PIC18F4550.
PIC18F4550 has a total of 35 I/O (input-output) pins which are distributed among 5 Ports. Each Port of a PIC microcontroller corresponds to three 8-bit registers (TRIS, PORT & LAT) which should be configured to use the Port for general I/O purpose. For more details, refer LED blinking using PIC.
To configure a particular port/pin as input, the corresponding TRIS register/TRIS bit should be set to high (1). For output, the relevant TRIS register/bit should be set to low (0).
For example, for PortD
· To set the entire PortD as input
TRISD
|
Bit 7
|
Bit 6
|
Bit 5
|
Bit 4
|
Bit 3
|
Bit 2
|
Bit 1
|
Bit 0
|
Value
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
Fig. 2: Bit Configuration of TRISD Register with PortD as input in PIC18F4550
· To set only 3rd pin (RD2) of PortD as input
TRISD
|
Bit 7
|
Bit 6
|
Bit 5
|
Bit 4
|
Bit 3
|
Bit 2
|
Bit 1
|
Bit 0
|
Value
|
–
|
–
|
–
|
–
|
–
|
1
|
–
|
–
|
Fig. 3: Bit Configuration of TRISD Register with 3rd pin RD2 of PortD as input in PIC18F4550
· To set 1st pin (RD0) as output and 4th pin (RD3) of PortD as input
TRISD
|
Bit 7
|
Bit 6
|
Bit 5
|
Bit 4
|
Bit 3
|
Bit 2
|
Bit 1
|
Bit 0
|
Value
|
–
|
–
|
–
|
–
|
1
|
–
|
–
|
0
|
Fig. 4: Bit Configuration of TRISD Register with 1st pin RD0 as output and 4th pin (RD3) of PortD as input in PIC18F4550
In this program, a tactile switch has been connected on pin RA5 of PortA to provide input to the microcontroller. The input is monitored as an output on LED connected to pin RA0. The connections are shown in the adjoining circuit diagram.
Project Source Code
###
// Program to control an LED using a switch // Configuration bits /* _CPUDIV_OSC1_PLL2_1L, // Divide clock by 2 _FOSC_HS_1H, // Select High Speed (HS) oscillator _WDT_OFF_2H, // Watchdog Timer off MCLRE_ON_3H // Master Clear on */ void main() { ADCON1=0x0F; // Set all pins as digital I/O CMCON=0x07; // Set all comparators as digital I/O TRISA.RA0=0; // Configure pin RA0 as output TRISA.RA5=1; // Configure pin RA5 as input while(1) { if(PORTA.RA5) // If input is high LATA.LATA0=1; // Turn the LED On else LATA.LATA0=0; // Turn the LED Off } }
###
Circuit Diagrams
Project Components
Project Video
Filed Under: PIC Microcontroller.
Filed Under: PIC Microcontroller.
Questions related to this article?
👉Ask and discuss on EDAboard.com and Electro-Tech-Online.com forums.
Tell Us What You Think!!
You must be logged in to post a comment.