其他分享
首页 > 其他分享> > AT89C51定时器与计数器 笔记

AT89C51定时器与计数器 笔记

作者:互联网

  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