51单片机机器周期和定时器0使用

        先说机器周期,最近玩51单片机,发现里面有强大的内部时钟,下载的居然可以随意修改,很骚。比以前的51确实好玩多了。

感觉现在用51做东西完全不比32差了,还不知道性能怎么样。不好意思跑题了。这里先想一个问题,如果我改变了频率,程序中的

延时函数,或者定时器,串口这些频率都变了,需要自己重新算才行。

      51单片机的一个机器周期等于12个振荡周期,振荡周期其实就是晶振的周期。所以51单片机的机器周期=freq/12

如果此时单片机晶振频率为24M。那么机器周期就是24/12=2M,所以机器周期的频率就是2M,对应的时间就是500ns,

此时单片机的处理速度就是大约500ns一个指令。

     了解了上面的东西,我们可以写一个ms延时函数,经过测试,时间还是挺准的。

void Delay1ms()		//@24.000MHz
{
	unsigned char i, j;
	i = 24;
	j = 168;
	do
	{
		while (--j);
	} while (--i);
}

定时器的运用:

其实定时器每次计数的周期就是一个机器周期,所以可以算出,如果要做一个1us的定时器中断,只需把计数值写为2即可。

定时器的各种配置就不说了,东西还是挺多的。

//timer init  //1us进入
void T0_init()
{
   TMOD |=0x1;   //T0 mode 1
   TH0  =(65536-(2))/256;
   TL0  =(65536-(2))%256;
   EA   =1;      //总中断
   ET0  =1;      //定时器0中断
   TR0  =1;      //定时器使能


}

 

你可能感兴趣的:(单片机)