- 定时器 方式寄存器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++;
}










