51单片机之计时器与计数器

51单片机之计时器与计数器_第1张图片

CPU时序的有关知识

 振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)
 状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。
 机器周期:1个机器周期含6个状态周期,12个振荡周期。
 指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。

例如:外接晶振为12MHz时,51单片机相关周期的具体值为:
振荡周期=1/12us;
状态周期=1/6us;
机器周期=1us;
指令周期=1~4us;


初始化程序应完成如下工作:
对TMOD赋值,以确定T0和T1的工作方式。
计算初值,并将其写入TH0、TL0或TH1、TL1。
中断方式时,则对EA赋值,开放定时器中断。
使TR0或TR1置位,启动定时/计数器定时或计数

51单片机之计时器与计数器_第2张图片

解释

51单片机之计时器与计数器_第3张图片
51单片机之计时器与计数器_第4张图片


#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit led=P2^0;	 //定义P20口是led


void Timer0Init()
{
	TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

	TH0=0XFC;	//给定时器赋初值,定时1ms
	TL0=0X18;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器			
}

void main()
{	
	Timer0Init();  //定时器0初始化
	while(1);		
}


void Timer0() interrupt 1
{
	static u16 i;
	TH0=0XFC;	//给定时器赋初值,定时1ms
	TL0=0X18;
	i++;
	if(i==1000)
	{
		i=0;
		led=~led;	
	}	
}

你可能感兴趣的:(51单片机,自学)