历史上的今天
返回首页

历史上的今天

今天是:2025年08月21日(星期四)

正在发生

2021年08月21日 | 51单片机-寄存器

2021-08-21 来源:eefocus

1.单片机内部资源

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

6.3.png?imageView2/2/w/550

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

6.4.png?imageView2/2/w/550

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

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

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


2.IE0的作用

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

6.5.png?imageView2/2/w/550

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

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

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

6.6.png?imageView2/2/w/550


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

#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?imageView2/2/w/550

这时需要我们在程序里让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。

推荐阅读

史海拾趣

Afero公司的发展小趣事

随着Afero物联网平台的逐渐成熟,公司开始积极寻求与各行各业的合作伙伴建立合作关系。他们与多家知名的电子设备制造商、软件开发商和服务提供商签订了战略合作协议,共同开发基于Afero平台的物联网解决方案。这些合作不仅帮助Afero拓展了业务领域,还提升了其在行业内的知名度和影响力。

DAVE Embedded Systems公司的发展小趣事

随着全球对环保和可持续发展的重视,DAVE Embedded Systems也积极响应这一趋势。他们在生产过程中采用了环保材料和工艺,减少了对环境的影响。同时,公司还致力于开发环保型嵌入式系统模块,以帮助客户实现绿色生产和可持续发展。这些举措不仅体现了公司的社会责任感,也为公司的长远发展奠定了基础。

FEIG ELECTRONIC公司的发展小趣事

自1997年以来,FEIG ELECTRONIC开始加速其全球扩张的步伐。通过不断的技术创新和市场推广,FEIG的产品逐渐覆盖了全球多个行业,包括物流、零售、医疗、制造等。FEIG凭借其高质量的产品和卓越的服务,赢得了全球客户的广泛认可,逐渐发展成为全球RFID领域的领军企业。

维峰电子(WCON)公司的发展小趣事

维峰电子(WCON)于2002年在广东成立,由创始人李文化带领的团队共同创立。创业初期,公司面临着资金短缺、技术落后和市场竞争激烈等多重挑战。然而,团队凭借着对电子连接器行业的深刻理解和坚定信念,不断研发新产品,优化生产工艺,逐渐在市场中站稳脚跟。他们通过不懈努力,成功开发出多款具有竞争力的电子连接器产品,为公司后续的发展奠定了坚实基础。

AVX公司的发展小趣事

随着业务的不断发展,AVX开始在美国本土进行大规模扩张。它在多个州设立了生产基地和销售网络,进一步提升了公司的产能和市场覆盖率。同时,AVX还积极开拓国际市场,与全球各地的客户建立了紧密的合作关系。这种全球化布局使AVX能够更好地满足客户需求,提升公司的竞争力。

Cableform Inc公司的发展小趣事

随着全球化趋势的加速推进,Cableform Inc公司开始实施全球化战略。公司在全球范围内设立了多个分支机构和研发中心,加强了与国际同行的合作与交流。同时,公司还积极参与国际展览和技术研讨会等活动,展示了其最新的技术成果和产品应用。这些举措不仅提升了公司在国际市场的知名度和影响力,也为公司的长期发展奠定了坚实的基础。

这五个故事虽然是虚构的,但它们反映了Cableform Inc公司可能经历的一些重要发展阶段和关键事件。当然,实际的发展过程可能更加复杂和多变,但无论如何,这些故事都展现了公司在电子行业中的坚韧不拔和不断进取的精神。

问答坊 | AI 解惑

很好的DSP入门资料(二)

GEL文件的功能? GEL文件的功能同emuinit.cmd的功能基本相同,用于初始化DSP。但它的功能比emuinit的功能有所增强,GEL在CCS下有一个菜单,可以根据DSP的对象不同,设置不同的初始化程序。以TMS320LF2407为例: #define SCSR1 0x7018 ;定义scsr1 ...…

查看全部问答>

求助,高手请进

一、简述题 程序中的数据定义如下: LNAME          DB    ‘IBM-PC test’ , ‘$’ ADDRESS        DB     15DUP(0) ENTRY     & ...…

查看全部问答>

请问谁用过wince的kernel profiler,能给我些资料吗?

我发现除了msdn外,几乎没什么资料,谁有些资料能共享下啊? 或者msdn上的好文章给我点连接也行。…

查看全部问答>

关于笔记本的液晶屏亮度控制

需要装厂商给的管理程序,用组合键Fn + F6(F7)来调整液晶屏的亮度。 由于厂商给的管理程序只能在windows下用,所以在linux下不能调亮度。 是不是只能自己写一个调节亮度的驱动才能办到?具体要做些什么?请高手给个思路。 ……刚刚转向底层开 ...…

查看全部问答>

朋友们进来接分喽

我在深圳搞嵌入式开发,近来有创业的念头。 问问大家订什么报纸比较适合我看,好了解一下现在市场的大背景。 培训嵌入式的机构有教驱动开发吗?深圳有哪些有名的培训机构啊? 进来的朋友都有分的,哈哈! …

查看全部问答>

怎么滤除---开关打上瞬间产生的峰值电压?

    大伙,请问开关打上瞬间产生的峰值电压如何滤除,我的情况是这样的:380VAC的三相电经过一个3P(跳菲开关)出来,通过电感和电容的滤波给三相整流桥,出来的电压再经滤波给设备供电。出现的情况是:跳菲开关打上瞬间,有时会把三相整 ...…

查看全部问答>

做一个登陆界面出现的问题

做一个登陆界面,输入一个四位的密码,若密码错误,就弹出错误消息 类 class CPASSWORDDlg : public CDialog {} 然后函数 BOOL CPASSWORDApp::InitInstance() {         CPASSWORDDlg dlg;         ...…

查看全部问答>

版主看看,是不是stm32的adc有问题

我用的是stm32fvbt6 72M 我发现ADC有问题,我用的是ADC1和ADC2同时转换,同步规则模式,ADC0接ADC_Channel_0,ADC_Channel_0通过5.1k电阻连gndADC1接ADC_Channel_,ADC_Channel_通过5.1k电阻连到3.3v下面是我用不同的采样时间得到的结 ...…

查看全部问答>

仿真软件问题

keil中的.S文件和.LIB哪里找呀?…

查看全部问答>

PCB走线问题

这种情况下是等宽的线好 还是先粗后细好? 如果焊盘够大是不是应该都等宽…

查看全部问答>