51单片机定时器(learning)

重要的是了解定时器的结构功能定时值计算方式。

1,了解定时器的结构:

定时/计数器的实质是加1计数器(16位),由**高8位(TH)低8位(TL)**两个寄存器THx和TLx组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

1、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:一般用TMOD = 0x01; 也就是工作方式1,其他的工作方式了解一下就行。

再者就是C/T :定时/计数模式选择位。C/T =0定时模式,C/T =1计数模式


在这里插入图片描述
在这里插入图片描述

2,计算定时器的初值、

- 定时器模式时有:N=t/ T
计数初值计算的公式为:X=2^13-N = 65536 - N。
定时器的初值还可以采用计数个数直接取补法获得
- 外接晶振为12MHz→重要之处时,51单片机相关周期的具体值为:
振荡周期=1/12us;
状态周期=1/6us;
机器周期=1us;→重要之处
指令周期=1~4us;

具体的可以参考

1.晶振12M 
         12MHz除121MHz,也就是说一秒=1000000次机器周期。50ms=50000次 机器周期。   

         65536-50000=15536(3cb0) 

         TH0=0x3c,TL0=0xb0

   2.晶振11.0592M 

        11.0592MHz除12921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。 

        65536-46080=19456(4c00) 
        TH0=0x4c,TL0=0x00

1ms/1us=1000。

也就是要计数1000个数,初值=65535-1000+1(因为实际上计数器计数到66636才溢出)64536=FC18H

3,程序

下列程序就是先计算五十毫秒的机器周期,然后*20就是1s的周期,具体代码如下


#include<REG52.h>

typedef unsigned char u8;
typedef unsigned int u16 ;

sbit pt1 = P2^1;
sbit pt2 = P2^6;

u16 i ;
//初始化定时器喝中断
void InitMiddle_T()
{
	ET0 = 1;
	EA = 1;   
	TR0 = 1;
	
	TMOD = 0x01; 
  TH0 = 0x4c;
	TL0 = 0x00;
	
}

//主函数
void main()
{
	pt2 = 0;
	InitMiddle_T();
	
	while(1);
}

//中断函数
void Time() interrupt 1
{
	
  TH0 = 0x4c;
	TL0 = 0x00;
	i++;
	if(i == 20)
	{
		i =0;
		pt1 =~ pt1;
		pt2 =~ pt2;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值