(一)中断

(二)定时器,计数器中断

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); }

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信