(一)中断
(二)定时器,计数器中断
TL0低八位先进行存储,达到0XF,向上进一,直到高低八位都满时就可以产生中断或者控制TF0口。
(1).
TMOD低四位控制T0,高四位控制T1。
GATE:(门控位)
(2)控制寄存器TCON:(低四位控制外部中断,高四位控制计数器启动和中断申请)
(3)定时器的四种工作方式:
定时器开启工作原理:
四种工作方式:(机器周期(脉冲)和T0引脚来绝定电路触发)
区别在于TH0和TL0的位数和输出)
常用1和2
1.
2.用于比较精确的脉冲信号发射器:
3.
程序化步奏:
计算:初值==2^n-N(公式要根据你使用那种方式0.1.2.3四个方式),例如(65535-1000+1),N=1000就是1ms/1us=1000,要想溢出要达到65536,所以定时一毫秒就是初值64536=FC18H(十六进制)
(三)定时器中断:
定时器操作代码:
#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()
interrupt0 { 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); }