问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何配置 msp430g2553 io口的 其他功能

发布网友 发布时间:2022-04-24 16:38

我来回答

1个回答

热心网友 时间:2023-07-30 04:07

一 I/O的简介

1、各种复用和各种设置(可以作为简单IO功能也可以作各种第二功能;可控制为输入、输出、接上拉电阻、接下拉电阻、接受中断等各种情况);

2、IO口常用寄存器有:PXDIR、PXIN、PXOUT、PXREN、PXSEL、PXDS;其中,X可以是1~8,也可以是A~D,因为P1、P2可以合称为PA。例如(PAREN=0x0480)就等价于(P2REN=0x04、P1REN=0x80)。
IO口中断相关寄存器:PXIV、PXIFGX、PXIE、PXIES;由于IO中断仅存在于P1口和P2口,因此X只能为1或2,而且不可以为A。

3、msp430f5529.h中定义了BIT0~BITF,方便用户进行位操作。例如要设置P1.7和P2.2为输入,代码可如下:PADIR &= ~(BITA + BIT7)。

二 IO口常用寄存器配置

1、PxDIR,Px口方向寄存器
0 端口配置为输入(默认)
1 端口配置为输入

2、PxOUT,Px口输出寄存器(输入、输出两种模式)
当IO口配置为输出模式时:
0 输出低电平
1 输出高电平
当IO口配置为输入模式并且置高/ 置低使能时:
0置低
1置高

3、PxIN,Px 口输入寄存器
只读

4、PxREN,Px口置高/ 置低使能寄存器
0关闭置高/ 置低
1使能置高/ 置低

5、PxSEL,Px功能选择寄存器(IO中断只有在普通IO下才能使用)
0普通的I/O(默认)
1有连接外围电路的特殊用途

6、PxDS,Px 口输出驱动能力寄存器(我都是用的默认)
0减弱输出驱动能力(默认)
1全力输出驱动能力

三 普通IO使用举例

说明:本例程是流水灯加按键控制,每次S1按下,便在等待S2按下,否则,所有LED一直闪烁。若无按键按下,则八盏灯以流水灯方式显示。

#include <msp430f5529.h>
#define uint8_t unsigned char
#define uint16_t unsigned int

//********* 控制LED的IO口宏定义 *************
#define LED145678_PORT_DIR P1DIR
#define LED145678_PORT_OUT P1OUT
#define LED23_PORT_DIR P8DIR
#define LED23_PORT_OUT P8OUT

//************ LED的IO口宏定义 *************
#define LED1 0x01
#define LED2 0x02
#define LED3 0x04
#define LED4 0x08
#define LED5 0x10
#define LED6 0x20
#define LED7 0x40
#define LED8 0x80
#define LED_ALL 0xFF

//************ 按键的IO口宏定义 *************
#define BUTTON_S1 (P1IN & BIT7)
#define BUTTON_S2 (P2IN & BIT2)

//**********************************************************
//*函数: void delay(uint16_t x_ms)
//*功能: 延时程序
//*参数: x_ms(单位:ms)
//*返回: 无
//*备注: 无
//**********************************************************
void delay(uint16_t x_ms)
{
uint16_t i=0,j=0;
for(i=x_ms;i>0;i--)
for(j=110;j>0;j--);
}

//**********************************************************
//*函数: void LED_Init()
//*功能: LED的IO口方向初始化
//*参数: 无
//*返回: 无
//*备注: 无
//**********************************************************
void LED_Init()
{
LED145678_PORT_OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5);
LED145678_PORT_DIR |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5;
LED23_PORT_OUT &= ~(BIT1 + BIT2);
LED23_PORT_DIR |= BIT1 + BIT2;
}

//**********************************************************
//*函数: void Board_ledOn(uint8_t ledMask)
//*功能: 打开输入的那盏灯
//*参数: ledMask
//*返回: 无
//*备注: 无
//**********************************************************
void Board_ledOn(uint8_t ledMask)
{
if (ledMask & LED1) LED145678_PORT_OUT |= BIT0;
if (ledMask & LED2) LED23_PORT_OUT |= BIT1;
if (ledMask & LED3) LED23_PORT_OUT |= BIT2;
if (ledMask & LED4) LED145678_PORT_OUT |= BIT1;
if (ledMask & LED5) LED145678_PORT_OUT |= BIT2;
if (ledMask & LED6) LED145678_PORT_OUT |= BIT3;
if (ledMask & LED7) LED145678_PORT_OUT |= BIT4;
if (ledMask & LED8) LED145678_PORT_OUT |= BIT5;
}

//**********************************************************
//*函数: void Board_ledOff(uint8_t ledMask)
//*功能: 关闭输入的那盏灯
//*参数: ledMask
//*返回: 无
//*备注: 无
//**********************************************************
void Board_ledOff(uint8_t ledMask)
{
if (ledMask & LED1) LED145678_PORT_OUT &= ~BIT0;
if (ledMask & LED2) LED23_PORT_OUT &= ~BIT1;
if (ledMask & LED3) LED23_PORT_OUT &= ~BIT2;
if (ledMask & LED4) LED145678_PORT_OUT &= ~BIT1;
if (ledMask & LED5) LED145678_PORT_OUT &= ~BIT2;
if (ledMask & LED6) LED145678_PORT_OUT &= ~BIT3;
if (ledMask & LED7) LED145678_PORT_OUT &= ~BIT4;
if (ledMask & LED8) LED145678_PORT_OUT &= ~BIT5;
}

