Home  C-language   Simple c pr ...

Simple c program with micro controller logic

Here is a simple C program that can be embedded in hardware. This program is designed to run on a microcontroller, such as an Arduino or similar platform, and blinks an LED connected to one of its GPIO pins. This example assumes the use of a typical embedded development environment where you have access to the necessary hardware-specific libraries and functions.

#include <stdint.h>
#include <stdbool.h>

// Define the base address of the GPIO peripheral (this will vary depending on your hardware)
// For example, on an ARM Cortex-M microcontroller, it might be something like this:
#define GPIO_BASE 0x40020000

// Define the offset for the Data Output Register (this will vary depending on your hardware)
#define GPIO_ODR_OFFSET 0x14

// Define the address of the GPIO port to which the LED is connected
#define GPIO_PORT ((volatile uint32_t *)(GPIO_BASE + GPIO_ODR_OFFSET))

// Define the pin number to which the LED is connected
#define LED_PIN 5

// Define a simple delay function (not precise, but sufficient for this example)
void delay(volatile uint32_t count) {
    while (count--);
}

int main(void) {
    // Set the LED pin as output (this will vary depending on your hardware)
    // For example, on an ARM Cortex-M microcontroller, you might set the MODER register:
    // *((volatile uint32_t *)(GPIO_BASE + GPIO_MODER_OFFSET)) |= (1 << (LED_PIN * 2));

    // Blink the LED in an infinite loop
    while (true) {
        // Turn on the LED
        *GPIO_PORT |= (1 << LED_PIN);
        delay(1000000); // Delay

        // Turn off the LED
        *GPIO_PORT &= ~(1 << LED_PIN);
        delay(1000000); // Delay
    }

    // The program should never reach this point
    return 0;
}

Explanation

  1. GPIO Definitions: The program defines the base address of the GPIO peripheral and the offset for the Data Output Register (ODR). These values will depend on the specific microcontroller you are using.

  2. LED Pin Definition: The program defines the pin number to which the LED is connected. This is typically a GPIO pin on your microcontroller.

  3. Delay Function: A simple delay function is used to create a visible blink. Note that this is not a precise method for timing but is sufficient for a basic example.

  4. Main Function: The main function contains an infinite loop where the LED is toggled on and off with delays in between.

Note

Compiling and Uploading

To compile and upload this program to your microcontroller, you typically need to use the development tools provided by the manufacturer. For example, if you are using an ARM Cortex-M microcontroller, you might use tools like Keil MDK, IAR Embedded Workbench, or open-source toolchains like GNU Arm Embedded Toolchain.

For an Arduino, the process would be simplified using the Arduino IDE, and the code would look slightly different to accommodate the Arduino library functions. Here is a version for Arduino:

void setup() {
    pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED pin as an output
}

void loop() {
    digitalWrite(LED_BUILTIN, HIGH); // Turn the LED on
    delay(1000);                     // Wait for a second
    digitalWrite(LED_BUILTIN, LOW);  // Turn the LED off
    delay(1000);                     // Wait for a second
}

In this Arduino example:

Published on: Jun 25, 2024, 07:40 AM  
 

Comments

Add your comment