MSP430单片机的通用IO接口要点解析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MSP430F249单片机的每组I/O口都有4个控制寄存器,分别为方向控制寄存器 PxDIR、输入寄存器 PxIN、输出寄存器PxOUT和功能选择寄存器PxSEL,此处,小写字母“x”表示6组I/O口的数字序号,x= 1~6,即P1口的方向控制寄存器为P1DIR,P6口的方向控制寄存器为P6DIR。另外,P1和P2口还具有3个中断寄存器,分别为中断允许寄存器PxIE、中断沿选择寄存器PxIES和中断标志寄存器PxIFG,此处,x= 1~2。 Px口的每个引脚都可以单独配置成输入或者输出方向的控制。需要注意的是:MSP430系列单片机端口输出电流最大为6mA,当需要驱动比较大的负载的时候,需要利用三极管或者缓冲器来提高端口的驱动能力。 MSP430 单片机的 I/O口为双向I/O口,因此在使用 I/O口前首先要用方向选择寄存器来设置每个 I/O 口的方向,在程序运行中还可以动态改变I/O口的方向。例如P1.0、P1.1、P1.2接有按键,P1.4、P1.5、P1.6接有 LED,通用I/O接口应用示例如图3.1所示。 P1DIR |= BIT4+BIT5 +BIT6; // P1.4、P1.5、P1.6设为输出 P1DIR = ~ (BIT0+BIT1+BIT2); // P1.0、P1.1、P1.2设为输入(可省略) 图3.1 通用I/O接口应用示例图 P1OUT = BIT4+BIT5 +BIT6; // P1.4~P1.6输出高电平 // 二极管阳极接高电平,二极管不发光 if((P1IN BIT0) == 0) P1OUT |= BIT4; //P1.4输出低电平点亮LED 实例3.1 彩灯控制 任务要求:利用MSP430F249单片机的P1口控制8个发光二极管LED1~LED8,P1口接入三个开关K1~K3,当K1闭合时,LED1和LED4闪烁,闪烁时间1s;当K2闭合时,LED2和LED5闪烁,闪烁时间2s;当K3闭合时,LED1~LED8循环闪烁,闪烁时间1s。 分析说明:发光二极管LED是一种半导体器件,当两端压降大于1V时,通过 5mA 左右的导通电流时即可发光。导通电流越大,亮度越高,但若电流过大,会烧毁二极管,一般我们控制在3~20mA。在这里,给发光二极管串联一个电阻的目的就是为了限制通过发光二极管的电流不要太大,因此这个电阻又称为“限流电阻”,通常取300~1000Ω。MSP430F249单片机的I/O口输出电流最大为6mA,所有电流之和不超过48mA。且当其 I/O 口输出“0”时,可以吸收最大 40mA 的电流。因此采用单片机I/O口控制发光二极管负极的设计。 图3.2 实例3-1彩灯控制硬件电路图 #include MSP430f249.h #define uchar unsigned char #define uint unsigned int /*********软件延迟ms子程序*********/ void delayus(uint t) { uint i; while(t--) for(i=1300;i0;i--); } void main(void) { uint mask = 0x01; WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 P1DIR = 0xFF; // 设置方向为输出 P1SEL = 0x00; // 设置为普通I/O 口 P1OUT = 0xFF; //LED输出全部关闭 while(1) { if((P2IN0x07) == 0x06) //K1 开关闭合 { P1OUT ^= (BIT0 + BIT4); //LED0,LED4闪烁 delayus(100); //延迟0.1s } else if((P2IN0x07) == 0x05) //K2 开关闭合 { P1OUT ^= (BIT1 + BIT5); //LED1,LED5闪烁 delayus(200); //延迟0.2s } else if((P2IN0x07) == 0x03) //K3 开关闭合 { P1OUT = ~mask; //LED逐个点亮 delayus(100);

文档评论(0)

我是兰花草 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档