历史上的今天
返回首页

历史上的今天

今天是:2025年02月08日(星期六)

正在发生

2020年02月08日 | MSP430的IO配置

2020-02-08 来源:eefocus

MSP430单片机一般有多组IO口,P1、P2、P3、P4、P5和P6等。在单片机所有的端口都有控制输入输出方向和进行输入、输出的能力。其中P1、P2组端口具有中断寄存器,能够响应外部中断,大部分端口拥有第二功能。每一个端口都有PxDIR(信号方向)、PxIN(输入)、PxOUT(输出)和PxSEL(功能选择)4个寄存器。P1、P2 可以配置为输入信号上升沿或者下降沿触发中断,但固定的电平不会引起中断,中断所使用的寄存器为:PxIE(中断使能)、PxIES(中断触发沿)、PxIFG(中断标志)。还有一个寄存器PxREN,这个寄存器主要是配置单片机内部的上下拉电阻,注意,早期的单片机并没有内部上下拉电阻。


PxDIR:信号方向控制寄存器,设置为1时,则该引脚的信号方向为输出;设置为0则为输入。在上电复位时初始值全部默认为输入方向。

PxIN:输入寄存器,在输入模式下,读取该寄存器的相应比特位来获取相应引脚上的数据。如果相应引脚输入的是高电平则读取到1,如果是低电平则为0。

PxOUT:输出寄存器,在输出模式下,如果该寄存器的相应比特位设置为1,则相应比特位的引脚输出高电平,如果设置为0则输出低电平。

PxSEL:功能选择寄存器,用于选择是普通数字IO还是作为外围模块的功能。在含有第二功能引脚上的相应比特位设置为1时则设置为外围模块功能,设置为0则为普通IO。

PxIE:中断使能寄存器,该寄存器控制P1,P2端口的中断使能。也就是说MSP430F249的外部中断输入引脚就有16个。在相应引脚的比特位设置为1则使能中断,设置为0则屏蔽中断。在系统复位时,其初始值全部为0,默认不允许中断。

PxIES:中断触发沿选择寄存器,此寄存器主要针对于P1,P2端口中断的触发方式选择。设置相应引脚的相应比特位为1时,则相应引脚的触发方式为下降沿,设置为0是则为上升沿。在系统复位时,其初始值全部为0,默认上升沿触发中断。

PxIFG:中断标志寄存器,读取该寄存器相应P1,P2端口的比特位,如果为1则说明在相应的引脚上有外部中断发生;如果为0则没有外部中断发生。

PxREN:内部上下拉电阻选择寄存器,设置相应引脚的比特位为1则开启上下拉电阻,为0则关闭内部上下拉电阻。注意上下拉是否开启由PxREN寄存器决定,而上拉还是下拉是由PxOUT寄存器决定。在作为输出时,随着PxOUT的高低,自动选择上下拉,这就是平时我们没有特别的去设置内部上下拉也可以输出高电平的原因。但是作为输入的时候,这个就要配置了,我们可以人为的赋PxOUT寄存器来得到上下拉。


例如:要设置P1.0为高电平输出,P1.1为低电平输出,P1.2取反,读取P1.3的数据

写法①:P1OUT |= BIT0;//P.0输出高电平

P1OUT &= ~BIT1;//P.1输出低电平
P1OUT ^= BIT2;//P.2取反
if((P1OUT & BIT3) == 0)//判断P1.3的是否为低电平
{
//执行代码
}

写法②:P1OUT |= 0x01;//P.0输出高电平
P1OUT &= ~0x02;//P.1输出低电平
P1OUT ^= 0x04;//P.2取反
if((P1OUT & 0x08) == 0)//判断P1.3的是否为低电平
{
//执行代码
}

写法③:P1OUT |= (1<<0);//P.0输出高电平
P1OUT &= ~(1<<1);//P.1输出低电平
P1OUT ^= (1<<2);//P.2取反
if((P1OUT & (1<<3)) == 0)//判断P1.3的是否为低电平
{
//执行代码
}

推荐阅读

史海拾趣

BTCPower公司的发展小趣事

随着技术的不断成熟和产品的广泛应用,BTCPower开始寻求更广阔的市场空间。公司积极与国际知名电子品牌进行合作,将其产品推向全球市场。通过与这些品牌的合作,BTCPower不仅提升了自身的品牌知名度,还获得了更多的商业机会和市场份额。

Forge Europa Ltd公司的发展小趣事

在全球化布局的同时,Forge Europa Ltd公司也注重在中国市场的本土化深耕。公司在中国设立了研发中心和生产基地,以更好地服务中国市场并融入本土产业链。通过深入了解中国市场的需求和特点,Forge Europa不断调整产品策略,推出了一系列符合中国市场需求的LED灯带产品。此外,公司还积极与中国本土企业合作,共同推动LED照明技术的发展和应用。

