搜索

tag 标签: MSP430

相关帖子

版块 作者 回复/查看 最后发表
关于io端口的输入判断 TI技术论坛 GanEz 2019-6-2 2 150 alan000345 2019-6-3 10:16
无线低功耗中断问题:MSP430进入低功耗LMP3模式后,IO口模拟通讯的无线模块无法接... attach_img 【微控制器 MCU】 spartacus_epic 2019-1-8 6 1042 alan000345 2019-1-10 09:45
求助大神 MSP430F5529无法进入中断 【微控制器 MCU】 HZl_ 2018-7-15 1 647 qwerghf 2018-7-16 08:18
msp430f149波特率设置 【微控制器 MCU】 Aguilera 2018-5-23 0 303 Aguilera 2018-5-23 21:51
自制板子,运行到时钟程序就出问题(程序本身没问题)。如图。。 attach_img TI技术论坛 狐狸不是猫 2017-12-5 2 680 狐狸不是猫 2017-12-6 20:36
关于I2C模块的问题 【微控制器 MCU】 CoolDoWN 2017-7-25 4 1285 qwerghf 2017-7-26 09:07
msp430 怎么驱动0.96寸的OLED显示屏(iic) 【微控制器 MCU】 hysas 2017-6-30 1 1400 ssp 2017-6-30 16:41
弄了一个IIC/I2C/接口 LCD1602转接板 这东西能不能接5529 attach_img 【微控制器 MCU】 45645645 2016-11-1 13 2554 45645645 2016-11-6 16:52
初学msp430,有些问题想要求助 【微控制器 MCU】 fangkaixin 2016-10-19 10 1561 supermiao123 2016-10-20 10:15
开发板上的IO不足你们是怎么处理的? attach_img 【微控制器 MCU】 铛铛铛挡 2016-8-6 4 1457 铛铛铛挡 2016-8-6 23:17
32.768晶振的原理、基本应用、使用注意事项 attach_img 信息发布 32.768晶振 2016-4-27 0 606 32.768晶振 2016-4-27 13:43
MSP430 转盘电话脉冲计数 attach_img 【微控制器 MCU】 2899904481 2016-2-25 10 1668 hhfhhm2007 2016-3-2 01:56
有用过ADC中的外部参考电压VeREF的吗? attach_img 【微控制器 MCU】 chenmgdmc 2015-7-14 11 6750 飞飞一撇 2016-7-11 19:46
MSP430调试AT指令出错,附原代码及错误图片 attach_img 【微控制器 MCU】 zhangsg 2016-5-25 4 1109 wateras1 2016-5-25 16:25
MSP430G2553_UART串口问题 发不了 自认为没问题了 【微控制器 MCU】 陈健 2016-8-19 6 2926 glows 2017-2-13 16:51
MSP430通过蓝牙BT05传数据出问题 【微控制器 MCU】 m8246500 2016-9-2 3 1325 m8246500 2016-9-4 17:11
关于MSP430 BSL下载的问题 【微控制器 MCU】 zttcq123 2016-12-22 1 1146 zttcq123 2016-12-22 17:24
MSP430突然下载不了程序,怎么解决呀,急急急。。。 【微控制器 MCU】 chen1346 2017-7-17 6 1208 huaiqiao 2017-8-7 22:11
GUI's applcation 是下载还是CCS自带 attach_img 【微控制器 MCU】 半夏微凉2538 2018-1-29 2 735 led2015 2018-1-29 20:21
悬赏 请问谁有msp430G2553驱动12864SSD1306oled显示屏例程 - [悬赏 5 枚芯币] 【微控制器 MCU】 TIANNA2018 2018-5-27 0 912 TIANNA2018 2018-5-27 16:52

相关日志

