当前位置:网站首页>51单片机_外部中断 与 定时/计数器中断
51单片机_外部中断 与 定时/计数器中断
2022-06-24 06:56:00 【踏过山河,踏过海】
引言
学单片机有些时间了,一直不太理解中断这方面的知识,网上也看了很多资料,大致了解了中断的笼统含义,就比如其中一种说法:你再打LOL人机,突然家里的热水器开了,你必须先暂停LOL,先去处理热水器,以避免热水器过热造成不必要的安全事故,当你把热水器处理得当,你再去打LOL,这里称:处理热水器为中断。这样讲其实非常的笼统。这里来详细说一下:最简单的就属外部中断和定时器中断了。
外部中断
外部中断其实隶属于按键处理,外部中断最著名的当属IT0了,若IT0赋值为0,这个按钮其实是低电平触发;若IT0赋值为1,这个按钮其实是下边沿触发。(这里插播一条广告:低电平触发与下边沿触发的区别是什么?低电平触发是指这个按键只要是低电平,就会执行外部中断函数里面的代码,只要引脚为低电平时间内中断就一直有效,就会一直进入中断,直到电平变化为高电平,中断事件才肯罢休;而下边沿触发必须是由高电平触发转变为低电平才会触发,也就是说,引脚一直保持低/高电平,也无法多次触发,仅仅可以触发一次中断。总结,按键按下一次,低电平触发方式可以触发一到多次外部中断,而下边沿触发能且仅能触发一次外部中断)这就是外部中断。(这里在插播一条广告:外部中断,为按钮事件而生!)那么问题来了,按钮按下事件除了能用外部中断处理,还能怎么处理?很简单,直接在main函数里:
if(key1 == 0)
{
delay10ms();
if(key1 == 0) //确实有按键按下了
{
写下你按下人家按键key1干嘛呀
}
}
以上就是外部中断
接下来再来讲定时器中断:
定时器中断
定时器其实就是倒计时,而定时器T0和T1分别对应的引脚是P3.4和P3.5。
(插播一条广告:EA代表总闸,不管是外部中断,还是定时器中断要开启,首先都要EA开闸,外部中断或定时器中断也开闸才能运行.)
计数器其实就是倒数几个数,计数器常用的寄存器有TL0,TH0,TL1,TH1。以TL0和TH0为例,TL0和TH0 都是8位寄存器,由TL0和TH0形成高八位和低八位寄存器,用于计数,一共16位。范围是0~65535,一共65536(2的16次方).
TCON寄存器:
这里只说定时/计数器部分!
TF1为定时器1溢出位,TR1为定时器1控制位(开启或关闭);TF0为定时器0溢出位,TR0为定时器0控制位(开启或关闭)。
IE寄存器:
这里只说定时/计数器部分!
ET1:定时器1中断开关
ET0:定时器0中断开关
TMOD寄存器:
有两个定时器,分别为定时器0和定时器1
一共有两组GATE,C/T,M1,M0;
其中,GATE叫门控制位,初学者直接让他等于0即可,然后让TR0或TR1等于1,对应的定时器T0或T1就启动了。
C/T:0为定时,1为计数。
最后的M0和M1是一起看的,有四中情况,分别为00,01,10,11 ,初学者直接使用01即可,表示 16位定时器/计数器,最大计数为2^16 = 65536
综上所述,TMOD一般最常用的就是0X01.(即TMOD寄存器的二进制表示为:0000 0001,表示只要让TR0或TR1等于1,对应的定时器T0或T1也就启动了,同时范围是0~65535,共65536个数)
另外在补充一下:定时器的初值怎么计算:
65536 - 10000 = 55536 ,意思是 计数器从65536 一直减到 55536 所用的时间就是10ms。
55536的十六进制是0xD8F0,
所以设置 TH0 = 0XD8,TL0=0XF0,
也就是说,初值设为0xD8F0,则每10ms就触发一次定时器0或1中断
//了解了上边这些知识点,下面这些代码你应该就能看懂了!
#include<reg52.h>
sbit LED0=P1^0;
unsigned char i;
void main()
{
TMOD=0X01; //设置使用定时器0,16位的定时/计数寄存器
TL0=0xD8; //低八位赋初值
TH0=0XF0; //高八位赋初值
ET0=1; //开启定时器0中断
TR0=1; //运行定时器0
EA=1; //开启中断总开关
while(1);
}
void Delay(void) interrupt 1 using 0
{
i++;
TR0=0; //进入中断函数时,关闭定时器
TL0=0XD8; //重新赋初值
TH0=0XF0;
if(i==20) //因为10ms一次触发看不出明显结果,所以让20次触发才让灯变一次
{
LED0=~LED0;
}
TR0=1; //重新开启定时器
}
(最后在补充一点:
定时/计数器的的工作原理是进行计数。
对内部时钟脉冲进行计数时,作为定时器;对外部脉冲信号计数时,则是计数器。不管作为定时器还是计数器,本质上都是计数器。
所以,初学者不必纠结是用定时还是是计数器,因为两者其实是一个东西,只不过一个是内部时钟脉冲,一个是外部脉冲,
所以,初学者用定时器T0,T1的内部脉冲准没错,即让C/T=0就行了!
)
边栏推荐
- How does dating software cut your leeks
- Review of postgraduate English final exam
- Tuple remarks
- Redolog and binlog
- Atguigu---16-custom instruction
- Specify IP when calling feign interface
- Leetcode exercise - jumping game, combination summation
- Introduction to software engineering - Chapter 3 - Requirements Analysis
- [test development] first knowledge of software testing
- 有关iframe锚点,锚点出现上下偏移,锚点出现页面显示问题.iframe的srcdoc问题
猜你喜欢

