How to Set a Pin as an Output on the PIC10F322 Using XC8

The microcontroller features four general-purpose I/O pins: RA0, RA1, RA2, and RA3. These pins can be configured as either inputs or outputs, depending on your needs and whether other peripherals are in use and if the MCLR pin is disabled.

Overview of I/O Pins and Registers

All four I/O pins (RA0, RA1, RA2, and RA3) are on the same port, Port A. To configure a pin as an output, you need to modify two registers: ANSELA and TRISA.

  1. ANSELA Register:
    • The ANSELA register controls the analog functionality of the pins. By default, after a reset, these pins are set to analog mode. To use any pins as digital I/O, you must set the corresponding ANSEL bits to ‘0'.
  2. TRISA Register:
    • The TRISA register determines the direction of the pins. Setting a bit to ‘0' configures the pin as an output, while setting a bit to ‘1' configures it as an input.

Step-by-Step Instructions

Configuring a Single Pin as an Output

Disable Analog Mode:

  • To disable the analog mode for RA0
    ANSELAbits.ANSA0 = 0; // Disable analog function on RA0

    Set the Pin Direction:

    • To set RA0 as an output:
    TRISAbits.TRISA0 = 0; // Set RA0 as output

    Control the Pin State:

    • To set RA0 high:
    LATAbits.LATA0 = 1; // Set RA0 high
    • To set RA0 low:
    LATAbits.LATA0 = 0; // Set RA0 low

    Configuring Multiple Pins as Outputs

    To configure another pin, such as RA2, follow similar steps:

    Disable Analog Mode:

    ANSELAbits.ANSA2 = 0; // Disable analog function on RA2

    Set the Pin Direction:

    TRISAbits.TRISA2 = 0; // Set RA2 as output

    Control the Pin State:

    Configuring All Pins as Outputs

    LATAbits.LATA2 = 1; // Set RA2 high
    LATAbits.LATA2 = 0; // Set RA2 low

    Configuring All Pins as Outputs

    To set all pins on Port A (except RA3) as outputs, you can configure the entire ANSELA and TRISA registers at once:

    Disable Analog Mode:

    ANSELA = 0x00; // Disable analog function on all pins

    Set the Pin Directions:

    TRISA = 0x00; // Set all pins on Port A as outputs

    Important Note

    Pin RA3 can only be used as an input and cannot be configured as an output.

    Example Code

    Here's a complete example demonstrating how to configure RA0 and RA2 as outputs and control their states:

    void main(void) {
        // Disable analog function on RA0 and RA2
        ANSELAbits.ANSA0 = 0;
        ANSELAbits.ANSA2 = 0;
        // Set RA0 and RA2 as outputs
        TRISAbits.TRISA0 = 0;
        TRISAbits.TRISA2 = 0;
        // Set RA0 high and RA2 low
        LATAbits.LATA0 = 1;
        LATAbits.LATA2 = 0;
        // Main loop
        while(1) {
            // Toggle RA0 and RA2
            LATAbits.LATA0 = !LATAbits.LATA0;
            LATAbits.LATA2 = !LATAbits.LATA2;
            __delay_ms(500); // Delay for 500 ms

    This example configures RA0 and RA2 as outputs, sets their initial states, and then toggles them in an infinite loop with a delay.

    By following these steps, you can effectively configure and control the I/O pins on the PIC10F322 microcontroller using .

    Have a Project or Idea!?

    Seeking Bespoke Technology Solutions?

    Pin It on Pinterest

    Share This