Each of PIC16F877A microcontroller PORTB pins has an internal weak pull-up. A single control bit can turn on all the pull-ups. This is performed by clearing bit RBPU (OPTION_REG<7>). The weak pull-up is automatically turned off when the port pin is configured as an output. The pull-ups are disabled on Power-on Reset.
This small article shows how to enable PIC16F877A PORTB internal pull-ups using CCS C compiler.
The following CCS C compiler line can enable all the internal pull-ups of PORTB:
And the following line can disable all the internal pull-ups of PORTB:
Enable PIC16F877A PORTB internal pull-ups example:
This is a simple example shows how to enable and use of the internal pull-ups of PIC16F877A. This example was done using external pull-ups resistors in the following topic:
PIC16F877A PORTB interrupt on change with CCS C compiler
In this example the same circuit is used without the external pull-up resistors as shown in the following circuit schematic:
As we can see in the circuit above there are no external pull-up resistors connected with the microcontroller inputs.
Note that only PORTB has weak internal pull-ups.
Enable PIC16F877A PORTB internal pull-ups CCS C code:
// Enable PIC16F877A PORTB internal pull-ups C code
i = input_b();
output_d(i >> 4);
port_b_pullups(TRUE); // Enable PORTB internal weak pull-ups
clear_interrupt(INT_RB); // Clear RB IOC flag bit
enable_interrupts(INT_RB); // Enable RB port IOC
enable_interrupts(GLOBAL); // Enable global interrupts
while(TRUE) ; // Endless loop