历史上的今天
返回首页

历史上的今天

今天是:2025年02月28日(星期五)

正在发生

2020年02月28日 | MSP430系列嵌入式实验教程---GPIO

2020-02-28 来源:eefocus

端口控制寄存器

端口P1具有输入/输出、中断和外部模块功能,这些功能可通过7个控制寄存器的设置来实现。下面介绍


各控制寄存器特点及其使用:


PxDIR 输入/输出方向寄存器

输入/输出方向寄存器

相互独立的8位分别定义了Px 口的8位的输入输出方向。

使用输入/输出功能时,应先定义端口方向。作为输入时,只能读;作为输出时,可读可写。

PxDIR.x:端口输入输出方向控制

0:输入模式

1:输出模式

操作:

    P1DIR |=0x10; // P1.4作输出,其余各位端口方向不变。

    P1DIR &=0x7f; // P1.7作输入,其余各位端口方向不变。


PxIN 输入寄存器

l输入寄存器

该寄存器是只读寄存器。只能通过读取该寄存器内容才能知道Px 口的输入信号的状态。

读出此寄存器的内容中,只有Px口设为输入的数据位有效。

对于 Px口设为输出的那些位,一般来说,PxIN.x = PxOUT.x

PxIN.x:端口输入的电平

0:端口输入低电平

1:端口输入高电平

操作:

    unsigned char Temp;

    P1DIR &=0x77 ; // P1.3和P1.7输入

    Temp = P1IN; // Temp为在已定义的一变量,Temp 中只要第7位和第四位有效。


PxOUT 输出寄存器

输出寄存器

该寄存器可读可写,读取时,其内容与Px 口引脚定义无关。改变方向寄存器的内容,此寄存器内容不受

影响。

PxOUT.x:端口输出的电平

0:端口输出低电平

1:端口输出高电平

注意:

P1OUT.0 = 1(P1.0输出高),但是P1DIR.0 = 0(该引脚为输入模式),则此时P1.0为输入;

如果将P1DIR.0 = 1(该引脚为输出模式),则此时P1.0为输出,并且输出为高电平。

操作:

    P1DIR |=0x88; // P1.3和P1.7输出

    P1OUT |=0x88; // P1.3和P1.7输出高电平


MSP430的位操作

RISC精简指令集

MSP430属于RISC型处理器,与普通51类型的复杂指令集的区别在于RISC型处理器不能进行位操作,也就上内存寻址只能到字节不能到位。举个例子来说,一栋楼只有一个邮政编码,快递员送东西只送到楼,显然比送到户要快,但至于包裹具体是哪户人家的就得再想点办法了。


写位操作

对某个字节直接使用“=”进行写操作时,所有的位的值都将改变。如果先将原字节的值读出来,使用位操作对原字节进行赋值,就可以“等效”实现对单个位的写操作。


/* 设定P1OUT原始值为b'0101 1010 */

    P1OUT |= 0x01;          /* P1OUT = P1OUT | b'0000 0001

                                           b'0101 1010      //P1OUT:0x5A

                                        |  b'0000 0001      //0x01

                                       _________________

                                           b'0101 1011      //P1OUT:0x5B

                             或操作可以实现对特定位置1  */


    P1OUT &= ~0x10;         /* P1OUT = P1OUT & b'1110 1111

                                             b'0101 1011      //P1OUT:0x5B

                                          &  b'1110 1111      //0xEF

                                       _________________

                                              b'0100 1011     //P1OUT:0x4B

                             与操作可以实现对特定位置0  */


    P1OUT ^= 0x02;          /* P1OUT = P1OUT ^ b'0000 0010

                                             b'0100 1011      //P1OUT:0x4B

                                          &  b'0000 0010      //0x02

                                       _________________

                                              b'0100 1001     //P1OUT:0x49

                             异或操作可以实现对特定位取反*/


这样可以实现只对特定位进行操作而不影响其他位的值。

另外为了方便操作在”msp430xxx.h"里还包含了各种宏定义来辅助位操作。


#define BIT0                (0x0001u)

#define BIT1                (0x0002u)

#define BIT2                (0x0004u)

#define BIT3                (0x0008u)

#define BIT4                (0x0010u)

#define BIT5                (0x0020u)

#define BIT6                (0x0040u)

#define BIT7                (0x0080u)

#define BIT8                (0x0100u)

#define BIT9                (0x0200u)

#define BITA                (0x0400u)

#define BITB                (0x0800u)

#define BITC                (0x1000u)

#define BITD                (0x2000u)

#define BITE                (0x4000u)

#define BITF                (0x8000u)


有了BIT0-BITF后,可以方便地对寄存器的各位进行设置,不用再一个一个去数二进制的位数了。上述代码可以改写为:


P1OUT |= BIT0; //P1.0 输出高电平

P1OUT &= ~BIT4 //P1.4 输出低电平

P1OUT ^= BIT1; //P1.1 电平取反


另外也可以多个位一起操作:


P1OUT | = BIT3 + BIT5 +BIT6;    //P1.3 P1.5 P1.5 输出高电平

P2OUT & = ~BIT2 + ~BIT4 + ~BIT7;   //P2.2 P2.4 P2.7 输出低电平


读位操作

if((P1IN&BIT6) == BIT6)     //如果P1.6输入高电平    b'0100 1010 & b'0100 0000 = b'0100 0000

                            //                     b'0000 1010 & b'0100 0000 = b'0000 0000

P2OUT |= BIT0; //P2.0输出高电平

else

P2OUT &= ~BIT0; //P2.0输出低电平


其他功能寄存器后请查阅后续教程

推荐阅读

史海拾趣

