51单片机~定时器和外部中断(各个位控制作用详解)

(一)中断
51单片机~定时器和外部中断(各个位控制作用详解)_第1张图片
51单片机~定时器和外部中断(各个位控制作用详解)_第2张图片
51单片机~定时器和外部中断(各个位控制作用详解)_第3张图片
(二)定时器,计数器中断
51单片机~定时器和外部中断(各个位控制作用详解)_第4张图片
51单片机~定时器和外部中断(各个位控制作用详解)_第5张图片
51单片机~定时器和外部中断(各个位控制作用详解)_第6张图片
51单片机~定时器和外部中断(各个位控制作用详解)_第7张图片
51单片机~定时器和外部中断(各个位控制作用详解)_第8张图片
TL0低八位先进行存储,达到0XF,向上进一,直到高低八位都满时就可以产生中断或者控制TF0口。
51单片机~定时器和外部中断(各个位控制作用详解)_第9张图片
(1).
TMOD低四位控制T0,高四位控制T1。
51单片机~定时器和外部中断(各个位控制作用详解)_第10张图片
GATE:(门控位)
51单片机~定时器和外部中断(各个位控制作用详解)_第11张图片
51单片机~定时器和外部中断(各个位控制作用详解)_第12张图片
51单片机~定时器和外部中断(各个位控制作用详解)_第13张图片
(2)控制寄存器TCON:(低四位控制外部中断,高四位控制计数器启动和中断申请)
51单片机~定时器和外部中断(各个位控制作用详解)_第14张图片
(3)定时器的四种工作方式:
51单片机~定时器和外部中断(各个位控制作用详解)_第15张图片

定时器开启工作原理:
51单片机~定时器和外部中断(各个位控制作用详解)_第16张图片
四种工作方式:(机器周期(脉冲)和T0引脚来绝定电路触发)
区别在于TH0和TL0的位数和输出)
常用1和2
1.
51单片机~定时器和外部中断(各个位控制作用详解)_第17张图片
2.用于比较精确的脉冲信号发射器:
51单片机~定时器和外部中断(各个位控制作用详解)_第18张图片
3.
51单片机~定时器和外部中断(各个位控制作用详解)_第19张图片
程序化步奏:
51单片机~定时器和外部中断(各个位控制作用详解)_第20张图片
计算:初值==2^n-N(公式要根据你使用那种方式0.1.2.3四个方式),例如(65535-1000+1),N=1000就是1ms/1us=1000,要想溢出要达到65536,所以定时一毫秒就是初值64536=FC18H(十六进制)

(三)定时器中断:
51单片机~定时器和外部中断(各个位控制作用详解)_第21张图片
定时器操作代码:

#include"reg52.h"

typedef signed char int8;
typedef signed int  int16;
typedef signed long  int32;
typedef unsigned char uint8;   //字符型
typedef unsigned int uint16;
typedef unsigned long uint32;


sbit led=P2^0;   //D1

     //***《此函数需要对应以上笔记进行熟悉识别》***//
	
void Time0Init ()	
{
         //或运算相当于TMOD=TMOD||0X01,只要有一个为一就为一
	TMOD |=0X01;   //定时计数选择,工作方式选择,门控位条件
	TH0=0XFC;      //定时器初值FC18H,定时一毫秒
	TL0=0X18;      
	ET0   =1;      //定时器控制中断允许位
	EA    =1;      //总开关
	TR0   =1;      //启动定时计数器
}

//无需定时器函数,因为我们需要用定时器进行计时
//void delay(uint16 x_ms)			   //延时毫秒
//{
     
//	uint16 i, j;
//	for (i = x_ms; i > 0; i--)
//		for (j = 114; j > 0; j--);
//}

void Time0() interrupt 0
{
     
	static uint16 i;  //1秒=1000毫秒
	TH0=0XFC;         //TH和TL每执行一次,耗时1毫秒
	TL0=0X18;
	i++;
	if(i==1000)       //所以i要累计到1000
	{
     
		led=~led;
	}
}

void main()
{
     
	Time0Init();
	while(1);
}

你可能感兴趣的:(单片机,定时器,外部中断,51单片机,TMOD)