标签:
Today I finish the "Blinky LED" application on PIC32MZ starter kit. This application let LED1 blink with 0.5HZ frequence. 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.
/** <p><b>Function: TMR1_Open</b></p> <p><b>Summary: Initialization of Timer </b></p> <p><b>Description: TMR1 on; 0.02 microsecond every tick </b></p> <p><b>Remarks: Pre-scale 1:2; PB 100MHz; PR1 0xFFFF</b></p> */ void TMR1_Open(void) { T1CON = 0x8010; PR1 = 0xFFFF; } // Comment a function definition and leverage automatic documentation /** <p><b>Function: TMR1_Write</b></p> <p><b>Summary: Write TMR1</b></p> <p><b>Description: Write a value to TMR1</b></p> <p><b>Remarks: the value is range of 0~65535</b></p> */ void TMR1_Write(unsigned int value) { TMR1 = value & 0xFFFF; } /** <p><b>Function: TMR1_Read</b></p> <p><b>Summary: Read TMR1</b></p> <p><b>Description: Read the value from TMR1</b></p> <p><b>Remarks: the value is range of 0~65535</b></p> */ unsigned int TMR1_Read(void) { return (TMR1 & 0xFFFF); }
Second I finish the delay function, the implemention is like below
/** <p><b>Function: Delay_1S </b></p> <p><b>Summary: Delay using TMR1</b></p> <p><b>Description: Delay one second </b></p> <p><b>Remarks: call TMR1_Open first </b></p> */ void Delay_1S(void) { unsigned int count = 1000; unsigned int ticks = 500; while (count--) { TMR1_Write(0); while (TMR1_Read() < ticks) { ; // do nothing } } }
Actually we can do that like below
/** <p><b>Function: Delay_1S </b></p> <p><b>Summary: Delay using TMR1</b></p> <p><b>Description: Delay one second </b></p> <p><b>Remarks: call TMR1_Open first </b></p> */ void Delay_1S(void) { unsigned int count = 500; unsigned int ticks = 1000; 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, please look at below.
#include <proc/p32mz2048ech144.h> #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(); } }
PIC32MZ tutorial -- Blinky LED
标签:
原文地址:http://www.cnblogs.com/geekygeek/p/pic32mz_blinkyled.html