NBK-RD8x3x套件定时器简单使用

通过数据手册可知,RD8T36P48芯片时钟频率32MHZ,具有5个16位定时器。

首先通过EasyCodeCube选择建立空模板的工程之后,通过keil打开工程进行代码完善。

定时器0基本配置:

void Timer_init()
{
    TMOD|=0x01; //选择定时器0模式1
    TMCON=0x01; //选择时钟频率(是否/12,当前选择32MHZ)
    TL0=(65536-32000)%256;//1ms
    TH0=(65536-32000)/256;
    ET0=1;//使能Timer0中断
    TR0=1;//开启定时器0
    EA=1;//开启总中断
}

配置完成之后,中断服务函数在SC_it.c 函数中,可以找到void Timer0Interrupt() interrupt 1 中断服务函数入口。

void Timer0Interrupt()		interrupt 1			   
{
    static int count=0;
    TL0 = (65536 - 32000) % 256;
    TH0 = (65536 - 32000) / 256;
    count++;
    if(count==1000) //1s定时
    {
        count=0;
        GPIO_TogglePin(GPIO0, GPIO_PIN_0);//翻转P00(先初始化强推挽模式)
    }
}

最后可以在拓展板上实现周期2S的LED0闪烁。

定时器1配置:

在定时器0的基础上更改:

TMOD|=0x10; //定时器1模式1
TMCON=0x02;//选择时钟32MHZ

定时器2配置:

定时器2配置有些不同。具体操作如下:

void Timer2_init()
{
    TXINX=0x02;//TimerX寄存器组指向T2
    TXCON=0x04;//开启定时器2(主要设置TRX位)
    TXMOD|=0x80;//设置时钟(32MHZ)
    TXMOD&=0xFE;//递增计数模式
    TLX=(65536-32000)%256;//初始值
    THX=(65536-32000)/256;//1ms
    RCAPXH=(65536-32000)/256;//重装载寄存器值
    RCAPXL=(65536-32000)%256;
    ET2=1;//开启Timer2中断
    EA=1;
}

 

在SC_it.c中找到void Timer2Interrupt()  interrupt 5 中断服务函数进行相关配置

static int count=0;
count++;
TFX=0;//需要清除挂起的溢出标志位
if(count==1000)//1s定时
{
    count=0;
    GPIO_TogglePin(GPIO0, GPIO_PIN_0);
}

在主函数中初始化之后,即可实现用定时器2对LED0的1s闪烁功能。 

定时器3以及定时器4操作需要更改TXINX值指向相关寄存器组,这里就不多加赘述了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

brepot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值