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();
}
}
上一篇:PIC32MZ tutorial -- Timer Interrupt
下一篇:PIC32MZ tutorial -- Hello World
推荐阅读最新更新时间:2024-03-16 15:31