历史上的今天
返回首页

历史上的今天

今天是:2025年01月18日(星期六)

正在发生

2021年01月18日 | MSP430学习笔记(一)--从点灯说起

2021-01-18 来源:eefocus

在我自学使用德州仪器所生产的MSP430系列微控制器时,遇到了新手都可能会遇到的一些问题,现总结记录如下,作为笔记保留,同时也希望能帮到其他有需要的人。新手建议从MSP430G2553学起。


这个范例是来自Ti官网的MSP340G2553_LED闪烁实验,下面我们会在该例的基础上记录和修改。(笔记展示代码均使用Ti的Code Composer Studio 9.1.0作为开发工具)


#include


int main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer

  P1DIR |= 0x01;                            // Set P1.0 to output direction


  for (;;)

  {

    volatile unsigned int i;


    P1OUT ^= 0x01;                          // Toggle P1.0 using exclusive-OR


    i = 50000;                              // Delay

    do (i--);

    while (i != 0);

  }

}


可以看到在程序开始,就包含了单片机头文件


#include


这个在你新建CCS工程–>选择微控制器型号时就已选定,你可以打开观看,只有你选定的型号为亮度显示,如图


但在一个默认的不成文规定下,我们一般都会将头文件写为所使用单片机的头文件形式,如:


#include


在我的理解下,这样写的好处就是直接在后台寻找g2553的头文件,省略了在综合头文件中寻找目标头文件的步骤,提高编译速度。


源程序中main()函数的第一句总是关闭看门狗,具体原因在看门狗笔记中记录。


接着我们可以看到使用了方向寄存器(PxDIR)–用来配置对应I/O的输入输出方向。对应位配置为0,代表该管脚为输入;对应位配置为1,代表该管脚为输出。


P1DIR |= 0x01; //将P1.0管脚方向设置为输出

P1DIR |= 0x10; //将P1.4管脚方向设置为输出

P2DIR &= ~0x01; //将P2.0管脚方向设置为输入


这是单片机的位操作,有单片机基础的应该都可以看出来。MSP430单片机操作I/O的好处就是每个位都已由官方封装好,如:


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

* STANDARD BITS

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


#define BIT0                   (0x0001)

#define BIT1                   (0x0002)

#define BIT2                   (0x0004)

#define BIT3                   (0x0008)

#define BIT4                   (0x0010)

#define BIT5                   (0x0020)

#define BIT6                   (0x0040)

#define BIT7                   (0x0080)

#define BIT8                   (0x0100)

#define BIT9                   (0x0200)

#define BITA                   (0x0400)

#define BITB                   (0x0800)

#define BITC                   (0x1000)

#define BITD                   (0x2000)

#define BITE                   (0x4000)

#define BITF                   (0x8000)


所以方向寄存器的描述可以写为


P1DIR |= BIT0; //将P1.0管脚方向设置为输出

P1DIR |= BIT4; //将P1.4管脚方向设置为输出

P2DIR &= ~BIT0; //将P2.0管脚方向设置为输入


新手对该程序还有疑问的应该就剩输出寄存器(PxOUT),该寄存器用于设置对应管脚的输出电平(前提是I/O方向已设置为输出),对应位设置为0,代表该管脚输出低电平;对应位设置为1,代表该管脚输出高电平。


P1DIR |= BIT0; //将P1.0管脚方向设置为输出

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

P1OUT &= ~BIT0; //P1.0管脚输出低电平


最终的到如下程序,可自行对照


#include


void main(void)

{

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

  P1DIR |= BIT0;                            //设定P1.0为输出方向


  for (;;)

  {

    volatile unsigned int i;


    P1OUT ^= BIT0;                          //翻转P1.0电平状态


    i = 50000;                              //延时

    do (i--);

    while (i != 0);

  }

}


以上寄存器(PxDIR,PxOUT),中的x可以取1/2/3等I/O数字,也可取A/B/C/D,只不过PA = P1 + P2,PB = P3 + P4,即两个8位寄存器相加,变为一个16位寄存器。


新手一定要适应MSP430单片机程序的书写风格和规范,万事开头难,后面也就好了,该程序中其他难点应该都在C语言编程问题上,还有不理解的请回头复习C语言,再提一句,MSP430开发会用到复合赋值运算符,如 |= ,&= ,^= 等,这样操作的目的是不影响其他配置位,一定要理解。该程序的软件延时会阻塞MCU,只不过阻塞时间勉强能接受,写简单程序时可以不去考虑,但在后期书写略微带有难度的代码时很不提倡,现在仅需知道这个概念,后面会记相关笔记。


推荐阅读

史海拾趣

Datalinear公司的发展小趣事

在国内市场取得成功后,Datalinear公司开始寻求国际化的发展。公司派遣团队前往欧美等发达国家进行市场调研,并根据当地市场需求进行产品定制。通过不懈的努力,Datalinear公司的产品在海外市场取得了良好的销售业绩,并逐步建立了全球化的销售网络。

智浦欣(Chipstar)公司的发展小趣事