分享 基于Proteus的MSP430单片机仿真实例5-16个花样灯控制
tiankai001 2018-1-11 13:36
一、任务要求 利用MSP430F247单片机的P1和P4端口控制16个发光二极管D1~D16,发光二极管有8种花样显示,显示速度可调,由P2端口的三个按键控制,分别是模式按键、加速按键、减速按键。模式按键按下一次,花样显示模式变换一次,按下8次后循环到第一种模式,加速和减速按键可以控制LED的闪烁速度。 二、分析说明 按照任务要求,16个发光二极管可以组成更加丰富的花样变换,由于MSP430单片机的每个端口是8位,因此需要两个完整的端口来控制发光二极管,这还需要在程序中将16位的输出转换为两个8位的输出,此外,本实例还将介绍程序的模块化设计、函数指针数组等内容。 三、电路设计 16个花样灯控制的硬件电路如下图所示。值得注意的是,P1和P4端口在连接到LED时,是用的网络标号Q1~Q16来表示网络连接关系,这样就简化了图纸的连接,否则会导致图纸上连线过多过密,影响到图纸的简洁和美观。 四、程序代码 由于16个花样灯的功能较为复杂,将所有程序代码写在一个文件中不是一个好的程序设计习惯,此时一般采用模块化编程。 所谓模块化编程是指将一个较大的程序划分为若干功能独立的模块,对各模块进行独立开发,然后再将这些模块统一合并为一个完整的程序。这种方法是C语言中的面向过程的编程方法,可以缩短开发周期,提高程序的可读性和可维护性。 在单片机程序里,程序比较小或者功能比较简单的时候,我们不需要采用模块化编程,但是,当程序功能复杂、涉及的资源较多的时候,模块化编程就能体现它的优越性了。如前面写过的闪烁灯程序、流水灯程序和花样灯程序,每一个程序都是只用一个源文件编写就能完成,但程序较为复杂,涉及的功能比较多,将程序全部集中在一个源文件里,将导致主体程序臃肿且杂乱。这样做降低了程序的可读性、可维护性和代码的重用率。如果把这三个程序当做三个独立的模块放到主体程序中进行模块化编程,效果就不一样了。 实际上,模块化编程就是模块合并的过程,也是建立每个模块的头文件和源文件并将其加入到主体程序的过程。主体程序调用模块的函数是通过包含模块的头文件来实现的,模块的头文件和源文件是模块密不可分的的两个部分,缺一不可。所以,模块编编程必须提供每个模块的头文件和源文件。 下面以花样灯为例来介绍模块化编程。首先将16为花样灯的程序分解为三部分,分别是主函数、按键程序和LED显示程序。 1、建立模块的源文件 在模块化编程里,模块的源文件是实现该模块功能的变量定义和函数定义,不能定义main函数。建立模块源文件的方法很多,直接在主体程序里新建一个文件,把代码添加进去,保存为.c的文件,然后将该文件加入到主体程序;或者是在程序外建立一个记事本文件,把代码添加进去,保存为.c文件,然后把文件添加到主体程序里,在本实例中,把键盘处理代码放在key.c文件中。 程序如下。 #include "msp430f247.h" #include "stdlib.h" #include "string.h" #include "LedDisplay.h" #include "key.h" extern unsigned char RunMode; extern unsigned char LEDDirection; extern unsigned int SystemSpeed,SystemSpeedIndex; extern unsigned char LEDFlag; extern unsigned int LEDIndex; unsigned int SpeedCode ; } void process_key(unsigned char Key) { if(Key0x01) { LEDDirection=1; LEDIndex=0; LEDFlag=1; RunMode=(RunMode+1)%8; } if(Key0x02) { if(SystemSpeedIndex0) { --SystemSpeedIndex; SetSpeed(SystemSpeedIndex); } } if(Key0x03) { if(SystemSpeedIndex28) { ++SystemSpeedIndex; SetSpeed(SystemSpeedIndex); } } } 2、建立模块的头文件 模块的头文件就是模块和主体程序的接口,里面是模块源文件的函数声明。建立头文件的方法和建立源文件的方法类似,只是在保存的时候,把文件保存为.h格式的文件。本实例中,把键盘处理的源文件里的函数声明放到文件里并保存为key.h。每个模块的头文件最终都要被包含在主体程序里,而且不能重复包含,否则编译器报错。 程序如下。 /*****************************************软件延时,主频1M*******************/ #define CPU_F1 ((double)1000000) #define delay_us1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000000.0)) #define delay_ms1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000.0)) /****************************************************************************/ unsigned char GetKey(void); void SetSpeed(unsigned char Speed); void process_key(unsigned char key); 3、同理,建立LED显示控制的头文件如下 void Mode_0(void); void Mode_1(void); void Mode_2(void); void Mode_3(void); void Mode_4(void); void Mode_5(void); void Mode_6(void); void Mode_7(void); void Mode_8(void); void LedShow(unsigned int LedState); void delayms(unsigned int t); 4、建立LED显示控制的C文件如下 #include "msp430f247.h" #include "stdlib.h" #include "string.h" #include "LedDisplay.h" #include "key.h" extern unsigned char RunMode; extern unsigned char LEDDirection; extern unsigned char LEDFlag; extern unsigned int LEDIndex; void (*run )(void)={Mode_0,Mode_1,Mode_2,Mode_3, Mode_4,Mode_5,Mode_6,Mode_7}; void Mode_0(void) { LedShow(0x0001LEDIndex); LEDIndex=(LEDIndex+1)%16; } void Mode_1(void) { LedShow(0x8000LEDIndex); LEDIndex=(LEDIndex+1)%16; } void Mode_2(void) { if(LEDDirection) LedShow(0x0001LEDIndex); else LedShow(0x8000LEDIndex); if(LEDIndex==15) LEDDirection =! LEDDirection; LEDIndex=(LEDIndex+1)%16; } void Mode_3(void) { if(LEDDirection) LedShow(~(0x0001LEDIndex)); else LedShow(~(0x8000LEDIndex)); if(LEDIndex==15) LEDDirection =! LEDDirection; LEDIndex=(LEDIndex+1)%16; } void Mode_4(void) { if(LEDDirection) { if(LEDFlag) LedShow(0xfffeLEDIndex); else LedShow(~(0x7fffLEDIndex)); } else { if(LEDFlag) LedShow(0x7fffLEDIndex); else LedShow(~(0xfffeLEDIndex)); } if(LEDIndex==15) { LEDDirection =! LEDDirection; if(LEDDirection) LEDFlag =! LEDFlag; } LEDIndex=(LEDIndex+1)%16; } void Mode_5(void) { if(LEDDirection) LedShow(0x000fLEDIndex); else LedShow(0xf000LEDIndex); if(LEDIndex==15) LEDDirection =! LEDDirection; LEDIndex=(LEDIndex+1)%16; } void Mode_6(void) { if(LEDDirection) LedShow(~(0x000fLEDIndex)); else LedShow(~(0xf000LEDIndex)); if(LEDIndex==15) LEDDirection =! LEDDirection; LEDIndex=(LEDIndex+1)%16; } void Mode_7(void) { if(LEDDirection) LedShow(0x003fLEDIndex); else LedShow(0xfc00LEDIndex); if(LEDIndex==15) LEDDirection =! LEDDirection; LEDIndex=(LEDIndex+1)%16; } void Mode_8(void) { LedShow(++LEDIndex); } void LedShow(unsigned int LedState) { P1OUT=~(LedState0x00ff); P4OUT=~((LedState8)0x00ff); } void delayms(unsigned int t) { unsigned int i; while(t--) { for(i=1000;i0;i--); if((P2IN0x07) != 0x07) break; } } 5、在主程序里包含模块的头文件,完成程序总体设计,把上面的key.h和LedDisplay.h分别添加到主程序头部,如下图所示, 主程序如下 五、程序说明 从主程序看,代码非常简洁,便与编程人员理解和修改,更重要的是键盘处理程序和显示控制程序可以重复适用于其它设计中。 特别要指出的是在显示控制程序中有一行代码。 void (*run )(void)={Mode_0,Mode_1,Mode_2,Mode_3, Mode_4,Mode_5,Mode_6,Mode_7}; 这些代码定义了一个函数指针数组,将8个显示模式的函数地址保存在run数组中,该数组保存的是函数的指针,在主程序中用 run ();进入不同的显示模式。RunMode为显示模式变量,可以通过模式按键修改 六、仿真结果与分析 装载程序后,即可点击运行按钮观察程序运行结果,并根据运行结果判断程序是否达到设计初衷。
个人分类: Proteus for msp 430|524 次阅读|0 个评论
分享 基于Proteus的MSP430单片机仿真实例4-按键控制的花样彩灯
tiankai001 2018-1-11 09:16
一、任务要求 利用MSP430F247单片机的P4端口控制8个发光二极管D1~D8,发光二极管根据P0口接入的开关完成不同的花样显示变换。 当K1闭合时,LED1和LED2点亮,延迟0.5秒后,LED2和LED3点亮......最后是LED7和LED8点亮。 当K2闭合时,LED1~LED8相当于8位二进制数,延迟0.8秒后,加1并点亮对应的LED。 当K3闭合时,先是LED1~LED4点亮,延迟0.5秒后,LED5~LED8点亮,随后LED1,LED2和LED5、LED6点亮,延迟0.5秒后,LED3、LED4和LED7、LED8逐次点亮,最后LED1、LED3、LED4、LED6点亮,延迟0.5秒后,LED2、LED4、LED6、LED8点亮。 当K4闭合时,先点亮LED1~LED4,然后让LED从右向左移动,当LED8点亮后,下一步重新点亮LED1,依次循环。 当K5闭合时,四个LED同时循环点亮。 二、电路设计 打开Proteus开发环境,新建一个基于MSP430F247单片机的工程。 添加如下元件:单片机MSP430F247,排阻,发光二极管,开关,电阻。 三、程序代码 #include "msp430f247.h" #include "stdlib.h" #include "string.h" /*****************************************软件延时,主频1M*******************/ #define CPU_F1 ((double)1000000) #define delay_us1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000000.0)) #define delay_ms1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000.0)) /****************************************************************************/ /************************************************ 函数名称:主函数 函数功能:彩灯控制 入口参数:无 出口参数:无 描述: 作者:老马识途单片机 日期:2018年1月3日 ************************************************/ main() { unsigned char uiLEDValue=0; unsigned char ucCounter; unsigned char ucLEDDispaly1=0x80; unsigned char ucLEDDispaly2=0x01; unsigned char ucMode=4; static unsigned char LedState=0x0f; _DINT(); //关中断 WDTCTL = WDTPW + WDTHOLD;//关看门狗 P4DIR = 0xff;//设置P4端口为输出端口 P4SEL = 0x00;//设置P4端口为普通I/O端口 P4OUT = 0xff;//设置P4端口为输出高电平 while(1) { if((P2IN0x1f) == 0x1e) { uiLEDValue = 0x03; for(ucCounter=0;ucCounter8;ucCounter++) { P4OUT = uiLEDValue;// uiLEDValue = 1; delay_ms1M(500); } } if((P2IN0x1f) == 0x1d) { P4OUT = ~(uiLEDValue++);// delay_ms1M(500); } if((P2IN0x1f) == 0x1b) { switch(ucMode) { case 4: P4OUT = 0xf0; delay_ms1M(500); P4OUT = 0x0f; delay_ms1M(500); break; case 2: P4OUT = 0xcc; delay_ms1M(500); P4OUT = 0x33; delay_ms1M(500); break; case 1: P4OUT = 0x55; delay_ms1M(500); P4OUT = 0xaa; delay_ms1M(500); break; } ucMode /= 2; if(ucMode == 0) ucMode = 4; } if((P2IN0x1f) == 0x17) { P4OUT = ~(ucLEDDispaly1|ucLEDDispaly2); ucLEDDispaly1 = 1; ucLEDDispaly2 = 1; delay_ms1M(500); if((ucLEDDispaly1|ucLEDDispaly2) == 0x00) { ucLEDDispaly1 = 0x80; ucLEDDispaly2 = 0x01; } } if((P2IN0x1f) == 0x0f) { P4OUT = LedState; delay_ms1M(500); if(((LedState0x01) == 0x01) (LedState != 0x0f)) { LedState = LedState1; LedState += 1; } else LedState = LedState1; if(LedState == 0xe0) LedState += 1; } P4OUT = 0xff; } } 四、程序说明 程序利用五个开关是否闭合来控制LED花样显示。循环中利用了多种不同的算法来处理花样显示。 花样1是利用左移来输出两位LED的变换。 花样2利用二进制数直接累加输出给端口的方式虽较为简单,但是显示效果较好。 花样3利用了直接给端口赋值的方式。 花样4利用两个8位的数左移和右移后或运算,得到两个LED相对前进的效果。 花样5是一种蛇行变换方式,利用了左移运算和或运算得到四个LED同时循环点亮的效果。
个人分类: Proteus for msp 430|633 次阅读|0 个评论
分享 基于Proteus的MSP430单片机仿真实例3-花样彩灯控制
tiankai001 2018-1-11 09:15
一、任务要求 利用MSP430F247单片机的P4端口控制8个发光二极管D1~D8,实现四种模式的花样彩灯控制: 单个LED左移模式; 单个LED右移模式; 多个LED左移模式; 多个LED右移模式。 每个LED的点亮时间为0.5秒。 二、分析说明 此电路图与“ 基于Proteus的MSP430单片机仿真实例 2 - 彩灯控制 ”的电路图类似,但是本电路中不需要开关输入,本例的重点在于单片机C语言的算法设计。 三、电路设计 打开Proteus开发环境,新建一个基于MSP430F247单片机的工程。 添加如下元件:单片机MSP430F247,排阻,发光二极管。 四、程序代码 #include "msp430f247.h" #include "stdlib.h" #include "string.h" /*****************************************软件延时,主频1M*******************/ #define CPU_F1 ((double)1000000) #define delay_us1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000000.0)) #define delay_ms1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000.0)) /****************************************************************************/ #define SHIFT_NUM 8//移位循环次数 8次 enum LED_MODE { LEFT_SHIFT_ON,//单个LED左移模式 RIGHT_SHIFT_ON,//单个LED右移模式 LEFT_SHIFT_OFF,//多个LED左移模式 RIGHT_SHIFT_OFF,//多个LED右移模式 }; enum LED_MODE mode;//显示模式选择 /************************************************ 函数名称:主函数 函数功能:彩灯控制 入口参数:无 出口参数:无 描述: 作者:老马识途单片机 日期:2018年1月2日 ************************************************/ main() { unsigned int uiLEDValue=0x01; unsigned char ucCounter; _DINT(); //关中断 WDTCTL = WDTPW + WDTHOLD;//关看门狗 P4DIR = 0xff;//设置P4端口为输出端口 P4SEL = 0x00;//设置P4端口为普通I/O端口 P4OUT = 0xff;//设置P4端口为输出高电平 while(1) { for(ucCounter=0;ucCounter SHIFT_NUM;ucCounter++) { switch(mode) { case LEFT_SHIFT_ON://单个LED左移模式 uiLEDValue = 1; if(uiLEDValue == 0x100) uiLEDValue = 0x80;//下一个状态的初始值 break; case RIGHT_SHIFT_ON://单个LED右移模式 uiLEDValue = 1; if(uiLEDValue == 0x00) uiLEDValue = 0x01;//下一个状态的初始值 break; case LEFT_SHIFT_OFF://多个LED左移模式 uiLEDValue = 1; uiLEDValue |= 1; if(uiLEDValue == 0x1ff) uiLEDValue = 0x7f;//下一个状态的初始值 break; case RIGHT_SHIFT_OFF://多个LED右移模式 uiLEDValue = 1; uiLEDValue = ~0x80; if(uiLEDValue == 0x00) uiLEDValue = 0x01;//下一个状态的初始值 break; } P4OUT = ~uiLEDValue;//LED输出 delay_ms1M(500);//延时 } mode++;//显示模式转换 mode %= 4;//只有4种显示模式选择 } } 五、程序说明 程序首先定义了一个枚举类型LED_MODE,定义了4种显示模式,分别是:单个LED左移模式;单个LED右移模式;多个LED左移模式;多个LED右移模式。利用枚举类型定义变量mode,该变量在程序中控制LED显示的方式。 主程序中首先关闭看门狗功能,P4端口输出全部为高电平,关闭所有LED。 主循环中利用for循环控制LED的点亮顺序。循环次数SHIFT_NUM为宏定义,这样的写法可以提高程序的可读性和可移植性。在for循环中首先是单个LED左移模式,uiLEDValue为P4端口输出的值,起始值为0x01,后面的一条语句 P4OUT = ~uiLEDValue;,将uiLEDValue的值取反赋值给P4端口,P4端口输出0xfe,使得p1.0对应的LED点亮,其它LED熄灭,uiLEDValue = 1;语句使得每次循环时uiLEDValue左移一位,即uiLEDValue的值从0x01-0x02-0x04-0x08-0x10-0x20-0x40-0x80,再左移一次,uiLEDValue的值变为0x100,注意uiLEDValue变量为无符号整型数据,为16位整数,不会因为移位8次后变为0,这时显示模式应转换为单个LED右移模式,初始值为0x80,。 六、注意事项 本例采用了多个模式变换来实现流水灯的控制,程序中使用了枚举类型变量,并采用switch语句控制显示模式的循环,要特别注意模式切换时uiLEDValue的初始值。
个人分类: Proteus for msp 430|179 次阅读|0 个评论
分享 基于Proteus的MSP430单片机仿真实例2-彩灯控制
tiankai001 2018-1-10 16:44
一、任务要求 利用MSP430F247单片机的P4端口控制8个发光二极管D1~D8,P2端口的接入拨码开关。 当SW1-1接到ON时,D1和D5闪烁,闪烁间隔时间0.2S。 当SW1-2接到ON时,D2和D6闪烁,闪烁间隔时间0.4S。 当SW1-3接到ON时,D1~D8循环闪烁,闪烁间隔时间0.2S。 二、分析说明 LED是一种半导体器件,当两端电压降大于1V时,通过5mA左右的电流就可发光(不同规格,不同颜色的发光二极管其导通电压和导通电流不同),导通电流越大,LED的亮度越高,但如果电流过大,会烧毁LED,一般情况下,导通电流在3~20mA。本电路中,排阻的目的就是给LED串联一个限流电阻,其目的就是为了限制通过发光二极管的电流不能过大,这也是该电阻为什么被叫做“限流电阻”。该电阻的阻值范围通常在300~1000欧姆之间。 MSP430F249单片机的I/O端口作为输出口时,输出高电平的最大电流为6mA,并且其所有端口输出电流之和不能超过48mA。而当端口输出低电平时,可以吸收的最大电流是40mA。因此,本例中采用单片机I/O端口控制发光二极管负极的设计。 三、电路设计 打开Proteus开发环境,新建一个基于MSP430F247单片机的工程。 添加如下元件:单片机MSP430F247,排阻,发光法二极管,电阻,拨码开关。 四、程序代码 #include "msp430f247.h" #include "stdlib.h" #include "string.h" /*****************************************软件延时,主频1M*******************/ #define CPU_F1 ((double)1000000) #define delay_us1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000000.0)) #define delay_ms1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000.0)) /****************************************************************************/ /************************************************ 函数名称:主函数 函数功能:彩灯控制 入口参数:无 出口参数:无 描述: 作者:老马识途单片机 日期:2018年1月2日 ************************************************/ main() { unsigned int uiLEDValue=0x01; _DINT(); //关中断 WDTCTL = WDTPW + WDTHOLD;//关看门狗 P4DIR = 0xff;//设置P4端口为输出端口 P4OUT = 0xff;//设置P4端口为输出高电平 while(1) { if((P2IN 0x07) == 0x06)//按键K1闭合 { P4OUT ^= (BIT0+BIT4);//LED1,LED5闪烁 delay_ms1M(200);//延时0.2s } else if((P2IN 0x07) == 0x05)//按键K2闭合 { P4OUT ^= (BIT1+BIT5);//LED2,LED6闪烁 delay_ms1M(400);//延时0.4s } else if((P2IN 0x07) == 0x03)//按键K3闭合 { P4OUT = ~uiLEDValue;//LED逐个点亮 delay_ms1M(200);//延时0.2s //uiLEDValue的值从0x01,0x02,0x04......0x80.对应8个LED uiLEDValue += uiLEDValue; if(uiLEDValue == 0x100)//恢复到0x01 { uiLEDValue = 0x01; } } if((P2IN 0x07) == 0x07)//没有按键按下 { P4OUT = 0xff;//关闭所有LED //delay_ms1M(200); } } } 五、程序说明 程序首先包括了"msp430f247.h"头文件,该头文件给出了该系列单片机内部寄存器名字的C语言的定义,比如P4DIR,P4OUT等,通过一定以德这些名字,以及利用C语言,可以以直接对寄存器赋值或者读取寄存器的值,从而完成单片机功能的调用。 主程序中首先用 WDTCTL = WDTPW + WDTHOLD;语句关闭看门狗,因为MSP430单片机复位后默认启动看门狗,程序正常执行时应关闭该功能,或者定时复位看门狗。 主循环中读取P2端口的输入值,进而判断是哪个开关闭合,然后控制相应LED闪烁。其中delay_ms1M(x)函数式软件延时函数,延时时长可通过修改参数值实现。 六、注意事项 应用I/O端口输出时,在系统的软硬件设计上应注意以下问题 1、输出电平的匹配和转换 一般MSP430单片机系统的工作电源是3.3V,所以I/O端口的输出电平为3.3V,当连接的外围器件和电路采用5V,9V等与3.3V不同的电源时,应考虑输出电平转换电路。 2、输出电流的驱动能力 MSP430单片机的I/O端口输出可以提供4mA左右的驱动电流。输出总电流最大为48mA,当连接的外围器件和电路需要大电流驱动或有大电流灌入时,应考虑使用功率驱动电路。 3、输出电平转换的延时 MSP430是一款高速单片机,当系统时钟为8M时,执行一条指令的时间为0.125微秒。在一些应用中,往往需要较长时间的高、低电平脉冲驱动,如步进电机的驱动,因此在软件设计中要考虑转换延时时间。对于不需要精确延时的应用,可采用软件延时的方法,如果需要精确延时,则最好使用单片机内部的定时器。
个人分类: Proteus for msp 430|647 次阅读|0 个评论
分享 基于Proteus的MSP430单片机仿真实例1-跑马灯
tiankai001 2018-1-10 16:38
基于Proteus的MSP430单片机仿真实例1-跑马灯
说明:本系列文章是基于proteus仿真环境下的MSP单片机程序设计实例。每个例子都配有电路图和源码,所有程序和电路都在Proteus环境下仿真通过。需要指出的是,该系列电路只是在Proteus环境下的电路,不能作为实际电路使用。 一、任务要求 使用单片机的I/O端口实现8个LED发光二极管的跑马灯控制。 二、硬件电路 在Proteus环境下新建一个工程,添加本电路所用元件,单片机MSP430F247,蓝色发光二极管,电阻,电容,排阻等。 添加元件方法如下。 添加电源、地等电气符号。 电路原理图如下图所示 电路图绘制完成后,如果需要修改元件名称和参数,左键双击元件,设置相应参数。 三、程序设计 跑马灯要实现8个LED发光二极管按照一定时间间隔顺序点亮。8个LED接到单片机的8个I/O端口上,通过一个8位二进制数来控制I/O端口的输出。从上面的电路图可以看出,8个LED的负极与单片机的端口相连,也就是说,只有单片机端口输出低电平,LED才会发光。 一个循环周期分为8个时间段,每一时间段送至I/O端口相应数据,实现8个发光二极管依次点亮的效果。 程序代码如下 #include "msp430f247.h" #include "stdlib.h" #include "string.h" /*****************************************软件延时,主频1M*******************/ #define CPU_F1 ((double)1000000) #define delay_us1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000000.0)) #define delay_ms1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000.0)) /****************************************************************************/ /************************************************ 函数名称:主函数 函数功能:跑马灯实验 入口参数:无 出口参数:无 描述: 作者:老马识途单片机 日期:2018年1月2日 ************************************************/ main() { unsigned char j,k; _DINT(); //关中断 WDTCTL = WDTPW + WDTHOLD;//关看门狗 P4DIR = 0xff;//设置P4端口为输出端口 while(1) { k = 1; for(j=0;j8;j++)//循环8次,即D1~D8轮流点亮 { P4OUT = ~k;//反相输出,低电平点亮LED delay_ms1M(300);//延时 k=k1;//左移一位 } } } 四、MSP430编译环境IAR的工程建立 在IAR环境下建立一个MSP430的工程,配置单片机型号,输出文件类型等参数。如下图所示 五、程序加载 鼠标放在单片机元件上,单击鼠标右键,添加程序文件。如下图所示。 六、仿真和调试 运行结果如下图所示。
个人分类: Proteus for msp 430|1044 次阅读|0 个评论
分享 引领新时代的MSP430F2012IPWR
dongnengshiji 2017-11-16 20:30
简单介绍MSP430F2012IPWR的相关知识: 产品属性 选取全部项目 类别 集成电路(IC) 嵌入式 - 微控制器 制造商 Texas Instruments 系列 MSP430F2xx 包装 带卷(TR) 零件状态 在售 核心处理器 MSP430 核心尺寸 16-位 速度 16MHz 连接性 I2C,SPI 外设 欠压检测/复位,POR,PWM,WDT I/O 数 10 程序存储容量 2KB(2K x 8 + 256B) 程序存储器类型 闪存 EEPROM 容量 - RAM 容量 128 x 8 电压 - 电源 (Vcc/Vdd) 1.8 V ~ 3.6 V 数据转换器 A/D 8x10b 振荡器类型 内部 工作温度 -40°C ~ 85°C(TA) 封装 /外壳 14-TSSOP(0.173",4.40mm 宽) 供应商器件封装 14-TSSOP 深圳市动能世纪科技有限公司联系人张先生,联系电话18025394686,企业QQ,2355573216 深圳市动能世纪科技有限公司成立于2000年,是一家IC集成 电路 代理及分销商,一直专注于2.4G无线射频 芯片 ,为客户提供相关 元器件 的配套。公司拥有一支专业且经验丰富的销售团队,长期关注无线射 电子 行业的最新动态,与原厂建立战略合伙伴,授权代理。并凭借技术优势,为客户提供解决方案,公司主营无线射频收发 芯片 、USB-UART控制 芯片 、通讯数据传输芯片、超低功耗MCU、音频解码芯片。应用范围:超低功耗无线数据传输系统,超低功耗有源RFID系统,校讯通系统,电动自行车防盗系统,固定资产监管系统,停车场管理系统,人员进出场管理,无人机等领域。 主营品牌:NORDIC,RFAXIS,,TI,ST,FTDI,SILICON,IC+,CYPRESS等,长期优势供应: SI24R1 SI24R2 UPD6453 UPD6464 MAX7456EUI MB90092 LM1881 MT8816 TCA787 量产A3988SJP-T代替HR3988 QFP48带散热片 HR3988 QFN36带散热片 量产A4985SESTR-T代替HR4985 QFN 量产A4988SETTR代替HR4988 NRF51822-QFAA NRF51822-QFAB 74LVC244ADB DS1307 AT93C46 NRF2401AG NRF2402 NRF24LU1P-F16Q32-R Ft232Rl FT232RQ FT4232HL FT231XS-R IP175CHLF IP175G IP113CLF IP101GR CYRF6936-40LFXC NRF24L01P(NRF24L01+) NRF2401AG NRF51822 SI4432-B1-FMR SI4438-B1C-FMR CP2102 CC1101RGPR BQ24725ARGRR TCA9406DCTR TPS51206DSQR TPS51218DSCR TPS51285BRUKR MT7681N HMC274QS16E AS3932-BTST AS3933-BTST CC2541F256RHAR CC1101RGPR MSP430G2001IPW14R MSP430G2211IPW14R RFX2401C RFX2402C STM8S003F3P6 STM32F103RCT6 a7105/A71X05AQFI/Q A7108 RTL8211E-VB-CG HK1225-7EQ/7B
0 个评论
分享 MSP430(G2553)IAP功能的移植与实现(原创文章,转载须注明出处)
housezhu 2016-11-12 13:00
MSP430(G2553)IAP功能的移植与实现(原创文章,转载须注明出处)
一、 什么是 bootlloader ? 在嵌入式操作系统中, BootLoader 是在 操作系统 内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用 操作系统内核 准备好正确的环境。因此整个系统的加载启动任务就完全由 BootLoader 来完成。 以上是百度百科上对 bootloader 的描述,但是我们这里所说的 bootloader 是为了实现单片机 IAP 功能,所编写的一段引导程序,从而实现我们 APP 的程序数据能够通过串口等通信方式写进 Flash 程序空间最终实现自编程和程序更新的目的,这就是我们这里说的 bootloader 。 二、 程序架构 具有 bootloader 的一个完整的应用系统程序分为两大部分: 1 、 APP 程序:应用系统功能实现层(通俗的讲就是我们自己要写的程序); 2 、 bootloader 引导程序:就是系统启动或复位时的入口程序,主要的功能包括时钟初始化、 Uart 通信初始化、判断是执行 boot 串口升级程序还是跳转执行 APP 程序。 Bootloader 的程序架构如下图所示 : 三、 bootloader 串口升级协议 主机发送数据格式:头码( 80H ) + 长度码 + 负载消息 + 校验和( CRC8 ) ,其中: 头码固定为 80H ,用于界定数据帧开始; 长度码:值为负载消息的总字节数; 负载消息的格式为: CMD+ADDR_L+ADDR_H+data ;其中, CMD 为一个字节的主机命令码; ADDR_L 和 ADDR_H 为 data 写入目标机 Flash 地址的高低字节值; data 为需要写入 Flash 程序空间的数据;检验和为所有负载消息按发送顺序先后对其 CRC8 ( x8+x2+x+1 )计算所得的校验值。 表 1 :主机命令表 命令描述 命令码 Byte-1 Byte-2 Byte-3 …… Byte-n 擦除段 12H ADDR_L ADDR_H X X X 擦除 APP 15H X X X X X 接收编程数据块 10H ADDR_L ADDR_H Data-0 …… Data-n 读取版本号 19H X X X X X 跳转至 APP 1CH X X X X X 注: X 表示没有该字段数据; …… 表示连续的数据。 1、 擦除段:由指定的地址开始擦除目标机 Flash 连续的 512 字节的程序空间。 2、 擦除 APP :擦除目标机的 APP 程序空间 3、 接收编程数据块:将接收到的数据写入目标机指定地址的程序空间 4、 读取版本号:读取目标机当前的 bootloader 的版本号 5、 跳转至 APP :一般用于 APP 程序更新完成后,指示目标机跳转到 APP 程序运行 目标机(从机)回应为单字节回应码,具体含义如下: 表 2 :目标机回应码 回应名称 回应码 具体描述 OK 0x01 命令执行成功 头码错误 0x51 数据帧头码错误 校验错误 0x52 数据帧校验错误 数据帧长度为 0 0x53 数据长度码为 0 负载消息长度超限 0x54 数据帧消息长度超过所允许的最大长度值 未知错误 0x55 协议未知错误 参数错误 0x5C 命令参数错误 命令错误 0x6C 根据协议无法解析该命令 Bootloader 版本号 0 至 255 版本号,不建议存在与以上回应码相重叠的版本号 四、 Bootloader 程序内存空间分布 为实现单片机的 IAP 功能和合理的使用单片机的存储空间,我们需要对单片机的内存(这里的内存指的是单片机上所有可利用的存储资源,包括 RAM 、 Flash )资源进行的合理的规划。以 MSP430G2553 为例,该 Bootloader 对其内存空间规划分布大致分为三个部分: RAM 空间、 Flash 中的 APP 程序空间、 Flash 中的 Bootloader 程序空间。 RAM 空间主要贮存着单片外设模块的寄存器(不可改变)、程序运行空间; Flash 中的 APP 程序空间存储着 APP 的代码数据和 APP 程序中的常量数据、 APP 层中断服务程序向量表、 APP 程序校验值等 Flash 中的 Bootloader 程序空间存储着 Bootloader 程序代码数据和 Boot 层中断向量表等 具体内存空间分配如下表所示: 表 3 :内存分配空间 内存标签 地址 描述 0x0000 外围模块贮存位置 __RAM_Start 0x01FF 0x0200 Boot 层预先定义的变量指定的内存空间 __NonReserve_RAM_Start(Boot) 0x0205 0x0206 Boot 层内存空间 __NonReserve_RAM_Start(App) 0x021F 0x0220 APP 层内存空间 __RAM_End 0x03FF | | | | | | | | | INFOBOOT(Start) 0x1000 时钟模块寄存器校准值、 Bootloader 的程序代码数据空间 INFOBOOT(End) 0x10C0 | | | | | | | | | __Flash_Start(_AppChecksum) 0xC000 APP 程序代码数据检验和存储空间 _App_Start 0xC002 0xC003 APP 程序代码数据存储空间 _App_End 0xFBFF __Boot_Start 0xFC00 Bootloader 程序代码数据空间 __Boot_VectorTable 0xFFDF 0xFFE0 单片机中断向量表 程序复位向量 __Boot_Reset 0xFFFE __Flash_End 0xFFFF 五、 单片机 IAP 升级实例 现在假定单片机正在跑 Bootloader 升级引导程序,主机通过串口更新 APP 程序的基本流程如下: 读取 Bootloader 版本号 擦除 APP 程序空间 发送 APP 程序代码数据 1 发送 APP 程序代码数据 2 (中断向量映射表代码) APP 程序代码数据 CRC 校验值 APP 程序更新完成发送跳转至 APP 命令 现假定 APP 程序编译完成后的 16 进制代码数据如下: @C000 92 DD @c004 A2 D2 60 01 F2 F0 EF 00 29 00 0D 12 0E 12 3D 40 3C 82 3E 40 0E 00 1D 83 0E 73 FD 23 0D 93 FB 23 3E 41 3D 41 00 3C 0D 12 0E 12 3D 40 3C 82 3E 40 0E 00 1D 83 0E 73 FD 23 0D 93 FB 23 3E 41 3D 41 00 3C F2 D0 10 00 29 00 0D 12 0E 12 3D 40 3C 82 3E 40 0E 00 1D 83 0E 73 FD 23 0D 93 FB 23 3E 41 3D 41 00 3C 0D 12 0E 12 3D 40 3C 82 3E 40 0E 00 1D 83 0E 73 FD 23 0D 93 FB 23 3E 41 3D 41 00 3C 00 13 A2 D2 60 01 F2 D0 20 00 29 00 F2 E0 10 00 29 00 D2 E3 20 02 0D 12 0E 12 3D 40 3C 82 3E 40 0E 00 1D 83 0E 73 FD 23 0D 93 FB 23 3E 41 3D 41 00 3C 92 C3 62 01 00 13 0F 12 0E 12 0D 12 0C 12 0B 12 B1 C0 10 00 0A 00 C2 43 2B 00 B0 12 E0 C0 3B 41 3C 41 3D 41 3E 41 3F 41 00 13 B2 40 DE C0 00 02 D2 D3 02 02 32 C2 03 43 B2 40 0B 5A 20 01 FF 3F D2 B3 03 00 07 24 D2 C3 03 00 D2 42 66 00 21 02 D2 43 22 02 00 13 1F 4C 01 00 0F 93 05 24 1D 53 CD 43 FF FF 1F 83 FB 23 30 41 F2 F0 DF 00 29 00 00 13 00 00 03 00 0C C1 28 C1 20 02 @fbce 30 40 26 C1 30 40 BC C0 30 40 04 C0 30 40 04 C0 30 40 F6 C0 30 40 04 C0 30 40 86 C0 30 40 04 C0 30 40 04 C0 30 40 04 C0 30 40 04 C0 30 40 04 C0 20 C1 q 该段数据分为三个部分:校验值、程序数据代码、中断向量映射表 校验值的地址位置为: 0xC000 ,值为: 92DD ( LSB , 92 为地址空间中的低字节, DD 为地址空间高字节) 同样依次将程序代码数据从地址 0xC004 开始写目标机对应的地址空间,中断向量表程序数据从 0xFBCE 开始写入目标机对应的程序空间。写入成功后发送 APP 跳转命令,程序跳转至 APP 层执行,此时 APP 更新成功。 通信举例: 1、 读取目标机版本号 主机发送: 8001194F 目标机回复: A1 (版本号) 2、 擦除 APP 程序空间 主机发送: 8001156B 目标机回复: 01 ( OK ) 3、 发送程序代码数据 主机发送: 801310DEFB3040F6C0304004C0304086C0304004C029 目标机回复: 10 (写入 Flash 的字节数); 55 (写入失败) 4、 发送程序跳转命令 主机发送: 80011C54 目标机回复: 01 ( OK )
个人分类: MSP430|2122 次阅读|0 个评论
分享 MSP430F5438A的BSL下载电路小问题【TI你有点儿坑……】
liujj05 2015-3-22 23:21
MSP430F5438A的BSL下载电路小问题【TI你有点儿坑……】
其实就是因为没钱买仿真器嘛,弄个BSL的下载电路 网上其实有很多的说明了,但是主要集中在了串口转USB这个方向上,有一点却有些疏忽 TI很贴心的给了BSL下载电路的原理图,虽然部分东西看着有点抽象: 然后,在后面的说明中给出了一个表格: 可见一般的MSP430单片机利用的是P1.1和P2.2这两个IO端口作为BSL的TX和RX端(4系列特殊些,1.0和1.1),但是5438A却更特殊,注意表下面的一行小字,每个设备的BSL的详细信息请分别看各自的datasheet,TI你多说两句不行么,后来我发现我错怪他了,他真的在这份BSL的说明文档中“多说”了“两句”,这是一个第五章的表格: 又是见datasheet……你这不和没说一样么 翻出了datasheet才发现: 5438A的BSL下载TX和RX分别是P1.1和P1.2……而且你这时候不写简称TX和RX改写transmit output 和 receive input了? 太不人性了,太考验广大用户的细心程度了……可能真的是我太懒
个人分类: MSP430开发相关|2372 次阅读|0 个评论
分享 基于MSP430单片机的CPU卡模板程序(三)
tiankai001 2015-1-28 22:13
; ************************************** 1. ; 发送命令头 5 字节 ;************************************** SEND_COMMAND: MOV.b @BX+,TRDATA //发送命令头5字节 CALL #SENDCHAR bit #c,sr Jnz sendcom_out DEC.B RESETCNT JNZ SEND_COMMAND CLRC sendcom_out: RET ;********************************************************** 2. ;发送一个字节 , C=0 发送正确,C=1发送出错,容错 次数为3次 ;********************************************************** SENDCHAR: MOV.B #3,ERRCNT //错误次数为3次 schar1: BIS.B #ICIO+ICRST,PDIRA //将数据口设为输出口 BIS.B #SAMIO+SAMRST,PDIRB clr.b icflag1 BIT.B #ICSAM JNZ SCHAR_IC1 BIC.B #SAMIO,POUTB //发送起始位 CALL #DELAY1ETU BIS.B #SAMIO,PDIRB CALL #SENDONEbYTE BIC.B #SAMIO,PDIRB //转为接收态 CALL #DELAY05ETU bit.b #samio,pinb JZ SCHAR_ERR //若数据线为低,表出错 JMP SCHAR_OK SCHAR_IC1: BIC.B #ICIO,POUTA CALL #DELAY1ETU BIS.B #ICIO,PDIRA CALL #SENDONEbYTE BIC.B #ICIO,PDIRA CALL #DELAY05ETU BIT.B #ICIO,PINA JZ SCHAR_ERR SCHAR_OK: CALL #DELAY05ETU //一字节发送完毕 call #DELAY1ETU CLRC RET SCHAR_ERR: CALL #DELAY1ETU BIS.B #ICIO,PDIRA BIS.B #SAMIO,PDIRB CALL #DELAY1ETU DEC.B ERRCNT JNZ SCHAR1 SETC RET ;************************************** 3. ;发送一字节: 8 位加校验位 ; ************************************** SENDONEBYTE: //发送一字节:8位加校验位 MOV.B #8,CNTREG CLRC BIT.B #ICSAM JNZ S1BYTE_IC //ICCARD S1BYTE_ASAM: RRA.BTRDATA JCS1BYTE_C1 //=1 BIC.B#SAMIO,POUTB JMPS1BYTE_NEXT S1BYTE_C1: BIS.B#SAMIO,POUTB XOR.B #80H,ICFLAG1 //计算校验和 S1BYTE_NEXT: CALL#DELAY1ETU DEC.BCNTREG JNZS1BYTE_ASAM BIT.B#80H,ICFLAG1 //发校验和 JNZS1BYTE_MXOR1 //1 BIC.B#SAMIO,POUTB JMP S1BYTE_OUT S1BYTE_MXOR1: BIS.B #SAMIO,POUTB S1BYTE_OUT: CALL #DELAY1ETU BIC.B #SAMIO,PDIRB JMP S1BYTE_OUT2 S1BYTE_IC: RRA.BTRDATA JCS1BYTE_IC1 //=1 BIC.B#ICIO,POUTA JMPS1BYTE_NEXTIC S1BYTE_IC1: BIS.B#ICIO,POUTA XOR.B #80H,ICFLAG1 //计算校验和 S1BYTE_NEXTIC: CALL#DELAY1ETU DEC.BCNTREG JNZS1BYTE_IC BIT.B#80H,ICFLAG1 JNZS1BYTE_MXORIC1 //1 BIC.B#ICIO,POUTA JMP S1BYTE_OUTIC S1BYTE_MXORIC1: BIS.B #ICIO,POUTA S1BYTE_OUTIC: CALL #DELAY1ETU BIC.B #ICIO,PDIRA S1BYTE_OUT2: RET ;************************************************************ 4. ; 复位应答,接收 13 个应答信号,存放在 RSTDATABUF 开始的区域 ;************************************************************ CARDRESET: clr.b icflag1 MOV.B #8,CNTREG ;发送或接收的位数 CLR.B TRDATA ;发送或接收的数据 MOV #RSTDATABUF,BX ;复位信号存放区 MOV.B #13,RESETCNT ;计数器 clr.bpoutb ; bis.b #sampower,poutb ; bis.b#samio,poutB ;esam模块io口输出高 bic.b#samrst,poutB ;esam模块rst口输出低 bis.b#sampower+samio+samrst,pdirb ; BIC.B #CARDPRO_ERR call #delay1etu bit.b#icsam //判是对IC卡还是对ESAM的复位 jzrst_sam RST_IC: //对IC卡复位 clr.bpoutA bis.b #ICpower,poutA bis.b#ICio,poutA bic.b#ICrst,poutA bis.b#ICpower+ICio+ICrst,pdirA BIC.B #CARDPRO_ERR call #delay1etu mov.b#0fh,scfi1//对时钟频率进行设置 bis.b#dcoplus,053h mov.b#(64-1),scfqctl //MCLK=4.196MHZ mov.b#40h,scfi0 mov.b#02h,P1dir //使P1.1为时钟输出 mov.b#02h,p1sel bic.b #ICpower,poutA //上电 bis.b #ICpower,pdirA CALL #DELAY05ETU bic.b#ICIO,pdirA //把口线置为接收态 call #delay1etu call #delay1etu call #delay1etu BIS.B#ICRST,POUTA //把RST置高 ;starttoreceivedata: 400clk call #delay1etu JMP RST_A rst_sam: bic.b #sampower,poutB bis.b #sampower,pdirB mov.b#0fh,scfi1 bis.b#dcoplus,053h mov.b#(64-1),scfqctl //MCLK=4.196MHZ mov.b#40h,scfi0 mov.b#02h,P1dir mov.b#02h,p1sel CALL #DELAY05ETU bic.b#samio,pdirb call #delay1etu call #delay1etu call #delay1etu BIS.B#SAMRST,POUTB ;starttoreceivedata: 400clk call #delay1etu RST_A: call#recchar //接收13个复位字符 bit.b#c,sr jnzrst_err mov.b trdata,0(bx) inc bx dec.b resetcnt jnz RST_A ret rst_err: bis.b#CARDPRO_ERR //将错误标志置1 ret
个人分类: CPU卡开发设计程序实例|1208 次阅读|0 个评论
分享 能量的极致驾驭之MSP430
热度 1 yunfenglw 2014-7-17 11:10
MSP430被业内称为省电王,对此殊荣当之无愧 。通过自己以往用MSP430来设计产品设计的经验,还有看MSP430的芯片手册,以及对MSP430的认识理解,明显的感觉TI将电源管理系统做到极致 。极大的砍掉了不同模式、功能下多余的硬件耗能模块,极大地砍掉了不同模块、功能下必须保留的硬件模块的多余耗能状态,极致的做到了能量的控制。对能量的利用堪称吝啬 ,铁公鸡般的吝啬,在有限的能量下,却又能出色的完成CPU模块的各项功能要求,支持丰富的片上资源,做到这点来源于TI卓越的技术支持 ,来自于TI对能量的极致控制! 本文来自论坛,点击查看完整帖子内容。
个人分类: cpu体系建模|692 次阅读|1 个评论
分享 第一篇:MSP-EXP430F5529LP快速测试
shmily53 2014-7-7 11:26
MSP-EXP430F5529LP 快速测试 MSP430LaunchPad™ 开发工具是一种廉价和简单 MSP430F5529 USB 单片机开发工具包。它提供了一个简单的方法来在 MSP430 的开始开发编程和仿真调试以及按钮和发光二极管为一个简单的用户界面 首先我们可以从官方的MSP-EXP430F5529LP LaunchPad™Development KitUser's Guide.pdf 中找到快速的测试方法 注释:值得注意的是插上MSP-EXP430F5529LP LaunchPad是找不到驱动的,再装驱动前我们应该先安装开发工具,之后驱动会自动安装。 完成以上步骤后,我们再插上MSP-EXP430F5529LP LaunchPad,可以看到 这个存储卷存储在 MSP430F5529 的芯片上的 Flash 中 。如果我们打开 H 盘: 我们可以打开任意文件对 USB 接口应用程序进行测试:(打开 Button1.txt ) 现在我们按下板卡上的 S2 按键,可以看到记事本中打印出如下图案 如果你打开 Button2.txt ,你会发现此时的内容正是 Button2.txt 的内容。 到此板子一切正常!
个人分类: MSP430|610 次阅读|0 个评论
分享 MSP430 LaunchPad制作的NRF24L01无线串口模块
热度 14 lb8820265 2014-3-19 16:23
MSP430 LaunchPad制作的NRF24L01无线串口模块
今天终于调通了24L01的硬件SPI,留个纪念。先将遇到的问题写下了,首先是发现if(P1IN BIT4==0)这句话竟然运行不了,这样写了之后发现下面的语句不能打断的,很是神奇,可是没有警告语错误。最后我将i=P1IN BIT4,然后if(i==0)这样就可以了 ,好吧,寄存器不能拿来运算吗?还是什么原因不知道。还有一个蛋疼的事情即使板子的串口太容易坏了,我一共三块一下子坏了两个,另一个我都不敢用了,还是用专门的串口模块吧。别人送外号硬件杀手,我以前也是经常弄坏芯片。。。 还有就是弄好了模拟SPI后硬件SPI怎么都不通,最后我用模拟SPI,运行while(1){SPI_RW(0x55)};最后测得SCK的频率是214K,然后我将硬件SPI的频率调成256K这下好了,用 Grace很方便, 上图是设置页面将频率设为256K,注意主频率也有对应,之后编译生成代码然后如下图 然后将代码复制,当然主要是频率的那个代码。这样就一切OK啦!然后附上链接图片与调试图片
3908 次阅读|10 个评论

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-6-24 21:17 , Processed in 0.064656 second(s), 18 queries , Gzip On, MemCache On.

Powered by EEWORLD电子工程世界

© 2019 http://bbs.eeworld.com.cn/

返回顶部