51单片机-寄存器

发布者:WhisperingWind最新更新时间:2021-08-21 来源: eefocus关键字:51单片机  寄存器  变量 手机看文章 扫描二维码
随时随地手机看文章

1.单片机内部资源

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

6.3.png

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

6.4.png

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

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

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


2.IE0的作用

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

6.5.png

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

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

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

6.6.png


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

#include  

#include //详见第六章第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。

6.7.png

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

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


#include  

#include //详见第六章第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。

关键字:51单片机  寄存器  变量 引用地址:51单片机-寄存器

上一篇:51单片机-最终的function文件
下一篇:51单片机-中断函数

推荐阅读最新更新时间:2024-11-09 15:34

基于51单片机实现继电器控制照明设备
具体功能实现: 当按下开关时,继电器闭合点亮照明设备(灯泡) 使用器件: 照明设备(LAMP)、按键、AT89C51、若干电阻、PNP晶体管、二极管、继电器(RTE24005F) Proteus仿真原理图: 仿真: 知识介绍: Proteus布线 为了让整个原理图看上去简洁明了,我们对元器件的导线进行标号,而不是直接和芯片相连。 继电器驱动电路原理 主要代码(C语言)KEIL5实现: #include reg52.h #define uchar unsigned char #define uint unsigned int sbit K1 = P1^0; sbit RELAY = P2^4; v
[单片机]
汇编语言 数据寄存器AX、BX、CX、DX
8086内部有4个16位的数据寄存器AX、BX、CX和DX,用来存放16位数据信息或地址信息;也可分成8个8位寄存器来使用,低8位寄存器位AL、BL、CL和DL,高8位为AH、BH、CH和DH,它们只能用来存放8位数据,不能用来存放地址信息。这些通用寄存器也可以有专门的用途。 AX为累加器:它是编程中用得最多、最频繁的寄存器。AX、AH和AL在乘、除法等操作中有专门的用途。 BX为基址寄存器:可以用来存放偏移地址。 CX为计数寄存器:在循环操作时作计数器用,用于控制循环程序的执行次数。 DX为数据寄存器:在乘、除法及I/O端口操作时有专门用途。 通过汇编指令来修改寄存器中的内容,从而来控制CPU,寄存器是CPU中保存地址信息和
[单片机]
汇编语言 数据<font color='red'>寄存器</font>AX、BX、CX、DX
51单片机的晶振频率是多少
51单片机是一种常用的微控制器芯片,广泛应用于各种电子设备的控制和计算中。在单片机中晶振非常重要,它是单片机实现高精度和高速运算的基础。JSK晶鸿兴为您介绍51单片机的晶振频率是多少。 在51单片机中,晶振频率确定了单片机的基本时钟周期(Clock Cycle)。晶振的频率越高,单片机的时钟周期越短,单片机的处理速度越快。反之,晶振的频率越低,单片机的时钟周期越长,单片机的处理速度越慢。因此,在选择晶振时需要根据实际需要选择合适的频率。 通常,51单片机晶振的频率有以下几种:12MHz、11.0592MHz、24MHz、16MHz、20MHz等。目前,12MHz和11.0592MHz较为常见,这两种频率的晶振通常用于简单的
[单片机]
如何使用51单片机实现串口通信
STC51单片机一般带有1个串口,有的带有2个串口,串口一般用于下载程序和串口通信。串口通信特别适合控制设备,所以工控机的电脑上一般都带有串口。 51单片机的串口引脚为P3.0引脚与P3.1引脚,分别是RXD和TXD引脚。串口通信可以用于单片机和其它芯片通信或者单片机之间通信或者单片机与电脑通信。串口通信一般都是交叉连接。标准的串口有9个引脚,我们一般情况下,只用RXD TXD GND,剩下的引脚都是通信控制引脚,在以前用于控制电话机,现在已经基本上不用了。所以我们的51单片机上只保留了RXD和TXD。 串口通信的协议非常简单。如果单片机上的串口不够用,还可以用任意两个引脚模拟串口通信。 一般情况,我们用带有起始位的8
[单片机]
如何使用<font color='red'>51单片机</font>实现串口通信
8051单片机-模拟串口
传统的8051系列单片机一般都配备一个串口,而STC89C52RC增强型单片机也不例外,只有一个串口可供使用,这样就出问题了,假如当前单片机系统要求二个串口或多个串口进行同时通信,8051系列单片机只有一个串口可供通信就显得十分尴尬,但是在实际的应用中,有两种方法可以选择。 方法1:使用能够支持多串口通信的单片机,不过通过更换其他单片机来代替8051系列单片机,这样就会直接导致成本的增加,优点就是编程简单,而且通信稳定可靠。 方法2:在IO资源比较充足的情况下,可以通过IO来模拟串口的通信,虽然这样会增加编程的难度,模拟串口的波特率会比真正的串口通信低一个层次,但是唯一优点就是成本上得到控制,而且通过不同的IO组合可以实现
[单片机]
80<font color='red'>51单片机</font>-模拟串口
基于51单片机的多功能八路抢答器设计
1.功能介绍 多功能八路抢答器是基于51单片机来设计的,除了可以实现最基本功能——8路抢答外,还具有自动处理犯规选手,抢答时间调整,还可以进行答题,计分,并且可以查询或修改分数。 2.硬件设计 (1)硬件框图 该抢答器的硬件由五个部分组成,包括单片机、按键电路、数码管显示电路、指示灯电路和声音提示电路。硬件框图如下 (2)硬件原理图 由于每个部分的硬件电路都比较简单,就不做介绍了,大家直接看图。 3.软件设计 (1)软件流程图 (2)程序源码 由于本例程代码比较多,这里就只贴出部分代码,有兴趣的小伙伴可以下载源码去看看 复制 void main() { uint j;//用来构成循环 TMOD=0x11
[单片机]
基于<font color='red'>51单片机</font>的多功能八路抢答器设计
关于单片机编译器中对函数中局部变量的处理和PC不同
通常我们都是学了标准c语言教程后从事单片机c语言的编写的, 那就先要明白一点, 标准c语言实际上是起源于pc平台上的一种语言, 标准c语言肯定是不会照顾到单片机的特殊性的. 因此单片机c编译器中的c语言是一种基于标准c,但是又有相应修改扩充的扩展c语言. 所以在单片机c编译器里写程序时一定要了解单片机编译器扩展c语言的不同之处, 绝不能死板地照搬标准c。 在标准c里, 局部变量是函数在调用的时候才临时分配存储空间的,全局变量是程序整个生命周期都一直存在的. 不过要知道,临时分配存储空间是需要操作系统内存管理程序支持的, 单片机中通常都没有操作系统,也就不能实现像pc平台中那样的局部变量的空间分配. 这里就需要深入了解一下单片机
[单片机]
C51单片机学习笔记(二)——花样流水灯的实现
1.单片机引脚、晶振、复位的作用 复位电路:,复位是单片机的初始化操作。单片机启动时都需要先付薇,其作用是“清零”,也就是CPU和其他部件处于一个确定的初始状态,并从这个初始状态开始。 复位实质上是单片机的复位脚保持很短时间的高电平,按键复位就是通过按键接高电平(按一下的时间已经足够) 时钟电路(晶振):产生时间信号,使单片机按照一定的时间规律进行指令,晶振频率越高,时钟信号的周期就小,单片机运行也就越快。 32个I/O口 P1.0 ~ P1.7 对应1 ~ 8 号引脚 P2.0 ~ P2.7 对应21 ~ 28 号引脚 P3.0 ~ P3.7 对应10 ~ 17 号引脚 P0.0 ~ P0.7 对应39
[单片机]
C<font color='red'>51单片机</font>学习笔记(二)——花样流水灯的实现
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved