AT89C51定时器与计数器 笔记
作者:互联网
- 定时器 方式寄存器TMOD
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