随着全球对环保和可持续发展的重视程度不断提高,智浦欣公司也积极响应这一趋势,将绿色环保理念融入到公司的经营和发展中。公司采用环保材料和绿色生产工艺,减少了对环境的污染和破坏;同时,公司还积极参与公益事业和社会活动,推动社会和谐发展。这些举措不仅提升了公司的社会责任感和公信力,还为公司赢得了更多的客户支持和合作伙伴。

以上五个故事是基于对智浦欣公司在电子行业发展中可能经历的情景进行的虚构叙述。虽然这些故事并非真实发生的事件,但它们能够反映出智浦欣公司在发展过程中可能面临的挑战、机遇和策略选择。

南京绿芯(Grenergy)公司的发展小趣事

随着技术的不断进步和市场需求的日益增长,智浦欣公司意识到,只有不断创新和突破,才能在激烈的市场竞争中立于不败之地。于是,公司加大了对研发团队的投入,引进了一批国内外顶尖的模拟器件和混合信号设计人才。经过数月的努力,团队成功研发出了一款具有高性价比的WLED驱动器产品,该产品以其卓越的性能和稳定的质量赢得了客户的广泛好评。随后,公司又相继推出了多款具有竞争力的新产品,进一步巩固了其在消费类电子市场的地位。

喜美克斯(Cvilux)公司的发展小趣事

随着公司规模的逐渐扩大,喜美克斯公司开始思考如何进一步拓展市场。他们深入研究市场趋势和消费者需求,制定了针对不同市场的精准营销策略。通过与当地合作伙伴的紧密合作,喜美克斯成功地将产品打入了多个新兴市场,实现了销售额的快速增长。

Dolphin Interconnect Solutions Asa公司的发展小趣事

在全球化的背景下,Dolphin Interconnect Solutions ASA积极实施国际化战略。公司不仅在欧美等发达国家建立了完善的销售网络,还通过参加国际展会、举办技术研讨会等方式,提高了品牌知名度和市场影响力。同时,Dolphin还加强了与国际知名企业的合作,共同推动电子行业的发展。

EMLSI公司的发展小趣事

随着电子行业的快速发展,市场竞争也日益激烈。为了保持领先地位,EMLSI公司开始实施全球化战略。公司先后在亚洲、欧洲和北美等地建立了生产基地和研发中心,与当地企业建立了紧密的合作关系。这一战略不仅让EMLSI能够更快地了解市场需求和技术趋势,还为公司带来了更多的商业机会和合作伙伴。

问答坊 | AI 解惑

组装好仪器后液晶屏花屏

我的仪器组装好后,就是把板子和液晶装到外壳后,液晶在过一段时间后就会花屏,不装到外壳里就没事,弄了好长时间了也不知道怎么回事,请大家帮忙。…

查看全部问答>

WinCE5.0挂接IDE硬盘的疑惑?

WinCE5.0挂接IDE硬盘的疑惑? 有个项目,想使用IDE44pin接口挂接最少64GB的外部存储器,现有如下问题和大家讨论: 1.工作电压: 现在手头上的IDE电路是直接从S3C2440上IO口引出,鉴于3.3V的IO电压,似乎不能正常驱 ...…

查看全部问答>

本人大四学生

已经学习了c51单片机,想问下各位老师,如果以后要从事单片机开发的话,需要再学习哪些大学未传授的知识,谢谢…

查看全部问答>

求binArrayStart和binArrayEnd的定义的线索

问题描述:         大家好。我最近在修改Boot程序。在bootinit.c文件中有如下定义: IMPORT UCHAR        binArrayStart [];                    & ...…

查看全部问答>

问个mfc应用的问题??

在dialog中有个tab control,在每个tab的dialog中有个group box, group box中有个按钮。 现在的现实结果是tab control和group box都显示正常,按钮没有显示,什么原因? app方面菜鸟一个,期待大家指点…

查看全部问答>

单片机的问题

提高单片机 WR,RD 驱动能力一般用什么芯片啊…

查看全部问答>

【芯币兑换】AVR单片机学习板及编程器最详细元器件清单

一、USB型51/AVR单片机编程器元器件清单   二、AVR ATmega16单片机学习板元器件清单           [ 本帖最后由 tiankai001 于 2010-8-8 15:35 编辑 ]…

查看全部问答>

一个2407产生对称PWM的问题````

因为刚学DSP,做的是用2407产生6路3对对称PWM,一开始摸索的时候程序老是编译有问题,今天才把程序搞好``却发现我的板子出了问题,因为编的第一个程序所以没有把挖想放上来大家帮我看看这样写是不是能产生6路3对对称PWM``` 主程序如下 #include \\" ...…

查看全部问答>

求一可用的串口通讯程序

折腾了好几天,实在弄不出来了,哪位有好使的串口程序赏一个,谢谢了。…

查看全部问答>

基于LED点阵显示屏9路抢答器的设计制作程序

基于LED点阵显示屏9路抢答器的设计制作程序…

查看全部问答>