CUI Devices公司的发展小趣事

CUI Devices与富昌电子之间的合作关系可以追溯到CUI Inc的时代。多年来,双方建立了深厚的合作基础。在CUI Devices从CUI Inc剥离后,富昌电子继续支持其发展,成为其重要的合作伙伴之一。双方共同致力于推动电子元件行业的发展,为客户提供更优质的产品和服务。这种稳固的合作关系为CUI Devices在市场竞争中提供了有力的支持。

这五个故事展示了CUI Devices在电子行业中的发展历程和取得的成就。从起源与转型到应对全球健康危机的积极举措,再到在压电警报器市场的卓越表现以及电机品牌的崛起与拓展,每一个故事都见证了公司的成长和进步。同时,与富昌电子的稳固合作也为公司的未来发展奠定了坚实的基础。

AMRI Enterprise Co Ltd公司的发展小趣事

AMRI Enterprise Co Ltd注重与高校和研究机构的产学研合作,通过引进先进技术和人才,推动公司的技术创新。公司与多所知名高校建立了紧密的合作关系,共同开展科研项目和技术攻关。这些合作不仅为AMRI带来了前沿的技术成果,还提升了公司的研发能力和创新能力。在产学研合作的推动下,AMRI不断推出具有创新性和竞争力的新产品,为公司的持续发展提供了强有力的支撑。

Alliance Fiber Optics Products Inc公司的发展小趣事

随着产品质量的不断提升和市场需求的扩大,AFOP开始积极拓展国内外市场。公司通过与各大电信运营商、设备制造商等建立合作关系,将产品应用于长途通信、大都会网络以及最后一里接入等领域。同时,AFOP还积极参与国际光纤通信展览会等活动,加强与国际同行的交流与合作,提升了公司在国际市场的知名度。

General Instrument Corp公司的发展小趣事
通常为0至5V(单电源供电),支持比例量测量或可选的外部电压参考。

问答坊 | AI 解惑

国内十大GPS车载终端品牌介绍

深圳赛格导航       深圳市赛格导航科技股份有限公司是国内GPS车载监控产品应用领域的开拓者,从 94年开始研究和应用GPS 技术,具有资深的行业经验。产品与服务包括面向国内和海外的汽车GPS定位监控系统设备、物流GPS监控、车 ...…

查看全部问答>

DM12232A(C框LED).pdf

本帖最后由 paulhyde 于 2014-9-15 09:22 编辑 DM12232A(C框LED).pdf  …

查看全部问答>

mips64 如何映射32位物理地址

  各位高手,我用mips是octeon 64位的,而地址总线是32位的,请问VM,PA之间如何映射???   先谢谢啊!…

查看全部问答>

为什么GPIO中有的Pin要设为Pull_Up/Pull_Down?

如题,其中有的pin为输入pin,有的pin为输出pin,但是为什么要设置一些pin的属性为pull up或者为pull down,pull up/pull down到底是干吗用的?根据什么来设的呢,聆听各位大虾的教诲!!…

查看全部问答>

CE下控件显示问题?

我建了个工程,发现有好多控件显示不出来为什么那怎么办那?…

查看全部问答>

为什么VS2005开发Win CE程序连接Access数据库,可是却没有System.Data.OleDb类库?

我用VS2005开发Win CE程序,连接Access数据库,可是却没有System.Data.OleDb类库,只有System.Data.Common System.Data.SqlTypes 这两个类库,怎么回事啊???? 只好用System.Data.Common.DbConnection连接,可是出现一下问题: DbConnection myCo ...…

查看全部问答>

波特率的问题请教

我对硬件不怎么了解,想问一下如果发送的硬件的波特率是19200,接收的波特率是9600,这之间可以进行准确通信么,就是19200的向9600的发送数据,后者可以识别发送的具体是什么么? 谢谢…

查看全部问答>

UCC39002的均流问题

本帖最后由 dontium 于 2015-1-23 13:19 编辑 我准备使用UCC39002与三个D/C D/C模块实现均流,可是TI官方给出的PDF中没有的实际应用,只是告诉参考资料为TI文献NO.SLUA270中UCC39002与PH-100S4 模块,可是PH-100S4又没法网络上查 ...…

查看全部问答>

也学“下载到FLASH”里------------F28035 C2000

我的F28035在RAM中运行正常,下到FLASH里就不运行了。   慢慢再看它的资料吧       [ 本帖最后由 dontium 于 2012-2-14 16:26 编辑 ]…

查看全部问答>

新手求助STM32的流水灯问题

看《零死角玩转STM32》的初级篇中的流水灯,根据他的步骤写完程序,烧进去,结果灯全亮,不闪,后来干脆不高延时,改成如下所示还是全亮; LED1( ON );     // 亮             LED1 ...…

查看全部问答>