ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AT89C51定时器与计数器 笔记

2022-03-19 16:34:43  阅读:146  来源: 互联网

标签:定时器 AT89C51 void 计数器 TR0 65536 256


  1. 定时器 方式寄存器TMOD
  2. 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.控制寄存器TCON
在这里插入图片描述
TR0(1):定时器/计数器的启动位,可以由软件置位或清零,TR0(1)=1时候启动;TR0(1)=0时候停止。

1.工作方式1 M1=0 M0=0 16位定时/计数器
计数值N和初值X的关系: X=(65535-N)/(12/fosc)
上次计数完,计数器值为0,需要计数需重置初值。
fosc是晶振频率,一般为12MHz,11.0592MHz

2.工作方式2 8位自动重置定时/计数器
计数N和初值X关系: X=256-N(12/fosc)
不需要用户重置

#include"reg51.h"

void inittimer()  //初始化
{
	TMOD=0X01;              //16位定时器
	TH0=(65536-50000)/256;  //50MS=50000US 高八位
	TL0=(65536-50000)%256;  //低八位
	ET0=1;                  //开启定时器0中断
	EA=1;                   //开启总中断
	TR0=1;                  //启动定时器0
}

void timer_isr() interrupt 1   // 0:外部中断0,1:定时器中断0,2:外部中断1,3:定时器中断1,4:串口中断
{
	TH0=(65536-50000)/256;  //50MS=50000US 高八位
	TL0=(65536-50000)%256;  //低八位
}

void main()
{
	inittimer();
	while(1);
]

计数器

方式1 16位计数器
初值X和计数值N的关系:X=65536-N
依旧需要重置初值

方式二 8位
X=256-N

void initcounter() //初始化
{
	TMOD=0X06;  //0000 0110  8位
	TH0=256-3;
	TL0=256-3;
	ET0=1;
	EA=1;
	TR0=1;
}

void counter_isr() interrupt 1   //没按三次 num+1
{
	num++;
}

标签:定时器,AT89C51,void,计数器,TR0,65536,256
来源: https://blog.csdn.net/qq_45112909/article/details/123596301

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有