//**********************************************************
//*函数: void Board_ledToggle(uint8_t ledMask)
//*功能: 输入的那盏灯的状态取反
//*参数: ledMask
//*返回: 无
//*备注: 无
//**********************************************************
void Board_ledToggle(uint8_t ledMask)
{
if (ledMask & LED1) LED145678_PORT_OUT ^= BIT0;
if (ledMask & LED2) LED23_PORT_OUT ^= BIT1;
if (ledMask & LED3) LED23_PORT_OUT ^= BIT2;
if (ledMask & LED4) LED145678_PORT_OUT ^= BIT1;
if (ledMask & LED5) LED145678_PORT_OUT ^= BIT2;
if (ledMask & LED6) LED145678_PORT_OUT ^= BIT3;
if (ledMask & LED7) LED145678_PORT_OUT ^= BIT4;
if (ledMask & LED8) LED145678_PORT_OUT ^= BIT5;
}

//**********************************************************
//*函数: void main(void)
//*功能: 主函数
//*参数: 无
//*返回: 无
//*备注: 无
//**********************************************************
void main(void)
{
uint8_t LED = LED1; //定义变量LED
WDTCTL = WDTPW | WDTHOLD; //关闭看门狗
LED_Init(); //初始化LED的IO口方向
PADIR &= ~(BITA + BIT7); //将按键的IO口方向设为输入
PAREN |= (BITA + BIT7); //置高/ 置低使能
PAOUT |= (BITA + BIT7); //置高(类似于上拉)
while(1)
{
Board_ledOn(LED);
delay(1000); //延时1s左右
Board_ledOff(LED);
LED = LED << 1;
if(LED == 0x00) LED = LED1;
if(!BUTTON_S1)
{
delay(10); //消抖
if(!BUTTON_S1)
{
while(!BUTTON_S1);//等待S1释放
while(BUTTON_S2) //等待S2按下
{
Board_ledToggle(LED_ALL);//所有LED状态取反
delay(300);
}
Board_ledOff(LED_ALL);//关闭所有LED
}
}
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
win7不能浏览网页,但用搜狗浏览器高速模式能上网,兼容就不行???求 ... ...64位 IE浏览器无法打开网页 搜狗浏览器可以打开 类似的新窗口网页都... 千牛工作台子账号怎么开权限?子账号的安全设置在哪里? 千牛怎么设置子账号-千牛设置子账号步骤 怎么把CD里的歌曲改成MP3格式? ...戴眼镜吗?想给孩子去检查一下,哪里比较推荐,渭南这块的 Windows Media Player将CD音乐转换为MP3 最简单的方法将CD转换为MP3音频文件(一步一步教你将CD音乐转换为MP3格 ... 孩子最近视力下降了有可能是近视吗?渭南哪里可以免费检查视力啊 奥运会跳远世界纪录 福州哪里起名好 关于ccs中的delayus这个延时函数是否准确? 福州起名公司,那个给孩子起名好? 别克君威怎么连接蓝牙放歌? 起名 姓颜 男孩 出生2014.4.13 04:41 福建福州 求名 第二个字和第三个字的五行属性 DSP cpu定时器0 为何不中断 福州哪里有给宝宝起名字的好地方哪个起名馆专业靠谱 MSP430 的Toggle P6.7什么意思 福州哪里给宝宝起名起得好呢? DSP定时器0问题 起名:李姓宝宝(公历2020年10月4日凌晨2点31分)福建福州? 关于toggle flash的疑问和onfi协议 ab plc编程软件RSLogix5000取消所有toggle bit(位翻转) 为什么在TOF指令里toggle bit功能自动添加 PLC的Toggle-Bit是什么意思,可以自己定义为数字量输出吗? 描写天气的成语 描写夏天的优美句子,并写摘自哪本书. 石和可 这两个字的部首和结构分别是什么,请高人赐教! 以流金结尾的成语是什么 形容下午的太阳的词语 怎么在烧录的时候在msp430g2553的information memory中烧录参数 福州周易取名大师 Windows\CurrentVersion\Policies里面是空白,咋么办? 煞费心机,起名难! JsTree的demo怎么创建子节点 3ds max的软件历史 vb 的一个简单问题(对懂的人而言)好的话,再加分! 请问哪里有3dmax 术语中英文对照表? 怎样在Q上自定义音频文件 就是声音提示 世界十大品牌手表是哪十家?产地分别是哪里? 瑞士表与日系表,哪个更强? 瑞士表和天王表哪个牌子的好? 手表的产地都是哪里的 卡西欧和swatch 的手表哪个牌子好? 卡地亚手表,瑞士还是意大利,英国 介绍一下手表品牌,档次,产地等。。。 seiko手表产地是哪里??? 瑞尼世家的表原产地是瑞士吗?好不好? 冠琴和峰浪手表哪个更好,产地分别是哪里 联通号码可以换移动吗