PIC32MZ tutorial -- Blinky LED


  Today I finish the "Blinky LED" application on PIC32MZ starter kit. This application let LED1 blink with 0.5HZ frequency. The pseudo code is like

    LOOP:
        LED ON
        Delay 1 second
        LED OFF
        Delay 1 second

  It uses Timer1 to control the delay time. So first I implement the three Timer1 functions.

/**
  

Function: TMR1_Open

Summary: Initialization of Timer

Description: TMR1 on; 0.08 microsecond every tick

Remarks: Pre-scale 1:8; PB 100MHz; PR1 0xFFFF

*/ void TMR1_Open(void) { T1CON = 0x8010; PR1 = 0xFFFF; } // Comment a function definition and leverage automatic documentation /**

Function: TMR1_Write

Summary: Write TMR1

Description: Write a value to TMR1

Remarks: the value is range of 0~65535

*/ void TMR1_Write(unsigned int value) { TMR1 = value & 0xFFFF; } /**

Function: TMR1_Read

Summary: Read TMR1

Description: Read the value from TMR1

Remarks: the value is range of 0~65535

*/ unsigned int TMR1_Read(void) { return (TMR1 & 0xFFFF); }

  Second I finish the delay function, the implemention is like below

/**
  

Function: Delay_1S

Summary: Delay using TMR1

Description: Delay one second

Remarks: call TMR1_Open first

*/ void Delay_1S(void) { unsigned int count = 12500; unsigned int ticks = 1000; while (count--) { TMR1_Write(0); while (TMR1_Read() < ticks) { ; // do nothing } } }

  Actually we are also able to do that like below

/**
  

Function: Delay_1S

Summary: Delay using TMR1

Description: Delay one second

Remarks: call TMR1_Open first

*/ void Delay_1S(void) { unsigned int count = 1000; unsigned int ticks = 12500; while (count--) { TMR1_Write(0); while (TMR1_Read() < ticks) { ; // do nothing } } }

  I prefer to the second one. I believe the second one has higher accuracy than the first one.

  In the end, I finish the main function. In last blog, I already show how to implement LED_SETON. This time, we will the same LED_SETON funtion, and more, we need to implement LED_SETOFF. That's easy once you have read my last blog. If you don't know yet, please look at below.

#include 
#include "Delay.h"
#include "ConfigurationBits.h"

#define LED_IOCTL()       TRISHCLR = (1<<0)
#define LED_SETON()       LATHSET = (1<<0)
#define LED_SETOFF()      LATHCLR = (1<<0)
#define LED_OPEN()        ANSELH &= 0xFFFFFFFE

void main(void)
{
    TMR1_Open();
    LED_OPEN();
    LED_IOCTL();
    while (1)
    {
        LED_SETON();
        Delay_1S();
        LED_SETOFF();
        Delay_1S();
    }
}