zoukankan      html  css  js  c++  java
  • PIC32MZ tutorial -- Blinky LED

      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.

    /**
      <p><b>Function: TMR1_Open</b></p>
    
      <p><b>Summary: Initialization of Timer </b></p>
    
      <p><b>Description: TMR1 on; 0.08 microsecond every tick </b></p>
    
      <p><b>Remarks: Pre-scale 1:8; 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 = 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

    /**
      <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 = 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 <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();
        }
    }
  • 相关阅读:
    2020牛客寒假算法基础集训营5 F 碎碎念
    性能测试过程中oracle数据库报ORA-27301 ORA-27302错
    Linux裸设备管理详解--
    GoldenGate 之 Bounded Recovery说明
    关于Oracle GoldenGate中Extract的checkpoint的理解 转载
    SMON: Parallel transaction recovery tried 引发的问题--转载
    用直接路径(direct-path)insert提升性能的两种方法
    深入理解Oracle的并行操作-转载
    oracle大表添加字段default经验分享
    Oracle Hang分析--转载
  • 原文地址:https://www.cnblogs.com/geekygeek/p/pic32mz_blinkyled.html
Copyright © 2011-2022 走看看