历史上的今天
返回首页

历史上的今天

今天是:2025年03月09日(星期日)

正在发生

2020年03月09日 | msp430g2553单片机学习心得

2020-03-09 来源:eefocus

四年前学习的TI的Msp430g2553这款单片机,最近在整理学习记录的时候把当时的学习心得重新写下来。学习单片机最早是学习的51系列的,看的也是广为推崇的郭天祥郭老师的《十天学习单片机》,个人觉得单片机学习还是最先攻克51的。学习好51之后,对单片机操作有了基本的认识,再学习其他款单片机自然是能融会贯通。


TI的430系列主打是低功耗,它的技术文档和Dome程序都非常详细,尤其是技术文档真让人有种膜拜的感觉,在每个模块的时候还有个框图,对理解模块内设置非常有帮助,我当时还特意打印了。当时它的User's Guide还没有中文版,如果实在看不懂,可以借鉴F149系列的(这款有人翻译了中文版本)。


个人觉得在学习g2553这款单片机中,主要注意的点:


(1)注意低功耗的使用,选用不同的模式。


(2)IO的设置,由于IO口比较少,复用的比较严重,当时 一直纠结IO口的REN与OUT,DIR的问题,下面这个表概括详细,总结I/O 口配置时PxDIRx、PxRENx和PxOUTx寄存器的用法 

                                                                  

  PxDIRx          PxRENx       PxOUTx       I/O 口配置  

                 0                0                 x                输入   

                 0                1                 0                置低 

                 0                1                 1                置高 

                 1                x                 x                输出



其他具体的由于当时的笔记找不到,就不能一一说明了。


下面是比较实用的G2553框架程序:


#include 

 

//函数声明 

void InitSys(); 

 

 

int main( void ) 

     

     WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 

     

     InitSys(); //初始化 

     

     start: 

     //以下填充用户代码 

     

     

     LPM3; //进入低功耗模式n,n:0~4。若不希望进入低功耗模式,屏蔽本句 

     goto start; 

     

 

/***************************************************************************** 

系统初始化 

******************************************************************************/ 

void InitSys() 

     unsigned int iq0; 

     

     //使用XT2振荡器 

     BCSCTL1&=~XT2OFF; //打开XT2振荡器 

     do 

     { 

           IFG1 &= ~OFIFG; // 清除振荡器失效标志 

           for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振 

     } 

     while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振 

     

     BCSCTL2 =SELM_2+SELS; //选择MCLK、SMCLK为XT2 

     

     //以下填充用户代码,对各种模块、中断、外围设备等进行初始化 

     

     _EINT(); //打开全局中断控制,若不需要打开,可以屏蔽本句 

 

/***************************************************************************** 

端口2中断函数 

******************************************************************************/ 

#pragma vector=PORT2_VECTOR 

__interrupt void Port2() 

     //以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。 

     if((P2IFG&BIT0) == BIT0) 

     { 

           //处理P2IN.0中断 

           P2IFG &= ~BIT0; //清除中断标志 

           //以下填充用户代码 

           

     } 

     else if((P2IFG&BIT1) ==BIT1) 

     { 

           //处理P2IN.1中断 

           P2IFG &= ~BIT1; //清除中断标志 

           //以下填充用户代码 

           

     } 

     else if((P2IFG&BIT2) ==BIT2) 

     { 

           //处理P2IN.2中断 

           P2IFG &= ~BIT2; //清除中断标志 

           //以下填充用户代码 

           

     } 

     else if((P2IFG&BIT3) ==BIT3) 

     { 

           //处理P2IN.3中断 

           P2IFG &= ~BIT3; //清除中断标志 

           //以下填充用户代码 

           

     } 

     else if((P2IFG&BIT4) ==BIT4) 

     { 

           //处理P2IN.4中断 

           P2IFG &= ~BIT4; //清除中断标志 

           //以下填充用户代码 

           

     } 

     else if((P2IFG&BIT5) ==BIT5) 

     { 

           //处理P2IN.5中断 

           P2IFG &= ~BIT5; //清除中断标志 

           //以下填充用户代码 

           

     } 

     else if((P2IFG&BIT6) ==BIT6) 

     { 

           //处理P2IN.6中断 

           P2IFG &= ~BIT6; //清除中断标志 

           //以下填充用户代码 

           

     } 

     else 

     { 

           //处理P2IN.7中断 

           P2IFG &= ~BIT7; //清除中断标志 

           //以下填充用户代码 

           

     } 

     

     LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽 

 

/***************************************************************************** 

USART1发送中断函数 

******************************************************************************/ 

#pragma vector=USART1TX_VECTOR 

__interrupt void Usart1Tx() 

     //以下填充用户代码 

     

     

     LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽 

 

/***************************************************************************** 

USART1接收中断函数 

******************************************************************************/ 

#pragma vector=USART1RX_VECTOR 

__interrupt void Ustra1Rx() 

     //以下填充用户代码 

     

     

     LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽 

 

/***************************************************************************** 

端口1中断函数 

多中断中断源:P1IFG.0~P1IFG7 

进入中断后应首先判断中断源,退出中断前应清除中断标志,否则将再次引发中断 

******************************************************************************/ 

#pragma vector=PORT1_VECTOR 

