[AI8051U入门第二步]定时器学习

发布于:2025-07-16 ⋅ 阅读:(20) ⋅ 点赞:(0)

前言

学习目标
1、定时器寄存器版本学习
2、数据手册学习

一、定时器介绍?

AI8051U是基于传统8051架构的增强型微控制器,其定时器系统在标准8051基础上进行了扩展和增强。以下是AI8051U定时器的主要特点和功能:

基本定时器资源
AI8051U通常包含以下定时器资源:

4个16位定时器/计数器(Timer0-Timer3)

1个看门狗定时器(WDT)

1个系统定时器(SysTick)

标准定时器(Timer0-Timer1)
这两个定时器与经典8051兼容,具有以下特性:

16位可编程定时器/计数器

4种工作模式:

模式0:13位定时器/计数器

模式1:16位定时器/计数器

模式2:8位自动重装定时器

模式3:两个8位定时器(仅Timer0可用)

增强定时器(Timer2-Timer3)
这些是AI8051U的增强定时器,提供更多功能:

16位自动重装功能

捕获/比较功能

可配置的时钟源(系统时钟或外部输入)

支持PWM输出

高级特性
时钟源选择:

可选择内部RC振荡器、外部晶体或PLL输出

可编程预分频器

中断能力:

每个定时器有独立的中断向量

可配置中断优先级

PWM功能:

多个PWM输出通道

可调占空比和频率

捕获/比较功能:

输入捕获用于精确测量脉冲宽度

输出比较用于精确时间控制

二、寄存器介绍

在这里插入图片描述
博主使用的是定时器3.所以
T4R的bit位置‘0’
T4_C/T置‘0’
T4x12置‘0’
T4CLKO置‘0’
T3R置‘1’
T3_C/T置‘1’
T3x12置‘0’ 使用1T模式
T3CLKO置‘1’
在这里插入图片描述
这是重装载值及定时器的触发时间,
定时器的延时时间计算:
如果我们需要1ms延时,这时我们的主频为24mhz,我们这时要经过12分频,就是2mhz,
每次运行1ms要跳动2000次节拍。然后16位是2的16次方65536,65536-2000=63536.
这就是我们要装载的值63536,这里我们有两种方法装载入THx和TLx。
第一种
直接使用计算器将63536转换为16进制数
或者使用ISP软件进行生成。

三、程序展示

timer.c

#include "timer.h"

#define LED  P20
unsigned long timer3_cnt=0;

/********************************** 
*功能:定时器3初始化
*形参:无
*时间:2025/7/14
*作者:单片有机机
**********************************/
void Timer3Init(void)		//@33.1776Mhz    定时1ms
{
  T4T3M &= 0x0D;		 
  T3L = 0x33;		 
  T3H = 0xF5;		 
  ET3 =1;    
  EA = 1;
  T4T3M |= 0x08;        //开始计时 
}

/********************************** 
*功能:定时器3中断处理函数
*形参:无
*时间:2025/7/14
*作者:单片有机机
**********************************/
void t3int() interrupt 19           
{  
    timer3_cnt++;
    if(timer3_cnt >=1000){
        timer3_cnt =0;
        LED=!LED;
    }
        
}

timer.h

#define __timer_H
#include <AI8051U.H>


void Timer3Init(void);

#endif

main.c

/********************************** (C) COPYRIGHT *******************************
 * File Name          : Main.c
 * Author             : 单片有机机
 * Version            : V1.0
 * Date               : 2025/07/15
 * Description        : AI8051U的定时器控制LED1000ms翻转一次
 * Hardware           : LED     P20   
 * Frequency          : 33.1776Mhz
*******************************************************************************/
#include <AI8051U.H>
#include "timer.h"
#include "system.h"


void main(void){
    GPIO_Init();
    Timer3Init();
    
    
    while(1){
        
        
    }  
}

总结

本程序就是AI8051U驱动Timer定时器程序,完整程序可在我的资源里面下载


网站公告

今日签到

点亮在社区的每一天
去签到