历史上的今天
今天是: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,只不过阻塞时间勉强能接受,写简单程序时可以不去考虑,但在后期书写略微带有难度的代码时很不提倡,现在仅需知道这个概念,后面会记相关笔记。
史海拾趣
|
WinCE5.0挂接IDE硬盘的疑惑? 有个项目,想使用IDE44pin接口挂接最少64GB的外部存储器,现有如下问题和大家讨论: 1.工作电压: 现在手头上的IDE电路是直接从S3C2440上IO口引出,鉴于3.3V的IO电压,似乎不能正常驱 ...… 查看全部问答> |
|
求binArrayStart和binArrayEnd的定义的线索 问题描述: 大家好。我最近在修改Boot程序。在bootinit.c文件中有如下定义: IMPORT UCHAR binArrayStart []; & ...… 查看全部问答> |
|
在dialog中有个tab control,在每个tab的dialog中有个group box, group box中有个按钮。 现在的现实结果是tab control和group box都显示正常,按钮没有显示,什么原因? app方面菜鸟一个,期待大家指点… 查看全部问答> |
|
一、USB型51/AVR单片机编程器元器件清单 二、AVR ATmega16单片机学习板元器件清单 [ 本帖最后由 tiankai001 于 2010-8-8 15:35 编辑 ]… 查看全部问答> |
|
因为刚学DSP,做的是用2407产生6路3对对称PWM,一开始摸索的时候程序老是编译有问题,今天才把程序搞好``却发现我的板子出了问题,因为编的第一个程序所以没有把挖想放上来大家帮我看看这样写是不是能产生6路3对对称PWM``` 主程序如下 #include \\" ...… 查看全部问答> |




