51单片机如何设置与主函数并行运行的定时器?

 我来答
老男孩KISS
2023-03-03 · ERP及电脑相关知识都可以
老男孩KISS
采纳数:36 获赞数:48

向TA提问 私信TA
展开全部

在51单片机中,可以使用定时器(Timer)来实现与主函数并行运行。以下是一般的步骤:

  • 选择定时器:根据需要选择定时器0或定时器1。定时器0使用TH0和TL0寄存器,定时器1使用TH1和TL1寄存器。

  • 设置定时器模式:可以选择模式0到模式3中的一个模式。模式0为13位定时模式,模式1为16位定时模式,模式2为8位自动重装模式,模式3为双重8位自动重装模式。

  • 设置计数值:将计数值(需要倒数的时间值)写入THx和TLx寄存器中。

  • 启动定时器:设置定时器控制寄存器的相应位,启动定时器。

  • 处理定时器中断:可以使用定时器中断服务程序,在定时器溢出时执行相应的处理操作。

  • 以下是一个简单的例子,使用定时器1来实现每隔一定时间向P1口输出一个脉冲:

#include <reg52.h>

sbit P1_0 = P1^0;  // 定义P1.0口

void Timer1() interrupt 3 {  // 定义定时器1中断服务程序
TF1 = 0;  // 清除中断标志
P1_0 = ~P1_0;  // 翻转P1.0口状态
}

void main() {
TMOD |= 0x10;  // 设置定时器1为16位定时器模式
TH1 = 0xFC;  // 设置计数值为65535-50000=15535
TL1 = 0x1B;  // 50000的低8位为0x1B
ET1 = 1;  // 允许定时器1中断
EA = 1;  // 开启总中断
TR1 = 1;  // 启动定时器1
while (1) {  // 主函数循环
// 这里可以写主函数的处理代码
}
}

在上面的例子中,使用定时器1的16位定时器模式,并设置计数值为50000,即每隔50000个机器周期定时器溢出一次。定时器1的中断服务程序中将P1.0口状态翻转,实现了每隔一定时间向P1.0口输出一个脉冲。同时,在主函数中可以编写相应的处理代码,实现与定时器并行运行的功能。

匿名用户
2023-03-02
展开全部
定时器设置完成后就会自动计数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式