一、定时器 / 计数器简介
设置等待时间,到达等待时间之后执行指定的硬件操作。
定时器最基本的功能就是定时,比如说定时发送串口数据,定时采集 ad 数据,如果将定时器和 io 结合起来就可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以产生 pwm 方波,定时器产生 pwm 控制电机状态是工业控制的普通。
二、定时器 / 计数器相关寄存器介绍
1、计数寄存器 th 和 hl
t/c 是 16 位的,计数寄存器由 th 高 8 位和 tl 低 8 位构成。
对应 t/c0 为 th0 和 tl0, 对应 t/c1 为 th1 和 tl1,定时器 / 计数器的初始值通过 th0/tl0 和 th1/tl1 设置。
2、定时器 / 计数器控制寄存器 tcon
3、t/c 的方式控制寄存器 tmod
三、定时器的计数初始值计算
四、中断源及中断信号
五、参考代码
/******************************************************
功能描述:led 会循环点亮 1 秒,熄灭 1 秒。
使用单片机内部定时器可实现准确延时
******************************************************/
#include reg52.h
// 此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; // 对数据类型进行声明定义
typedef unsigned char u8;
sbit led=p2^0; // 定义 p20 口是 led
void timer0init()
{
tmod|=0x01; // 选择为定时器 0 模式,工作方式 1(16 位),仅用 tr0 打开启动
th0=0xfc; // 给定时器赋初值,定时 1ms 高 8 位
tl0=0x18; // 低 8 位(可用软件计算,公司参考上面)
et0=1; // 允许定时器 0 中断
ea=1; // 打开总中断
tr0=1; // 打开定时器 0,启动 t/c0 运行
}
void main()
{
timer0init();
while(1);
}
void timer0() interrupt 1 //1 是中断号
{
static u16 i;
th0=0xfc; // 计数器寄存高 8 位重新载入
tl0=0x18; // 计数器寄存低 8 位重新载入
i++;
if(i==1000)
{
i=0;
led=~led;
}
}
海信全新单墨水屏新机开启预约,将于10月23日发布
让你没想到的汽车上竟有这么多电机
华为荣耀9曝光:麒麟965+3D玻璃机身,跟小米6死磕到底!
Iphostmonitor:“发送HTTP(S) 请求”简单操作的可能用途是什么?
Zigbee无线传感集成的煤矿综合监测设计
各类寄存器的计算以及中断
液晶显示器显示效果发虚的原因
PCB设计有必要去除死铜吗?
武汉弘芯抵押光刻机用于芯片制造的设备占半导体设备总支出的 81%
通过瑞萨云上实验室体验RX23E-A的ΔΣADC噪声性能
CMT2110/17A超低成本高柔性高性能OOK发射机芯片
重磅官宣:内置移远5G模组版TVU One直播背包正式商用!
肉类抗生素检测仪器的性能及参数
iPhone8:双屏幕+全尺寸键盘+可折叠,土豪的不二选择
泰克推出业界最高性能的混合信号示波器-MSO70000系列
异步电路中时钟如何同步的多种方法
嵌入式工控机与传统工控机的区别
世炬网络5G产品荣获“2023年广东省名优高新技术产品”称号
浅谈支撑智能座舱的底层硬件
JAQUET-DSD25传感器概述及工作原理