历史上的今天
今天是:2025年08月21日(星期四)
2021年08月21日 | 51单片机-寄存器
2021-08-21 来源:eefocus
1.单片机内部资源
大家看到下面这张图片应该不算陌生了

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

像我们所熟知的P0,P1,P2,P3,包括上图的TCON以及“#include 而像TOCN^1(也就是IE0)这些有什么作用呢? 后面我们就要开始学习单片机内部的资源了。 2.IE0的作用 大家还记得原理图的P3端口标出的这些吗 而P3寄存器的每一位都在“#include 我们先拿P3.2来说,如果这个IO端口被外部电路拉低,那么TCON的第1位(也就是TOCN^1)就会被置1,在程序中IE0变为1。 这样吧,我们用一根杜邦线的一头插入P3.2的引脚,然后另一头插入如下图所示GND的地方 接着把下面的代码下载进开发板看看有什么现象 #include #include //请提前将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。 这时需要我们在程序里让IE0清零(俗称软件清零)才行。 我们把下面的代码下载进去 #include #include 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单片机-中断函数
史海拾趣
|
GEL文件的功能? GEL文件的功能同emuinit.cmd的功能基本相同,用于初始化DSP。但它的功能比emuinit的功能有所增强,GEL在CCS下有一个菜单,可以根据DSP的对象不同,设置不同的初始化程序。以TMS320LF2407为例: #define SCSR1 0x7018 ;定义scsr1 ...… 查看全部问答> |
|
需要装厂商给的管理程序,用组合键Fn + F6(F7)来调整液晶屏的亮度。 由于厂商给的管理程序只能在windows下用,所以在linux下不能调亮度。 是不是只能自己写一个调节亮度的驱动才能办到?具体要做些什么?请高手给个思路。 ……刚刚转向底层开 ...… 查看全部问答> |
|
大伙,请问开关打上瞬间产生的峰值电压如何滤除,我的情况是这样的:380VAC的三相电经过一个3P(跳菲开关)出来,通过电感和电容的滤波给三相整流桥,出来的电压再经滤波给设备供电。出现的情况是:跳菲开关打上瞬间,有时会把三相整 ...… 查看全部问答> |
|
做一个登陆界面,输入一个四位的密码,若密码错误,就弹出错误消息 类 class CPASSWORDDlg : public CDialog {} 然后函数 BOOL CPASSWORDApp::InitInstance() { CPASSWORDDlg dlg;   ...… 查看全部问答> |
|
我用的是stm32fvbt6 72M 我发现ADC有问题,我用的是ADC1和ADC2同时转换,同步规则模式,ADC0接ADC_Channel_0,ADC_Channel_0通过5.1k电阻连gndADC1接ADC_Channel_,ADC_Channel_通过5.1k电阻连到3.3v下面是我用不同的采样时间得到的结 ...… 查看全部问答> |




