×
单片机 > 单片机程序设计 > 详情

PIC32MZ tutorial -- Blinky LED

发布时间:2020-06-03 发布时间:
|

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

    }

}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何升级STM32单片机的代码