前言
学习目标
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定时器程序,完整程序可在我的资源里面下载