What
芯片那些插针、引脚是其与外界交流的通道。
由数据手册可得
MSP430G2553共有20个引脚,每个引脚都有其对应的功能,其功能分别如下
这一节主要讨论其中的I/O(输入、输出功能)
G2553具有16个I/O口,这些引脚作为数字I/O口时可用于用于输入、输出电平,输入、输出0或1。
How
在使用I/O口时首先需要向相应的功能寄存器赋值以选择其所要实现的功能
其余I/O口配置见数据手册43~58页。
数字I/O口的使用
以上每个寄存器的含义以及如何进行数据的输入、输入、输出电平配置及中断(后面章节会学到)配置可见于用户指南325~332页。
下面对其中上拉、下拉设置做一下说明:
以P1.3口引出的按键为例
在按键未按下时,P1.3处于悬空状态,外部对其干扰较大,高低电平不确定,需要手动设置其为上拉(高电平)还是下拉(低电平)电阻
由图可得:PxREN使能上、下拉电阻(=1时使能);PxOUT设置为上、下拉(=1时为上拉)
举例:点亮LED1
分析:由上图LED电路图可知:两LED共阴极,若要点亮LED1需要使P1.0输出高电平,因此需要配置P1.0口为数字I/O功能并且为输出方向。
#include "io430.h"
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1SEL &= ~BIT0;
P1SEL2 &= ~BIT0;//设置P1.0为IO口
P1DIR|=BIT0;//设置P1.0为输出
P1OUT|=BIT0;//P1.0输出为高电平
while(1){}//单片机主程序必须是一个死循环
}
Task:
按键S2控制灯亮灭,按下一次亮起,再按一次灯灭。
分析:此功能实现需要实现按键检测,单片机开发板上常用弹性按键和自锁式小按键两种
如果不进行按键消抖检测在,按下按键的一段时间内,单片机会进行多次检测到多次按键被按下,所带来的LED的状态也就发生多次翻转;我们需要宏观上按下一次按键,单片机也就只检测一次按键。
基本方法:当检测到第一次按键被按下时,延时10ms后若仍然检测到按键被按下,并且按键按下标志不为1,则按键按下标志置1。
#include <msp430.h>
/* @fn: void Delay_ms(unsigned cnt)
@brief: 延时函数,若MCLK为1MHz,则延时cnt ms
@para: 无符号整数cnt
@return: none
@comment: 延时
*/
void Delay_ms(unsigned cnt) //单片机每执行一条语句会花费一定的固定时间
{ //将多个小时间累计起来达到延时功能
unsigned int i,j; //其中时钟配置问题后面再学,默认为这么多
for(j=0;j<cnt;j++)
{
i=1000/6;
while(i--);
}
}
int main(void)
{
unsigned int Key_Val_Current=1;
char Key_Pressed_Flag=0;
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P1SEL &= ~(BIT0+BIT3); //设置P1.0,P1.3为IO口
P1DIR |= BIT0; // 设置P1.0为输出
P1DIR &= ~BIT3; // 设置P1.3为输入
P1REN |= BIT3; // 使能SW2为上下拉 (P1.3)
P1OUT |= BIT3; // 设置SW2为上拉 (P1.3)
while (1)
{
Key_Val_Current=BIT3 & P1IN;//按键按下检测,若按键按下,则P1.3输入为低电平
if(Key_Val_Current==0)
{
Delay_ms(10);
Key_Val_Current=BIT3 & P1IN;
if(Key_Val_Current==0)
{
while((BIT3 & P1IN)==0);
Key_Pressed_Flag=1;
}
}
if (Key_Pressed_Flag)
{
P1OUT ^= BIT0;
/*该式等效为P1OUT=P1OUT^BIT0
P1OUT初始化为xxxxxxx0,BIT0为00000001
第一次执行此语句时,P1OUT=xxxxxxx0^00000001=xxxxxxx1,P1.6输出高电平,LED1点亮
第二次执行此语句时,P1OUT=xxxxxxx1^00000001=xxxxxxx0,P1.6输出低电平,LED1熄灭
*/
Key_Pressed_Flag=0;
}
}
}
该题还可以采用中断处理程序实现,上述程序CPU一直在查询按键是否按下,而利用中断处理,当按键按下时才告诉CPU,CPU进入处理程序(LED状态翻转),可以减少CPU的占用。
IAR调试操作菜单:
- Step Over,F10: 在同一函数中运行至下一步。
- Step Into,F11: 运行至下一步,无论是否在同一函数中。
- Step Out,Shift+F10: 进入函数体后,可执行完整个函数并返回至调用语句的下一步。
- Go,F5: 从当前位置开始,运行到一个断点或者程序末尾。
- Break: 中止程序运行。
- StopDebuging: 退出调试器,返回IAR 环境。
- Reset: 重置CPU。可直接通过按下LaunchPad上的复位键实现