打印
[DemoCode下载]

N79E715的定时器2的使用

[复制链接]
1129|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
643757107|  楼主 | 2017-1-20 19:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technology Corp.
//  E-mail: MicroC-8bit@nuvoton.com
//***********************************************************************************************************
//  Application: Timer2 Function
//  This file set up timer 2 in auto-reload mode (16 bits timer) with a hardware gate.
//  The 16-bits register consist of all 8 bits of TH2 and all 8 bits of TL2.
//  Timer2 flag will be set when times out. P1.4 is going to be toggled by polling.
//
//  Output : P1.4 & P2.1 toggle when timer0 flag is set
//***********************************************************************************************************

//------------------------- <<< Use Configuration Wizard in Context Menu >>> --------------------------------
//     <o0.6> UART pin Select
//          <0=> Select P1.0, P1.1 as UART pin(default)
//          <1=> Select P2.6, P2.7 as UART pin(28 pin only)
//-------------------------------- <<< end of configuration section >>> -------------------------------------

#define Uart_Port_Sel   0x00

#include <stdio.h>
#include "N79E715.h"
#include "Typedef.h"
#include "Define.h"
#include "Common.h"
#include "Delay.h"
#include "Version.h"

//-----------------------------------------------------------------------------------------------------------
void main(void)
{
    AUXR1 |= Uart_Port_Sel;             // Select P10/P11 as UART pin(default)
    InitialUART0_Timer1(9600);          // 9600 Baud Rate [url=home.php?mod=space&uid=72445]@[/url] 11.0592MHz
    Show_Version_Number_To_PC();
    printf ("\n*===================================================================");
    printf ("\n*  Name: N79E715 Series Timer2 Sample Code.");
    printf ("\n*===================================================================");
    printf ("\nTimer2 Demo Start.");
    printf ("\nP1.4 toggle by polling.");
    printf ("\nP2.1 toggle by polling.\n");

    T2MOD = 0x90;                       // Enabled auto-reload and timer2 clock divider is 1/8
    TH2 = 0x10;                         // Initial values
    TL2 = 0x00;
    RCOMP2L = TL2 ;                      // Reload values initialize
    RCOMP2H = TH2 ;

    EA = 1;                             // Enable interrupts
    TR2 = 1;                            // Timer2 run
    while(1)
    {
        while(!TF2);
        P14 = ~P14;                     // P1.4 toggle by polling
        P21 = ~P21;                     // P2.1 toggle by polling
        TF2 = 0;                        // Clear timer2 flag(TF2)
    }
}
//-----------------------------------------------------------------------------------------------------------


沙发
643757107|  楼主 | 2017-1-20 19:04 | 只看该作者
可以看到定时器2其实使用起来还是很简单的。

使用特权

评论回复
板凳
643757107|  楼主 | 2017-1-20 19:07 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technology Corp.
//  E-mail: MicroC-8bit@nuvoton.com
//***********************************************************************************************************

#include <stdio.h>
#include "N79E715.h"
#include "Typedef.h"
#include "Define.h"
#include "Common.h"
#include "Delay.h"

#ifdef FOSC_110592
    #define VALUE_10us    65536-9       //27*12/11.0592 = 10 us
    #define VALUE_1ms     65536-923     //2769*12/11.0592 = 1 ms
#endif
#ifdef FOSC_184320
    #define VALUE_10us    65536-15      //15*12/18.432 = 10 us
    #define VALUE_1ms     65536-1536    //1536*12/18.432 = 1 ms
#endif
#ifdef FOSC_221184
    #define VALUE_10us    65536-18      //18*12/22.1184 = 10 us
    #define VALUE_1ms     65536-1843    //1843*12/22.1184 = 1 ms
#endif
#ifdef FOSC_368640
    #define VALUE_10us    65536-93      //93*12/36.864 = 10 us
    #define VALUE_1ms     65536-3072    //3072*12/36.864 = 1 ms
#endif
//-------------------------------------------------------------------------
void Delay10us(UINT16 u16CNT)
{
    TMOD &= 0xF0;
    TMOD |= 0x01;
    TR0 = 1;
    while (u16CNT != 0)
    {
        TL0 = LOBYTE(VALUE_10us);
        TH0 = HIBYTE(VALUE_10us);
        while (TF0 != 1);
        TF0 = 0;
        u16CNT --;
    }
    TR0 = 0;
}
//------------------------------------------------------------------------------
void Delay1ms(UINT32 u32CNT)
{
    TMOD &= 0xF0;
    TMOD |= 0x01;
    TR0 = 1;
    while (u32CNT != 0)
    {
        TL0 = LOBYTE(VALUE_1ms);
        TH0 = HIBYTE(VALUE_1ms);
        while (TF0 != 1);
        TF0 = 0;
        u32CNT --;
    }
    TR0 = 0;
}
delay的实现方法。

使用特权

评论回复
地板
643757107|  楼主 | 2017-1-20 19:08 | 只看该作者
从上面的实现可以看到用了不少的预编译,因此我们要在程序指定用的什么样的晶振时钟。

使用特权

评论回复
5
dongnanxibei| | 2017-1-23 20:26 | 只看该作者
跟定时器0使用方法差不多的。

使用特权

评论回复
6
wahahaheihei| | 2017-1-23 20:32 | 只看该作者
好多配置如果可以一个函数搞定就OK了,太多的函数要记住,感觉很吃力。

使用特权

评论回复
7
玛尼玛尼哄| | 2017-1-23 20:48 | 只看该作者
两个定时器可以同时工作,互相不干扰。

使用特权

评论回复
8
捉虫天师| | 2017-1-24 15:24 | 只看该作者
用两个定时器同时计时也是可以,可以用作不同的功能。

使用特权

评论回复
9
稳稳の幸福| | 2017-1-24 19:41 | 只看该作者
void Delay10us(UINT16 u16CNT)
{
    TMOD &= 0xF0;
    TMOD |= 0x01;
    TR0 = 1;
    while (u16CNT != 0)
    {
        TL0 = LOBYTE(VALUE_10us);
        TH0 = HIBYTE(VALUE_10us);
        while (TF0 != 1);
        TF0 = 0;
        u16CNT --;
    }
    TR0 = 0;
}

使用特权

评论回复
10
heisexingqisi| | 2017-1-24 20:11 | 只看该作者
只看这个是不行的,需要配合手册,要不不知道那些赋值都代表什么。

使用特权

评论回复
11
wahahaheihei| | 2017-1-24 20:44 | 只看该作者
TL0 = LOBYTE(VALUE_10us);
TH0 = HIBYTE(VALUE_10us);
这个用的比较好。

使用特权

评论回复
12
643757107|  楼主 | 2017-1-26 10:21 | 只看该作者
void Delay1ms(UINT32 u32CNT)
{
    TMOD &= 0xF0;
    TMOD |= 0x01;
    TR0 = 1;
    while (u32CNT != 0)
    {
        TL0 = LOBYTE(VALUE_1ms);
        TH0 = HIBYTE(VALUE_1ms);
        while (TF0 != 1);
        TF0 = 0;
        u32CNT --;
    }
    TR0 = 0;
}
其实我看中的就是这些,定时器来延时,比那个只写跑空指令的循环靠谱多了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

213

主题

3783

帖子

11

粉丝