"); //-->
原创作品,转载请注明
作者:潇湘-,自动化大三(索漫科技linux驱动班学员)
一、目的在LPC2136下,研究IOPIN置高电平与IOSET置高电平的区别。
二、缘由在一系列实验时我发现,IOPIN寄存器在IODIR寄存器设置好方向后,也能实现输入和输出高低电平。和IOSET有所区别的是IOSET置高电平后要用IOCLR清除,而IOPIN只需要在变量赋值时重新覆盖即可。
三、实验过程大家可以用小灯程序做个实验
在我的开发板中小灯的引脚如下图所示 故做如下实验用IOPIN寄存器时#define LED1 1<<16
#define LED2 1<<17
#define LED3 1<<18
#define LED4 1<<19
/****************************************************************************
* 名称:initSystem()
* 功能:初始化IO
****************************************************************************/
void initSystem(void)
{
IO1DIR = LED1|LED2|LED3|LED4;//设置方向
IO1SET = LED1|LED2|LED3|LED4 ;//高电平使灯灭
}
/****************************************************************************
* 名称:main()
* 功能:初始化led,并实现led4闪烁的效果。
****************************************************************************/
int main(void)
{
initSystem();
while(1)
{
IO1PIN = LED1|LED2|LED3 ;//123灯灭,4灯亮
delay(40);
IO1PIN = LED1|LED2|LED3|LED4 ;//1234灯全灭
delay(40);
}
return 0;
}
由此可见,用IOXPIN寄存器时发现LED4在闪烁,说明当把变量赋给IOXPIN寄存器时可以刷新
用IOSET寄存器时
int main(void)
{
initSystem();
while(1)
{
IO1SET = LED1|LED2|LED3;
delay(40);
IO1SET= LED1|LED2|LED3|LED4 ;
delay(40);
}
return 0;
}
发现LED4灯没有闪烁,说明IOXSET寄存器必须要IOCLR置一才能消去高电平。
下面请看数据手册中IOSET和IOCLR的解释
数据手册告诉了我们。但是我发现IOPIN寄存器不只个状态寄存器,它也有别样的功能。程序在一定程度上可以简化,原来程序中,IOSET和IOCLR需要一起作用,如今只需要IOPIN一个寄存器就能解决了。
2012年6月19日
写于上海.松江
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。
eleaction01 阅读:4511