码迷,mamicode.com
首页 > 其他好文 > 详细

PIC32MZ tutorial -- Blinky LED

时间:2015-12-05 19:21:06      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

  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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!