__interrupt void Port1() 

     //以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。 

     if((P1IFG&BIT0) == BIT0) 

     { 

           //处理P1IN.0中断 

           P1IFG &= ~BIT0; //清除中断标志 

           //以下填充用户代码 

           

     } 

     else if((P1IFG&BIT1) ==BIT1) 

     { 

           //处理P1IN.1中断 

           P1IFG &= ~BIT1; //清除中断标志 

           //以下填充用户代码 

           

     } 

     else if((P1IFG&BIT2) ==BIT2) 

     { 

           //处理P1IN.2中断 

           P1IFG &= ~BIT2; //清除中断标志 

           //以下填充用户代码 

           

     } 

     else if((P1IFG&BIT3) ==BIT3) 

     { 

           //处理P1IN.3中断 

           P1IFG &= ~BIT3; //清除中断标志 

           //以下填充用户代码 

           

     } 

     else if((P1IFG&BIT4) ==BIT4) 

     { 

           //处理P1IN.4中断 

           P1IFG &= ~BIT4; //清除中断标志 

           //以下填充用户代码 

           

     } 

     else if((P1IFG&BIT5) ==BIT5) 

     { 

           //处理P1IN.5中断 

           P1IFG &= ~BIT5; //清除中断标志 

           //以下填充用户代码 

           

     } 

     else if((P1IFG&BIT6) ==BIT6) 

     { 

           //处理P1IN.6中断 

           P1IFG &= ~BIT6; //清除中断标志 

           //以下填充用户代码 

           

推荐阅读

史海拾趣

Allen Avionics Inc公司的发展小趣事

对不起,我无法提供关于Allen Avionics Inc 公司的相关故事。

Advanced Semiconductor, Inc.公司的发展小趣事

在半导体市场竞争日益激烈的背景下,ASI也面临着巨大的市场压力和挑战。为了应对市场波动和竞争压力,ASI不断调整战略方向,加大在研发和创新方面的投入。公司不断推出新产品、新技术,以满足市场的不断变化和客户需求。同时,ASI也注重提升产品质量和服务水平,赢得了客户的信任和好评。

Atlanta Micro公司的发展小趣事

随着公司的发展,Atlanta Micro开始积极拓展市场,与多家知名企业建立了合作关系。通过与这些企业的合作,Atlanta Micro不仅获得了更多的订单和市场份额,还从合作伙伴那里学到了先进的管理经验和技术知识。这种合作共赢的模式,为公司的持续发展提供了有力支持。

Dynachip Corp公司的发展小趣事

Dynachip Corp深知品质对于电子产品的重要性,因此他们建立了严格的质量管理体系,从原材料采购到生产过程再到成品检测,每一个环节都严格把控。他们还引进了先进的生产设备和技术,确保产品的稳定性和可靠性。这种对品质的坚持使Dynachip Corp的产品在市场上获得了广泛认可,客户群逐渐扩大。

Handok Co Ltd公司的发展小趣事

Dynachip Corp深知品质对于电子产品的重要性,因此他们建立了严格的质量管理体系,从原材料采购到生产过程再到成品检测,每一个环节都严格把控。他们还引进了先进的生产设备和技术,确保产品的稳定性和可靠性。这种对品质的坚持使Dynachip Corp的产品在市场上获得了广泛认可,客户群逐渐扩大。

Bytes公司的发展小趣事

Bytes公司在追求经济效益的同时,也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和工艺,降低产品对环境的影响。同时,公司还积极参与公益事业,捐赠资金和物资支持教育、扶贫等事业。这些举措使得Bytes公司赢得了社会的广泛认可和尊重。

请注意,这些故事框架仅供参考,您可以根据具体公司的实际情况和发展历程进行调整和补充。同时,由于我无法获取实时数据和信息,因此建议您在编写具体故事时参考相关公司的官方资料和市场分析报告。

问答坊 | AI 解惑

C语言编程中易犯错误汇编

C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里 ...…

查看全部问答>

Ndis hook 自定义 ReceivePacket 就 蓝屏!为什么??

NDIS,HOOK了那个receivepacket函数,就蓝屏.为什么呢?代码如下:       pOpenBlock = ((PNDIS_OPEN_BLOCK *)pProtocolBlock)[0];         m_pReceivePacket=pOpenBlock->ReceivePacketHandler; & ...…

查看全部问答>

EVC下怎样输出DWORD?

试过转成CString再输出,但是不行。错误提示是:cannot convert parameter 1 from \'char [9]\' to \'constunsigned short *\'那应该要怎样输出呢??…

查看全部问答>

请问如何操作 2410 数据总线上的数据!

各位大哥救命啦! 怎么操作总线上引脚的数据?…

查看全部问答>

直流电机驱动问题

请问使用什么芯片可以驱动24V,180W的直流电机(电机就两个接线头,接24V直流正负极);电机能正反转,速度可调;最好有制动功能,即能使电机瞬间停止。…

查看全部问答>

sipt440a

sipt440a是单向晶闸管还是双向的?…

查看全部问答>

2线控制的LCD12864

看到有网友在看我程序代码的时候,还是有问题,所以本人今天再发布一次2线的LCD12864程序代码。 完整无删减的,哈哈~~~ 很给力的,亲。 有问题的也可以问我啊。但是要求要我会的。。。。。 [ 本帖最后由 574937246 于 2012-7-31 22:08 编辑 ]…

查看全部问答>

TMS的晶振是25MHZ,要它工作在100MHZ下,该怎么初始化

TMS的晶振是25MHZ,要它工作在100MHZ下,该怎么初始化?…

查看全部问答>

C2000实时支持库支持哪些C 函数?

rufeng Jing 问: 在编程时,不知道C2000实时运行支持库(如rts2800_fpu32.lib)具体支持哪些C函数。 找到相关信息: At a high level, the run-time-support library contains the following: ANSI/ISO C/C++ standard libraryC I/O libraryLo ...…

查看全部问答>

提问+ Freescale KL46复位时IO口不想为高电平,怎么解决?

使用Freescale KL46, PTC2口,初始化完毕后作为IO口,用来控制开关机。 问题是,在复位到初始化之前,IO口为高电平,其Default功能为LCD_P22/ ADC0_SE11/ TSI0_CH15 。 有什么办法让他初始化之前保持低电平呢? …

查看全部问答>