首页 > 其他 > 详细

PIC32MZ tutorial -- Blinky LED

时间:2015-12-05 19:19:34      阅读:166      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!