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(); } }