Dotcpp  >  编程教程  >  外部中断  >  寄存器

寄存器

点击打开在线编译器,边学边练

1.单片机内部资源

大家看到下面这张图片应该不算陌生了

寄存器1

可是如果我们看到的是这张的话就会觉得陌生

寄存器2

像我们所熟知的P0,P1,P2,P3,包括上图的TCON以及“#include<reg52.h>”头文件中的IE,SCON等等都叫做寄存器。这些寄存器我们粗浅的认为就是一个8位的变量,其中像P0^0这个最低位就是控制单片机的外部IO端口输出高低电平。

而像TOCN^1(也就是IE0)这些有什么作用呢?

后面我们就要开始学习单片机内部的资源了。


2.IE0的作用

大家还记得原理图的P3端口标出的这些吗

P3端口图

而P3寄存器的每一位都在“#include<reg52.h>”头文件中声明好了(本篇开头的第一张图那里)。

我们先拿P3.2来说,如果这个IO端口被外部电路拉低,那么TCON的第1位(也就是TOCN^1)就会被置1,在程序中IE0变为1。

这样吧,我们用一根杜邦线的一头插入P3.2的引脚,然后另一头插入如下图所示GND的地方

GND


接着把下面的代码下载进开发板看看有什么现象

#include <reg52.h> 
#include <function.h>//详见第六章第8讲

//请提前将P3.2和GND用杜邦线连接起来
void main()
{  
    LED_Init();//初始化LED硬件模块
    
    while(1)
    {   
        if(IE0==0)
        {
            LED2=!LED2;  
            delay_ms(50);
            LED2=1;  //如果IE0不等于0了,要保证熄灭LED2
        }    
        if(IE0==1)
        {
            LED9=!LED9;  
            delay_ms(50);
            LED9=1;  //如果IE0不等于1了,要保证熄灭LED9
        }    
        delay_ms(50);//总要执行 “if(IE0==0)”或者“if(IE0==1)”,这个延时是保持其中一盏灯灭的时间,保证了总有灯闪烁的现象    
    }
}

我们看到LED9在不停闪烁,此时拔了连接GND那头的杜邦线看到LED9熄灭,LED2不停闪烁,连着拔插几次观察现象就可以得出,当P3.2遇到低电平的时候IE0会一直等于1,只有P3.2为高电平时IE0才会等于0。


3.IT0的作用

再看到TCON^0(也就是IT0),我们把上面的代码中的“IE0”改为“IT0”测试IT0的初始值是多少。

经测试,IT0初始值为0。

若是我们在主函数开头赋值给IT0为1,那么IE0只有当P3.2从高电平变成低电平(俗称下降沿)就会被置1,即使P3.2后面变成高电平 IE0也不会变为0,一直是1。

P3.2电平高低变化图

这时需要我们在程序里让IE0清零(俗称软件清零)才行。

我们把下面的代码下载进去

#include <reg52.h> 
#include <function.h> //详见第六章第8讲

void main()
{  
    IT0 = 1;
    LED_Init();   //初始化LED硬件模块 
    
    while(1)
    { 
        if(IE0==1)//只有当P3.2从高电平变成低电平这个瞬间(下降沿)IE0才会被置1,后面P3.2不管是一直保持高电平还是低电平,IE0被清0之后都不会再次被置1,只有P3.2再次产生下降沿才会被置1
        {  
            IE0=0;
            LED2=!LED2;  
        }     
        delay_ms(50);
    }   
}

即使杜邦线一直都插着GND端口,也就是P3.2都保持着低电平,LED2也不会闪烁,只有不断拔插杜邦线,LED2才会有亮灭的跳变。

所以当IT0等于1时,P3.2遇到下降沿IE0就会被置1,我们软件把这个位清0之后,如果P3.2没有再次遇到下降沿,IE0都不会被置1。


本文固定URL:https://www.dotcpp.com/course/366

下一课:

中断函数

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

单片机教程
第一章 单片机入门
第二章 LED及入门
第三章 蜂鸣器
第四章 数码管
第五章 独立按键
第六章 多文件编程
第七章 外部中断
第八章 定时器
第九章 舵机与超声波模块
第十章 串口通信
第十一章 1602液晶屏
第十二章 IIC通信
第十三章 红外遥控与温度传感器
第十四章 AD与DA
第十五章 混合例程
第十六章 完结
Dotcpp在线编译      (登录可减少运行等待时间)