Oracle advanced SQL qualified query

Cold thinking on the hot track: multiplier effect is the fundamental requirement of East West calculation
![Leetcode 515 find the leetcode path of the maximum [bfs binary tree] heroding in each row](/img/16/011ba3aef1315c39526daac7e3ec89.png)
Leetcode 515 find the leetcode path of the maximum [bfs binary tree] heroding in each row

Pagoda panel installation php7.2 installation phalcon3.3.2

第 1 篇:搭建OpenGL环境

How to cancel the display of the return button at the uniapp uni app H5 end the autobackbutton does not take effect
![[run the script framework in Django and store the data in the database]](/img/6b/052679e5468e5a90be5c4339183f43.png)
[run the script framework in Django and store the data in the database]

The first exposure of Alibaba cloud's native security panorama behind the only highest level in the whole domain

The monthly salary of two years after graduation is 36K. It's not difficult to say

Swift Extension NetworkUtil(網絡監聽)(源碼)
随机推荐
宝塔面板安装php7.2安装phalcon3.3.2
Swift extension networkutil (network monitoring) (source code)
Examples of corpus data processing cases (reading multiple text files, reading multiple files specified under a folder, decoding errors, reading multiple subfolder text, batch renaming of multiple fil
快速读论文----AD-GCL:Adversarial Graph Augmentation to Improve Graph Contrastive Learning
Vulnhub target: boredhackerblog: social network
ImportError: cannot import name ‘process_ pdf‘ from ‘pdfminer. Pdfinterp 'error completely resolved
有关iframe锚点,锚点出现上下偏移,锚点出现页面显示问题.iframe的srcdoc问题
5-if语句(选择结构)
Easyplayerpro win configuration full screen mode can not be full screen why
OC extension detects whether an app is installed on the mobile phone (source code)
首次曝光 唯一全域最高等级背后的阿里云云原生安全全景图
第 1 篇:搭建OpenGL环境
Specify IP when calling feign interface
The first exposure of Alibaba cloud's native security panorama behind the only highest level in the whole domain
Practice of opengauss database on CentOS, configuration
Latest news of awtk: new usage of grid control
Vulnhub靶机:BOREDHACKERBLOG_ CLOUD AV
慕思股份在深交所上市:毛利率持续下滑,2022年一季度营销失利
1-4metasploitable2介绍
某问答社区App x-zse-96签名分析