Introducing Curiosity Nano microcontroller board programming
As you learned from Chapter 1, Introduction to Microcontrollers and Microcontroller Boards, the Curiosity Nano can be programmed using ANSI C language, explained in this chapter, using the MPLAB X IDE.
The basic structure of a C program for the Curiosity Nano is similar to the one explained above using the main()
function, but its declaration changes. You have to include the keyword void in it, as follows:
//necessary IDE's library defining input-output ports: #include "mcc_generated_files/mcc.h" void main(void) //main program function { Â Â Â Â // statements }
The file 16F15376_Curiosity_Nano_IOPorts.zip
from the book's GitHub page contains the necessary input-output (I/O) functions for the Curiosity Nano to work. Each port's I/O functions contain the port name. For example, the IO_RD1_GetValue()
function will read an analog value from the Curiosity Nano's RD1 port.
The following are useful functions that you can use for programming the Curiosity Nano, which is already defined by the MPLAB X compiler. Note that xxx
means the Curiosity Nano's port name. Please read Chapter 1, Introduction to Microcontrollers and Microcontroller Boards, to familiarize yourself with the Curiosity Nano's I/O port names and their respective chip pins:
IO_xxx_SetHigh();
: This function writes the logic HIGH (3.3 V) value on the specified pin (port).IO_xxx_SetLow();
: This function writes the logic LOW (0 V) value on the specified pin (port).IO_xxx_GetValue();
: This function returns the logic (digital) value (either HIGH or LOW) that is read from the specified port. HIGH is returned as 1. LOW is returned as 0.ADC_GetConversion(xxx);
: This function reads an analog value from the specified port and returns a value from 0 to 1023 corresponding to the analog-to-digital conversion done on the read value.SYSTEM_Initialize();
:Â Â This function initializes the microcontroller ports.__delay_ms(number_milliseconds);
: This function pauses the program for a number of milliseconds (there are 1,000 milliseconds in one second).IO_xxx_Toggle();
: This function toggles the port's value to its opposite state of the specified port. If the port has a logic of HIGH (1), this function will toggle it to 0, and vice versa.
We will use some of the preceding functions in an example explained later in this chapter.
Figure 2.1 shows the Curiosity Nano's pins. Bear in mind that many of them are I/O ports:
We have configured the following ports from the Curiosity Nano microcontroller board as I/O ports. We did this in all the Curiosity Nano's software project files from this book. The ports' pins can be seen in Figure 2.1. Some of them are used throughout this book:
RA0, RA1, RA2, RA3, RA4, RA5, RB0, RB3, RB4, RB5, RC0, RC1, RC7, RD0, RD1, RD2, RD3, RD5, RD6, RD7, RE0, RE1, and SW0.
The following section explains the basic programming structure and important functions for the Blue Pill board microcontroller board coding, which are somewhat different from the Curiosity Nano board.