Dymec公司的发展小趣事

在国内市场取得一定成绩后,Dymec公司开始寻求更广阔的发展空间。公司决定进军国际市场,通过参加国际展会、建立海外销售渠道等方式,逐步打开了国际市场的大门。在拓展国际市场的过程中,Dymec公司不仅提升了品牌影响力,还积累了丰富的国际业务经验。

Emmoco公司的发展小趣事

Emmoco一直将品质管理作为公司发展的核心。公司建立了完善的质量管理体系,从原材料采购到生产、检测、包装等各个环节都进行严格的质量控制。同时,Emmoco还注重持续改进,通过引入先进的生产设备和工艺、优化生产流程等方式,不断提高产品质量和生产效率。这些举措使得Emmoco的产品在市场上赢得了良好的口碑和声誉。

Ferranti Electric Inc公司的发展小趣事

作为一家具有社会责任感的企业,Ferranti Electric Inc公司一直致力于可持续发展。公司注重环保和节能,采用环保材料和生产工艺,减少对环境的影响。同时,公司也积极参与公益事业和社会活动,回馈社会。这些举措不仅体现了公司的社会责任感,也为公司的长远发展奠定了坚实的基础。

长工微电子公司的发展小趣事

长工微电子成立于2016年5月,创立之初,公司就明确了以技术创新为核心的发展战略。公司迅速组建了一支由高级工程师、博士、硕士等组成的数十人专业开发运营团队。这支团队秉承着“创新、踏实、学习”的理念,致力于电源集成芯片市场,不断推出创新产品。通过每年推出5-10款核心芯片的速度,长工微电子迅速占领了中高端市场,逐渐在行业中崭露头角。

Geo Semiconductor Inc公司的发展小趣事
通过优化控制逻辑和增加自动化功能,减少人工干预,提高生产过程的自动化程度。
FEMA Electronics Corporation公司的发展小趣事

FEMA始终将产品质量视为企业的生命线。为了确保产品质量的稳定可靠,公司建立了一套完善的质量管理体系,并引进了先进的生产设备和技术。同时,FEMA还注重员工的培训和素质提升,确保每一个生产环节都能达到最高的质量标准。正是凭借这种对品质的执着追求,FEMA的产品在市场上赢得了良好的口碑和声誉,逐渐成为了行业内的知名品牌。

问答坊 | AI 解惑

RFIC和RFID 完全不同吧?

百度的答案,还请大家深入说说: RFIC是RF System 里的Block做成IC ,,基本上成品就是IC ; 而RFID是Radio-frequency identification 是一个系统,有特定的规范。 二者是否有确定的包含与被包含的关系呢?…

查看全部问答>

在Wince上进行快速应用开发(RAD)!!!!

Lazarus是一个类似Delphi的IDE,其语言是Free Pascal,开发方式就是RAD,自从2.2.0 FPC(Free Pascal Compile)开始,就支持WINCE -ARM平台。使用Lazarus开发,界面可以比C#丰富,且更为简单,但是速度会快很多,因为Lazarus生成的是二进制EXE,而 ...…

查看全部问答>

安装CE6的SP1出错toolMsmCA(Error):Setup package issue or CoreCon。。。

安装CE6的SP1是出错 “ToolMsmCA(Error):Setup package issue or CoreCon DataStore corrupted:CDeviceSDKInstallShin Add/Remove failed.HR=0x80004005. 我之前装了VS2005。 这几天才装这个,不知怎么出错,安装进度停在Installing the Gene ...…

查看全部问答>

最牛的无线数传资料

无线数传模组: a.通用数传模组    WAP200B、EM200D、GW200B,最大100mW,64个频道,传输距离800米左右,内置前向纠错,最高速度19200(接口可达115200); b.高灵敏度数传模组   WAP200C、GW200KB,最大20mW,64个频道,传 ...…

查看全部问答>

DDK下重载new/delete的问题

各位,最近在开发一个驱动的时候需要检测内存泄漏,于是自己重载了new/delete,在win32下测了一下没问题,于是决定将其加入到当前的驱动下。可是,问题来了,总是出现LNK2005的错误,我查了一下这个错,应该是连接顺序的问题,出错信息显示在DDK中 ...…

查看全部问答>

急!需要开发条码打印机。不知道如何设计及开发?

市场有一款是uc/os 8 位的代码打印机。 可以接扫描枪,扫入条码,然后按键。打印出一个新条码。 现在想开发这样的东东。谁做过啊? 着急啊。请求指点,合作都可以…

查看全部问答>

STM32现在有没有带总线和USBHOST或者OTG的片子?

                                  …

查看全部问答>

ASM eagle60 W/B BSOB

近来老板搞了点垃圾产品,在生产时用的是BSOB,但第二点不是翘线就是打不上,很多参数都用过了,不知还有哪里没想到的。求教怎样可以使ASM eagle60 W/B 的BSOB达到最佳。…

查看全部问答>

LM4F232系列模块的使用

之前用过MDK4.22版的 反正觉得有点问题,编译的时候 似乎没有错会报错  于是就换成了4.21版本的 附件是一个被压缩的工程包,此工程包过对PWM、定时器、串口、OLED(基于GR_LIB)、按键、LED等模 块的使用。建工程就不说了 相信用keil软件的 ...…

查看全部问答>

如何成为单片机开发高手

单片机适用于电子玩具、工业控制、民用电器、机电一体化产品、航天航海等众多领域,而单片机的应用开发不单是软件的开发,其开发语言和硬件密切相关。所以只有开发者对单片机的内部结构非常了解,才能编好软件。而单片机的开发应用还涉及到硬件扩展 ...…

查看全部问答>