- 硬件设置和要求
- 与Nuvoton N76E003进行LED接口的电路图
- Nuvoton N76E003的定时器引脚
- Nuvoton N76E003中的计时器寄存器
- 新唐N76E003中的时间类型
- 编程Nuvoton N76E003定时器微控制器
- 刷新代码并验证计时器功能的输出
在之前的Nuvoton微控制器教程中,我们使用了基本的LED闪烁程序作为入门指南,还使用GPIO接口作为输入来连接触觉开关。通过该教程,我们完全了解如何配置Keil项目以及设置用于对N76E003 Nuvoton微控制器进行编程的环境。现在是时候使用微控制器单元的内部外围设备,并使用内置的N76E003定时器进一步移动一点了。
在上一教程中,我们仅使用软件延迟使LED闪烁,因此在本教程中,我们将学习如何使用Timer延迟功能以及Timer ISR(中断服务程序)并使两个LED闪烁。您还可以查看Arduino定时器教程和PIC定时器教程,以了解如何将定时器与其他微控制器一起使用。在不浪费时间的情况下,让我们评估一下我们需要哪种硬件设置。
硬件设置和要求
由于该项目的要求是学习计时器ISR和计时器延迟功能,因此我们将使用两个LED,其中一个将在while循环中使用计时器延迟闪烁,而另一个在ISR功能内部闪烁。
由于N76E003开发板上有一个LED,因此该项目需要一个额外的LED和一个限流电阻来限制LED电流。我们需要的组件-
- 任何颜色的LED
- 100R电阻
更不用说,除了上述组件之外,我们还需要基于N76E003微控制器的开发板以及Nu-Link编程器。此外,还需要面包板和连接线来连接所有组件。
与Nuvoton N76E003进行LED接口的电路图
如我们在下面的示意图中看到的,测试LED位于开发板内部,并且连接在端口1.4上。另一个LED连接到端口1.5。电阻器R3用于限制LED电流。最左侧显示了编程接口连接。
Nuvoton N76E003的定时器引脚
N76E003的引脚图如下图所示:
如我们所见,每个引脚具有不同的规格,每个引脚可用于多种用途。但是,用作LED输出引脚的引脚1.5将失去PWM和其他功能。但是,这不是问题,因为该项目不需要其他功能。
之所以选择引脚1.5作为输出,而将引脚1.6选择为输入,是因为GND和VDD引脚最容易连接。但是,在该微控制器的20个引脚中,有18个引脚可以用作GPIO引脚,而任何其他GPIO引脚都可以用于输出和输入相关的目的,但2.0引脚专用于复位输入,不能用作引脚。输出。可以在以下模式下配置所有GPIO引脚。
根据数据手册,PxM1.n和PxM2.n是两个寄存器,用于确定I / O端口的控制操作。由于我们使用的是LED,并且需要将该引脚用作常规输出引脚,因此我们将对引脚使用准双向模式。
Nuvoton N76E003中的计时器寄存器
对于任何微控制器单元而言,定时器都是重要的事情。微控制器带有内置的定时器外设。nuvoton N76E003还配备16位定时器外设。但是,每个计时器都有不同的用途,在使用任何计时器接口之前,了解计时器非常重要。
新唐N76E003中的时间类型
计时器0和1:
这两个定时器timer0和timer1与8051定时器相同。这两个计时器可以用作通用计时器或计数器。这两个定时器在四种模式下运行。在模式0下,这些定时器将在13位定时器/计数器模式下运行。在模式1中,这两个计时器的分辨率位将为16位。在模式2中,定时器被配置为具有8位分辨率的自动重载模式。在模式3中,计时器1暂停,计时器0可以同时用作计数器和计时器。
在这四种模式中,大多数情况下使用模式1。这两个定时器可以在固定或预分频模式(Fys / 12)下使用Fsys(系统频率)。它也可以由外部时钟源提供时钟。
计时器2:
定时器2也是一个16位定时器,主要用于波形捕获。它还使用系统时钟,并且可以通过使用8个不同的标度对时钟频率进行分频来用于不同的应用。它也可以在比较模式下使用或生成PWM。
与定时器0和定时器1一样,定时器2可以在自动重载模式下使用。
计时器3:
定时器3也用作16位定时器,它用作UART的波特率时钟源。它还具有自动重新加载功能。如果应用程序需要UART通信,则仅将此定时器用于串行通信(UART)是很重要的。在这种情况下,由于定时器设置过程中的冲突,建议不要将此定时器用于其他目的。
看门狗定时器:
看门狗定时器可以用作标准的6位定时器,但不能用于此目的。使用看门狗定时器作为通用定时器适用于微控制器大多处于空闲模式的低功耗应用。
顾名思义,看门狗定时器始终检查微控制器是否正常工作。对于挂起或暂停的微控制器,WDT(看门狗定时器)会自动复位微控制器,以确保微控制器以连续的代码流运行而不会卡住,挂起或挂起。
自我唤醒定时器:
这是另一个定时器外设,与看门狗定时器一样,具有专用的计时过程。当微控制器以低功耗模式运行时,该计时器会定期唤醒系统。
该定时器外设可以在内部使用,也可以使用外部外设将微控制器从睡眠模式唤醒。对于此项目,我们将使用计时器1和计时器2。
编程Nuvoton N76E003定时器微控制器
将引脚设置为输出:
让我们先从输出部分开始。我们使用两个LED,一个是板载LED,名为Test,并与端口P1.4连接,而一个外部LED与引脚P1.5连接。
因此,使用下面的代码片段将这两个引脚配置为输出引脚,以连接这两个LED。
#define Test_LED P14 #define LED1 P15
在设置功能中,这两个引脚被设置为准双向引脚。
无效设置(无效){P14_Quasi_Mode; P15_Quasi_Mode; }
设置计时器功能:
在设置功能中,需要配置定时器2以获取所需的输出。为此,我们将使用1/128时钟分频因子来设置T2MOD寄存器,并将其用于自动重载延迟模式。这是T2MOD寄存器的概述-
T2MOD寄存器的4、5和6位设置定时器2时钟分频器,而7位设置自动重载模式。使用以下行完成此操作–
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
这两行在 Function_define.h 文件中定义为
#定义TIMER2_DIV_128 T2MOD- = 0x50; T2MOD&= 0xDF#定义TIMER2_Auto_Reload_Delay_Mode T2CON&=〜SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
现在,这些行设置了Timer 2 ISR所需的时序值。
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
在Function_define.h文件中进一步定义为-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100毫秒
因此,16000000是16 Mhz的晶体频率,它设置了100 ms的时间延迟。
下面两行将清空定时器2的低字节和高字节。
TL2 = 0; TH2 = 0;
最后,下面的代码将启用计时器2中断并启动计时器2。
set_ET2; //启用Timer2中断set_EA; set_TR2; //运行Timer2
完整的设置功能可以在以下代码中看到:
无效设置(无效){ P14_Quasi_Mode; P15_Quasi_Mode; TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode; RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8; TL2 = 0; TH2 = 0; set_ET2; //启用Timer2中断 set_EA; set_TR2; // Timer2运行 }
定时器2 ISR功能:
在下面的代码中可以看到Timer 2 ISR功能。
无效Timer2_ISR(无效)中断5 { clr_TF2; //清除Timer2中断标志 LED1 =〜LED1; // LED1切换,连接在P1.5中; }
刷新代码并验证计时器功能的输出
编译后的代码(如下所示)返回0警告和0错误,我使用Keil中的默认闪烁方法对其进行了闪烁。闪烁后,LED按照定义的计时器延迟闪烁。
观看下面提供的视频,以完整展示该代码板如何工作。希望您喜欢本教程并学到了一些有用的东西,如果您有任何疑问,请在下面的评论部分中留下。您还可以使用我们的论坛来发布其他技术问题。