2018/3/25
51单片机
1.CPU时序
1.振荡周期:为单片机实现定时信号的振荡源周期(晶振周期或者外加振荡周期)
计算方法:1.振荡周期
2.状态周期:由两个振荡周期实现
3.机器周期:一个机械周期含12个振荡周期
4.指令周期:以机器周期为单位
2.定时器的操作
1.根据我的理解,对于定时器的操作其实就是对一些特殊寄存器的操作
2.定时器其实就是加一计数器,通过两个寄存器来控制:THx(高四位)和TLx(低四位);
3.TCON计数器:控制定时器T0,T1的开闭;
4.TMOD寄存器:设置定时器的工作方式:
3.关于定时器的操作顺序(包括中断)
1.首先实现TMOD寄存器的工作状态(注意高四位和低四位)
2.实现计数器TH0和TL0的初值(判断实现一次中断的时间)
3.设置TCON(寄存器开关),TCON=1;(打开计时器)
4.注意判断溢出情况(归0);
5.注意中断函数实行的interrupt值
4:注:中断函数的实现和主函数是并行运作的;
5.实现代码
#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit led=P2^0; //D1
void Time0init()
{
TMOD|=0X01;//设置低四位T0.00000001(门空位为0,设置c/t位为0:定时器,设置十六位定时器)
//采用|运算符号,防止因拉低电平对后面造成影响
TH0=0xFC;
TL0=0X18;
//定时1ms
ET0=1;//打开定时器中断
EA=1;//开启中断总开关
TR0=1;//开启定时器
}
void main()
{
Time0init();
while(1);
}
void Time0()interrupt 1
{
static u16 i;
//重新装载
TH0=0xFC;
TL0=0X18;
i++;
if(i==1000)//定时了5s
{
i=0;//溢出时清0
led=~led;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/4bf9dfd041bd983f3a32c9463c4ea36e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bc795abe2ceb88cb677dbbea13053a98.png)
![](https://i-blog.csdnimg.cn/blog_migrate/26b2684a3c40f5ae859c5a3d9f5ea280.png)