MSP430单片机入门例程
- 格式:pdf
- 大小:4.41 MB
- 文档页数:34
MSP430教程1:MSP430 单片机系列简介1、MSP430 单片机的发展MSP430 系列是一个 16 位的、具有精简指令集的、超低功耗的混合型单片机,在 1996 年问世,由于它具有极低的功耗、丰富的片内外设和方便灵活的开发手段,已成为众多单片机系列中一颗耀眼的新星。
回忆 MSP430 系列单片机的发展过程,可以看出有这样三个阶段:开始阶段从 1996 年推出 MSP430 系列开始到 2000 年初,这个阶段首先推出有 33X 、32X 、 31X 等几个系列,而后于 2000 年初又推出了 11X 、 11X1 系列。
MSP430 的 33X 、 32X 、 31X 等系列具有 LCD 驱动模块,对提高系统的集成度较有利。
每一系列有 ROM 型( C )、 OTP 型( P )、和 EPROM 型( E )等芯片。
EPROM 型的价格昂贵,运行环境温度范围窄,主要用于样机开发。
这也表明了这几个系列的开发模式,即:用户可以用 EPROM 型开发样机;用 OTP 型进行小批量生产;而 ROM 型适应大批量生产的产品。
2000 年推出了 11X/11X1 系列。
这个系列采用 20 脚封装,内存容量、片上功能和 I/O 引脚数比较少,但是价格比较低廉。
这个时期的 MSP430 已经显露出了它的特低功耗等的一系列技术特点,但也有不尽如人意之处。
它的许多重要特性,如:片内串行通信接口、硬件乘法器、足够的 I/O 引脚等,只有33X 系列才具备。
33X 系列价格较高,比较适合于较为复杂的应用系统。
当用户设计需要更多考虑成本时, 33X 并不一定是最适合的。
而片内高精度 A/D 转换器又只有 32X 系列才有。
寻找突破,引入 Flash 技术随着 Flash 技术的迅速发展, TI 公司也将这一技术引入 M SP430 系列中。
在 2000 年 7 月推出 F13X/F14X 系列,在 2001 年 7 月到 2002 年又相继推出 F41X 、 F43X 、 F44X 这些全部是 Flash 型单片机。
MSP430单片机入门例程MSP430单片机是一款低功耗、高性能的16位单片机,广泛应用于各种嵌入式系统。
下面是一个简单的MSP430单片机入门例程,可以让大家初步了解MSP430单片机的基本使用方法。
所需材料:1、MSP430单片机开发板2、MSP430单片机编译器3、MSP430单片机调试器4、电脑和相关软件步骤:1、安装MSP430单片机编译器首先需要安装MSP430单片机的编译器,该编译器可以将C语言代码编译成MSP430单片机可以执行的机器码。
在安装编译器时,需要选择与您的单片机型号匹配的编译器。
2、编写程序下面是一个简单的MSP430单片机程序,可以让LED灯闪烁:c本文include <msp430.h>int main(void)本文P1DIR |= 0x01; //设置P1.0为输出while(1){P1OUT ^= 0x01; //反转P1.0的状态,LED闪烁__delay_cycles(); //延时一段时间,控制闪烁频率}本文上述程序中,首先定义了P1DIR寄存器,将P1.0设置为输出。
然后进入一个无限循环,在循环中反转P1.0的状态,使LED闪烁。
使用__delay_cycles()函数实现延时,控制LED闪烁频率。
3、编译程序使用MSP430单片机编译器将程序编译成机器码,生成可执行文件。
在编译时,需要注意选择正确的编译器选项和单片机型号。
4、调试程序使用MSP430单片机调试器将可执行文件下载到单片机中,并使用调试器进行调试。
在调试时,可以观察单片机的输出口状态和LED灯的闪烁情况,确保程序正常运行。
随着嵌入式系统的发展,MSP430单片机作为一种低功耗、高性能的微控制器,在各种应用领域中得到了广泛的应用。
为了更好地理解和应用MSP430单片机,我在学习过程中积累了一些经验,现在分享给大家。
MSP430单片机是一种超低功耗的微控制器,由德州仪器(Texas Instruments)推出。
第1章MSP430单片机入门第一例1.1单片机简介单片微型计算机简称单片机,是典型的嵌入式微控制器(MicroController Unit),常用缩写MCU表示单片机。
单片机是一种集成电路芯片,采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。
单片机已广泛地应用于军事、工业、家用电器、智能玩具、便携式智能仪表和机器人制作等领域。
目前,常用的单片机有Intel8051系列单片机;C8051F系列单片机;ATMEL 公司的AVR系列单片机;TI公司的MSP430系列单片机;Motorola单片机;PIC 系列单片机;飞思卡尔系列单片机;STM32系列单片机;ARM系列嵌入式等等。
单片机种类繁多,不同的单片机有着不同的硬件特性和软件特征,产品设计时单片机的选型是一项重要工作。
对于初学者来说千万不要贪多求全,最好的学习方法是选择一款单片机进行深入学习,学好这一款单片机后再触类旁通、举一反三选择最合适的单片机完成实际工程任务。
1.1.1超低功耗的MSP430单片机MSP430系列单片机是TI(Texas Instruments,美国德州仪器)公司近年来推出的一系列优秀的混合型微处理器产品。
MSP430单片机是一种基于RISC(精简指令集计算机)的16位混合信号处理器,专为满足超低功耗需求而精心设计,同时具备很好的数字/模拟信号处理能力,具有智能外设、易用性、低成本、业界最低功耗等优异特性,能满足仪器仪表、工业自动化、国防、家居智能化、医疗保健、智能农业等多方面的需求环境。
MSP430总体结构如图1.1所示,可分为八个部分:1)CPU:MSP430的CPU运行正交的精简指令集,采用16位的ALU(运算器)、指令控制逻辑和16个16位寄存器、27条内核指令及7种寻址模式。
1、MSP430单片机基础实验1.1、IO口实验实验目的:学会MSP430单片机IO口的常规操作。
实验原理开发板上的3个LED灯和IO口的对应关系如下:POWER——P1.7 ISO14443A——P1.6 ISO15693——P1.4根据原理图分析,只需要将对应IO输出为低电平即可使其对应三极管导通,达到点亮对应LED的目的。
关键代码分析#include <msp430.h>volatile unsigned int i; // volatile to prevent optimizationint main(void){WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerP1DIR |= 0x80; // Set P1.7 to output directionfor (;;){P1OUT ^= 0x80; // Toggle P1.7 using exclusive-ORi = 50000; // Delaydo (i--);while (i != 0);}}对应工程详见:\感知RF2实验光盘2013\RFID技术实验\1-MSP430单片机基础实验\io实验结果POWER对应的LED灯闪烁。
作业1、对其他连个灯进行对应操作;2、流水灯显示编程控制。
1.2、定时器实验实验目的:学会MSP430单片机定时器常规配置及中断操作。
实验原理采用定时器TA溢出中断对LED灯进行取反操作。
关键代码分析#include <msp430.h>int main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDTP1DIR |= 0x80; // P1.0 outputTACCTL0 = CCIE; // TACCR0 interrupt enabledTACCR0 = 50000;TACTL = TASSEL_2 + MC_2; // SMCLK, contmode__bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}// Timer A0 interrupt service routine#pragma vector=TIMERA0_VECTOR__interrupt void Timer_A (void){P1OUT ^= 0x80; // Toggle P1.7TACCR0 += 50000; // Add Offset to TACCR0}对应工程详见\感知RF2实验光盘2013\RFID技术实验\1-MSP430单片机基础实验\timer实验结果LED灯快速闪烁,改变TACCR0值,闪烁时间间隔改变。
MSP430按键程序范例(附原理图)#i ncludevoid Init_Port(void){//将P1口所有的管脚在初始化的时候设置为输入方式 P1DIR = 0; //将P1口所有的管脚设置为一般I/O口P1SEL = 0;// 将P1.4 P1.5 P1.6 P1.7设置为输出方向P1DIR |= BIT4;P1DIR |= BIT5;P1DIR |= BIT6;P1DIR |= BIT7;//先输出低电平P1OUT = 0x00;// 将中断寄存器清零P1IE = 0;P1IES = 0;P1IFG = 0;//打开管脚的中断功能//对应的管脚由高到低电平跳变使相应的标志置位P1IE |= BIT0;P1IES |= BIT0;P1IE |= BIT1;P1IES |= BIT1;P1IE |= BIT2;P1IES |= BIT2;P1IE |= BIT3;P1IES |= BIT3;_EINT();//打开中断return;}void Delay(void){int i;for(i = 100;i--;i > 0) ;//延时一点时间}int KeyProcess(void){int nP10,nP11,nP12,nP13;int nRes = 0;//P1.4输出低电平P1OUT &= ~(BIT4);nP10 = P1IN & BIT0;if (nP10 == 0) nRes = 13; nP11 = P1IN & BIT1; if (nP11 == 0) nRes = 14; nP12 = P1IN & BIT2; if (nP12 == 0) nRes = 15; nP13 = P1IN & BIT3; if (nP13 == 0) nRes = 16; //P1.5输出低电平P1OUT &= ~(BIT4);nP10 = P1IN & BIT0;if (nP10 == 0) nRes = 9; nP11 = P1IN & BIT1; if (nP11 == 0) nRes = 10; nP12 = P1IN & BIT2; if (nP12 == 0) nRes = 11; nP13 = P1IN & BIT3; if (nP13 == 0) nRes = 12; //P1.6输出低电平P1OUT &= ~(BIT4);nP10 = P1IN & BIT0;if (nP10 == 0) nRes = 5; nP11 = P1IN & BIT1; if (nP11 == 0) nRes = 6; nP12 = P1IN & BIT2; if (nP12 == 0) nRes = 7; nP13 = P1IN & BIT3; if (nP13 == 0) nRes = 8; //P1.7输出低电平P1OUT &= ~(BIT4);nP10 = P1IN & BIT0;if (nP10 == 0) nRes = 1; nP11 = P1IN & BIT1;if (nP11 == 0) nRes = 2; nP12 = P1IN & BIT2;if (nP12 == 0) nRes = 3; nP13 = P1IN & BIT3;if (nP13 == 0) nRes = 4; P1OUT = 0x00;//恢复以前值。
MSP430系列十六位超低功耗单片机教学实验系统实验教程MSP430系列十六位超低功耗单片机是德州仪器公司(TI)推出的一款高性能单片机,被广泛应用于嵌入式系统及物联网领域。
为了帮助初学者快速上手MSP430系列单片机,TI公司推出了MSP430系列十六位超低功耗单片机教学实验系统及相应的实验教程。
以下为一份MSP430系列十六位超低功耗单片机教学实验系统实验教程。
实验一:基础实验实验内容:1.学习MSP430系列单片机的基本特性和功能。
4.学习如何使用MSP430系列单片机的GPIO口进行输入输出控制。
实验步骤:2.安装MSP430-GCC编译器,并将其配置到系统环境变量中。
3.编写一个简单的程序,实现将MSP430系列单片机的GPIO口配置为输出模式,并输出高电平或低电平信号。
5.通过观察开发板上的LED灯是否亮起来,判断GPIO的输出是否成功。
实验二:时钟系统实验实验内容:1.学习MSP430系列单片机的时钟系统和时钟源。
2.学习如何配置和使用MSP430系列单片机的时钟系统。
实验步骤:1.配置MSP430系列单片机的时钟系统,选择合适的时钟源和时钟频率。
2.编写一个程序,实现在不同时钟频率下,通过GPIO口控制LED灯的闪烁频率。
实验三:定时器实验实验内容:1.学习MSP430系列单片机的定时器及其相关功能。
2.学习如何配置和使用MSP430系列单片机的定时器。
实验步骤:1.配置MSP430系列单片机的定时器模块,设置定时时间和定时器模式。
2.编写一个程序,实现定时器中断,当定时时间到达时,通过GPIO口控制LED灯的闪烁。
实验四:串口通信实验实验内容:1.学习MSP430系列单片机的串口通信模块和相关配置。
2.学习如何配置和使用MSP430系列单片机的串口通信功能。
实验步骤:1.配置MSP430系列单片机的串口通信模块,设置波特率和数据位数。
2.编写一个程序,实现通过串口发送字符串数据,并通过串口接收并显示接收到的数据。
2.2 开发环境(实验1)MSP430的IAR最新版本软件按照默认安装之后,由程序组的IAR Systems――IAR Embedded Workbench KickStart for MSP430 V3 ――IAR Embedded Workbench可以进入IAR 的MSP430开发环境(见图2.2.1)。
图2.2.1 进入开发环境的方法第一次进入开发环境之后的界面如图 2.2.2。
这时,需要添加一个工作区,以及在工作区中添加一个项目,然后在项目中添加自己的程序代码。
最后编译,调试。
下面将分别讲述如何操作。
图2.2.2 第一次进入开发环境的界面添加一个新的工作区的方法为:点击菜单:File――New――Workspace,见图2.2.3。
图2.2.3 添加新的工作区屏幕将出现新的工作区(如图2.2.4),这时工作区内没有任何内容,需要添加一个用户项目。
具体方法见图 2.2.5。
图示为添加新的项目,也可以打开以前的项目(使用菜单中下面条目)。
按添加新项目之后,出现图2.2.6所示的界面,按ok即可。
之后需要填写项目名称,以及存放的位置,见图 2.2.7,注意记住自己输入的项目名称以及位置。
生成新项目之后,在工作区中显示出来,见图2.2.8。
如果此时关闭IAR开发环境,会提示是否保存工作区文件以及项目文件,同时要求输入工作区名以及路径。
如果再次打开IAR开发环境,会提示是否打开以前编辑过(或已经存在)的工作区文件,如图2.2.9所示。
这时点击test文件名,再点击“open”,即可进入图2.2.8所示的刚才正在编辑的项目工程文件“test项目”。
图2.2.4 刚添加没有项目的工作区图2.2.5 在工作区添加项目图2.2.6 在工作区添加项目图2.2.7 输入的项目名称以及存放位置图2.2.8 生成新项目之后,在工作区中显示出来图2.2.9 进入开发环境时提示是否打开已经存在的工作区文件此时的项目文件为空的项目,并没有任何实质内容,需要将所编写的源文件添加到这个空的项目中。
这只是我在学习TI公司生产的16位超的功耗单片机MSP430的随笔,希望能对其他朋友有所借鉴,不对之处还请多指教。
下面,开始430之旅。
讲解430的书现在也有很多了,不过大多数都是详细说明底层硬件结构的,看了不免有些空洞和枯燥,我认为了解一个MCU的操作首先要对其基础特性有所了解,然后再仔细研究各模块的功能。
1、首先你要知道msp430的存储器结构。
典型微处理器的结构有两种:冯 ? 诺依曼结构----程序存储器和数据存储器统一编码;哈佛结构----程序存储器和数据存储器。
MSP430系列单片机属于前者,而常用的mcs51系列属于后者。
0-0xf特殊功能寄存器;0x10-0x1ff外围模块寄存器;0x200-?根据不同型号地址从低向高扩展;0x1000-0x107f seg_b0x1080_0x10ff seg_a 供flash信息存储,剩下的从0xffff 开始向下扩展,根据不同容量,例如149为60KB,0xffff-0x11002、复位信号是MCU工作的起点,430的复位型号有两种:上电复位信号POR和上电清楚信号PUC。
POR信号只在上电和RST/NMI复位管脚被设置为复位功能,且低电平时系统复位。
而PUC信号是POR信号产生,以及其他如看门狗定时溢出、安全键值出现错误是产生。
但是,无论那种信号触发的复位,都会使MSP430在地址0xffff处读取复位中断向量,然后程序从中断向量所指的地址开始执行。
复位后的状态不写了,详见参考书,嘿嘿。
3、系统时钟是一个程序运行的指挥官,时序和中断也是整个程序的核心和中轴线。
430最多有三个振荡器:DCO内部振荡器;LFXT1外接低频振荡器,常见的32768HZ,不用外接负载电容;也可接高频450KHZ-8M,需接负载电容;XT2接高频450KHZ-8M,加外接电容。
430有三种时钟信号:MCLK系统主时钟,可分频1/2/4/8,供CPU使用,其他外围模块在有选择情况下也可使用;SMCLK系统子时钟,供外围模块使用,可选则不同振荡器产生的时钟信号;ACLK辅助时钟,只能由LFXT1产生,供外围模块。
如何学习MSP430单片机学习就是迎接挑战、解决困难的过程,没有挑战,就没有人生的乐趣。
下面以MSP430系列单片机为例,解释一下学习单片机的过程。
(1)获取资料购买有关书籍,并到杭州利尔达公司网站和TI网站获取资料,例如,在网上可以找到FET 使用指导、MSP430 F1xx系列、F4xx系列的使用说明和具体单片机芯片的数据说明,可以找到仿真器FET的电路图、实验板电路图、芯片封装知识等大量的实际应用参考电路,当然有些资料是英文的,看懂英文资料是个挑战,学会4、6级英语就是为看资料的。
英语难学,但是看资料容易,只要下决心,看完一本资料,就可以看懂所有的相关资料。
(2)购买仿真器FET和实验电路板如果经济条件不错,可以直接购买。
(3)自制仿真器FET和实验电路板自制仿真器FET,首先要到网上找到FET电路图,然后就可以使用画电路板软件画电路图和电路板图,这又是个挑战。
FET电路非常简单,但要把它制作出来还是需要下一番工夫的,找一本有关书,然后练习画原理图,画完原理图后,就学习认识元件封装,再购买元件,这时就可以画电路板图了,一旦画好,将形成的PCB文件交给电路板制作公司,10天后,就可以得到电路板,焊上元件和电缆,等实验电路板做好后,就可以与实验电路板一起调试了。
自制实验电路板,需要单片机芯片内部工作原理的知识、封装知识,清楚的知道每一个引脚的功能,还需要数码管、按钮、排电阻、三端稳压器、二极管、散热器、电解电容、普通电容、电阻、钮子开关等元件的知识,对于初学者,可以做一个只有3个数码管、8个按钮、8个发光二极管的简单实验板,这样的实验板,虽然简单,但足可以帮助初学者入门单片机。
自制实验电路板与自制FET一样,首先画电路图,然后买元件,再画电路板。
由于MSP430系列芯片是扁平封装,焊接起来有一定难度,这好象是个挑战,但实际上很简单,方法如下:首先在焊盘上涂上松香水,在松香水未干的情况下,将芯片放在焊盘上,注意芯片第一引脚的位置,并使引脚与焊盘对齐,将擦干净的电烙铁(不能有任何焊锡)接触引脚,引脚只要一热,焊盘上的焊锡就自动将引脚焊住了,千万注意电烙铁上不能有焊锡,焊接时最好配备一个放大镜。
MSP430初学者教程1.了解MSP430体系结构和特性:首先,你需要了解MSP430的体系结构和主要特性。
MSP430采用的是16位RISC架构,具有低功耗特性以及丰富的外设和存储器。
了解这些特性对于理解MSP430的使用至关重要。
3.学习MSP430的编程语言:4.熟悉MSP430的编程模型:了解MSP430的编程模型对于编写有效的程序至关重要。
这包括掌握寄存器、存储器和外设的使用。
你可以通过阅读MSP430的技术手册或官方文档来获得更多信息。
5.编写你的第一个MSP430程序:现在你已经准备好编写你的第一个MSP430程序了。
这个程序的目的是让你熟悉MSP430的编程环境和基本语法。
它可以是一个简单的LED点亮程序,让一个LED灯在一定的时间间隔内闪烁。
6.学习如何调试MSP430程序:当你编写MSP430程序时,你可能会遇到一些错误。
学习如何调试MSP430程序是非常重要的。
MSP430开发环境提供了一些调试工具,你可以使用它们来检查程序的运行情况。
7.学习如何使用MSP430的外设:8.尝试更复杂的MSP430项目:一旦你熟悉了MSP430的基本概念和编程,你可以尝试进行一些更复杂的项目。
比如,你可以使用MSP430控制一些传感器,或者与其他设备进行通信。
这将帮助你更深入地理解MSP430的使用。
9.参与MSP430社区和论坛:加入MSP430的社区和论坛是一个很好的方式来与其他MSP430开发者交流经验和获取帮助。
你可以在这些平台上提问,分享自己的项目经验,与其他人一起学习和进步。
10.持续学习:最后,持续学习是提高你在MSP430开发方面技能的关键。
MSP430的技术在不断发展,新的功能和工具不断出现。
通过阅读相关的书籍、文章和博客,参加培训和研讨会,你可以不断更新自己的知识。
这是一个MSP430初学者教程的总结。
我希望这个教程能够帮助你快速入门MSP430,并在自己的项目中有效使用它。
一、基础实验【10个】1、入门试验:LED闪烁(1个)2、时钟实验:设置MCLK、ACLK、SMCLK(1个)3、低功耗实验:设置低功耗模式(1个)4、IO端口试验:IO端口寄存器设置(1个)5、定时器:看门狗定时器、TimerA寄存器设置(2个)6、比较器:比较器A寄存器(1个)7、Flash:flash读写(1个)8、异步通信:异步通信寄存器设置(1个)9、ADC:ADC12寄存器设置(1个)二、开发板模块简单程序【56个】1、LED流水灯实验(红、黄、绿)(1)LED1:检测开发板(2)LED2:普通IO控制闪烁(3)LED3:PWM信号控制闪烁2、蜂鸣器实验(1)蜂鸣器1:单频音(步进变音调)(2)蜂鸣器2:奏乐(祝你平安)3、数码管实验(1)数码管1(显示123456)(2)数码管2(动态显示0~F)(3)数码管3(流动光圈)(4)数码管4(来回光标)4、4×1独立按键实验(1)4×1键盘1:扫描数码管显示(2)4×1键盘2:中断数码管显示(3)4×1键盘3:控制LED(4)4×1键盘4:控制蜂鸣器5、4×4矩阵键盘实验(1)4×4键盘1:行列扫描数码管显示(2)4×4键盘2:行列扫描1602液晶显示(3)4×4键盘3:控制LED蜂鸣器6、1602液晶实验(1)1602液晶1:动态字符显示(2)1602液晶2:静态字符显示(3)1602液晶3:内部时钟显示7、3.3V-5V电平转换实验(1)电平转换1:输出5V方波(2)电平转换2:输出不同占空比的方波(3)电平转换3:MCLK,SMCLK,ACLK8、RS232接口实验(1)RS232接口1:MCU发送数据PC机显示(2)RS232接口2:按键控制MCU发送数据PC机显示(3)RS232接口3:PC机发送数据MCU液晶显示(4)RS232接口4:MCU回发接收到的PC机数据(5)RS232接口5:RS232控制蜂鸣器9、RS485接口实验(1)RS485接口1:发送程序(2)RS485接口2:接收程序10、USB接口实验(1)USB接口1:简单连接测试(2)USB接口2:USB接收数据(3)USB接口3:USB发送数据11、PS2接口实验(1)PS2接口1:PS2控制1602显示(2)PS2接口2:PS2控制数码管显示(3)PS2接口3:PS2控制LED和蜂鸣器12、12-Bit高精度温度传感器实验(1)温度传感器1:DS18B20在数码管显示(2)温度传感器2:DS18B20在液晶显示13、RTC实时时钟实验(1)实时时钟1:DS1302测试(2)实时时钟2:DS1302电子钟14、2k Bit EEPROM实验(1)EEPROM1:AT24C02测试(2)EEPROM2:读出数据通过串口在PC机显示15、12-Bit模数转换器(ADC)接口实验(1)模数转换器1:ADC在数码管显示(2)模数转换器2:ADC在1602液晶在显示(3)模数转换器3:ADC通过串口在PC机显示16、8-Bit数模转换器(DAC)实验(1)数模转换器1:DAC控制LED(2)数模转换器2:DAC输出电压,ADC采样转换并在液晶上显示17、12864液晶实验(与12864液晶配套)(1)12864液晶并口1:字符显示(2)12864液晶并口2:汉字显示(3)12864液晶并口3:图形显示(4)12864液晶并口4:综合演示(5)12864液晶串口5:字符显示(6)12864液晶串口6:汉字显示(7)12864液晶串口7:图形显示(8)12864液晶串口8:综合演示18、射频模块CC1000实验(1)射频模块1:发送数据(2)射频模块2:接收数据19、ucos移植注:17、18程序随模块赠送三、开发板综合程序【30】1、键盘综合实验(1)4×4键盘+蜂鸣器+LED+数码管显示(2)4×4键盘+蜂鸣器+LED+1602液晶显示(3)4×4键盘+蜂鸣器+LED+PC机显示(4)PS2键盘+UART+PC机显示(5)PS2键盘+USB+PC机显示2、接口综合实验(1)USB UART(2)UART USB(3)RS232 RS485(4)RS485 RS2323、温度时间综合实验(1)DS18B20 + DS1302 + 数码管(2)DS18B20 + DS1302 + USB(3)DS18B20 + DS1302 + UART(4)DS18B20 + DS1302 + 16024、AD DA综合实验(1)ADC + 1602(2)ADC + UART(3)ADC + USB(4)DAC + LED + KEY(5)DAC + UART(6)DAC + USB(7)ADC + UART + DS1302(8)ADC + DAC + 1602 + KEY(9)ADC + DAC + UART + KEY5、其他综合实验(1)AT24C02高级应用(搜索,擦除,读出全部)(2)DS1302高级应用(内部RAM存取数据)6、12864液晶综合实验(1)汉字库(2)图形库7、3.2寸TFT触摸屏实验(1)静态图片(2)动画/*************************************************** 程序功能:BoardConfig.h 头文件---------------------------------------------------***************************************************/ typedef unsigned char uchar;typedef unsigned int uint;//控制位的宏定义#define Ctrl_Out P3DIR |= BIT3 + BIT6 + BIT7;#define Ctrl_0 P3OUT &= ~(BIT3 + BIT6 + BIT7)#define SRCLK_1 P3OUT |= BIT7#define SRCLK_0 P3OUT &= ~BIT7#define SER_1 P3OUT |= BIT6#define SER_0 P3OUT &= ~BIT6#define RCLK_1 P3OUT |= BIT3#define RCLK_0 P3OUT &= ~BIT3//板上资源配置函数void BoardConfig(uchar cmd){uchar i;Ctrl_Out;Ctrl_0;for(i = 0; i < 8; i++){SRCLK_0;if(cmd & 0x80) SER_1;else SER_0;SRCLK_1;cmd <<= 1;}RCLK_1;_NOP();RCLK_0;/*************************************************** 程序功能:控制8个LED闪烁,用于测试下载功能是否正常---------------------------------------------------测试说明:观察LED闪烁***************************************************/ #include <msp430x14x.h>/****************主函数****************/void main(void){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗BoardConfig(0xf0); //关闭数码管和电平转换,打开流水灯CCTL0 = CCIE; //使能CCR0中断CCR0 = 2047; //设定周期0.5STACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式P2DIR = 0xff; //设置P2口方向为输出P2OUT = 0xff;_EINT(); //使能全局中断LPM3; //CPU进入LPM3模式}/*******************************************函数名称:Timer_A功能:定时器A的中断服务函数参数:无返回值:无********************************************/#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){P2OUT ^= 0xff; //P2口输出取反/***********************************************程序功能:实现流水灯以三种流动方式和四种流动速度的不同组合而进行点亮"流动"------------------------------------------------测试说明:观察流水灯流动顺序和速度的变化************************************************/#include <msp430x14x.h>#include "BoardConfig.h"uint i = 0,j = 0,dir = 0;uint flag = 0,speed = 0; //flag--灯光流动方式,speed--灯光流动速度/****************主函数****************/void main(void){BoardConfig(0xf0);CCTL0 = CCIE; //使能CCR0中断CCR0 = 50000;TACTL = TASSEL_2 + ID_3 + MC_1; //定时器A的时钟源选择SMCLK,增计数模式P2DIR = 0xff; //设置P2口方向为输出P2OUT = 0xff;_EINT(); //使能全局中断LPM0; //CPU进入LPM0模式}/*******************************************函数名称:Timer_A功能:定时器A的中断服务函数,在这里通过标志控制流水灯的流动方向和流动速度参数:无返回值:无********************************************/#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){if(flag == 0){P2OUT = ~(0x80>>(i++)); //灯的点亮顺序D8 -> D1}else if(flag == 1){P2OUT = ~(0x01<<(i++)); //灯的点亮顺序D1 -> D8}else{if(dir) //灯的点亮顺序D8 -> D1,D1 -> D8,循环绕圈{P2OUT = ~(0x80>>(i++));}else{P2OUT = ~(0x01<<(i++));}}if(i == 8){dir = ~dir;}j++;if(j == 40){i = 0;j = 0;flag++;if(flag == 4) flag = 0;switch(speed){case 0:TACTL &=~ (ID0 + ID1);TACTL |= ID_3;break;case 1:TACTL &=~ (ID0 + ID1);TACTL |= ID_2;break;case 2:TACTL &=~ (ID0 + ID1);TACTL |= ID_1;break;case 3:TACTL &=~ (ID0 + ID1);TACTL |= ID_0;break;default:break;}if(flag != 3) speed++;if(speed == 4) speed = 0;}/******************************************************* 程序功能:用从P2.3和P2.4输出的PWM波形驱动LED闪烁P2.3口输出方波的占空比为75%P2.4口输出方波的占空比为25%-------------------------------------------------------测试说明:观察LED的亮灭的时间长短*******************************************************/ #include <msp430x14x.h>#include "BoardConfig.h"{WDTCTL = WDTPW + WDTHOLD; // 关狗BoardConfig(0xb0); // 关闭数码管和电平转换,打开流水灯P2DIR = 0xff; // P2端口设置为输出P2OUT = 0xff; // 关闭其他LEDP2SEL |= BIT3 + BIT4; // P2.3和P2.4连接内部模块CCR0 = 4096-1; // PWM周期为1SCCTL1 = OUTMOD_7; // CCR1 reset/setCCR1 = 3072; // CCR1 PWM duty cycleCCTL2 = OUTMOD_7; // CCR2 reset/setCCR2 = 1024; // CCR2 PWM duty cycleTACTL = TASSEL_1 + ID_3 + MC_1; // ACLK/8, up mode_BIS_SR(LPM3_bits); // Enter LPM3}//****************************************************************************** // MSP-FET430P140 Demo - Basic Clock, Output Buffered SMCLK, ACLK and MCLK//// Description: Output buffered MCLK, SMCLK and ACLK.// ACLK = LFXT1 = 32768, MCLK = DCO Max, SMCLK = XT2// //* XTAL's REQUIRED - NOT INSTALLED ON FET *//// //* Min Vcc required varies with MCLK frequency - refer to datasheet *////// MSP430F149// -----------------// /|\| XIN|-// | | | 32k// --|RST XOUT|-// | |// | XT2IN|-// | | XTAL (455k - 8Mhz)// |RST XT2OUT|-// | |// | P5.4|-->MCLK = DCO Max// | P5.5|-->SMCLK = XT2// | P5.6|-->ACLK = 32kHz//// M. Buccini// Texas Instruments Inc.// Feb 2005// Built with IAR Embedded Workbench V ersion: 3.21A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);WDTCTL = WDTPW +WDTHOLD; // Stop Watchdog Timer DCOCTL = DCO0 + DCO1 + DCO2; // Max DCOBCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on, max RSELBCSCTL2 |= SELS; // SMCLK = XT2P5DIR |= 0x70; // P5.6,5,4 outputsP5SEL |= 0x70; // P5.6,5,5 optionswhile(1){}//****************************************************************************** // MSP-FET430P140 Demo - Basic Clock, LPM3 Using WDT ISR, 32kHz ACLK//// Description: This program operates MSP430 normally in LPM3, pulsing P3.4// at 4 second intervals. WDT ISR used to wake-up system. All I/O configured// as low outputs to eliminate floating inputs. Current consumption does// increase when LED is powered on P3.4. Demo for measuring LPM3 current.// ACLK= LFXT1/4= 32768/4, MCLK= SMCLK= default DCO// //* External watch crystal on XIN XOUT is required for ACLK *//////// MSP430F149// ---------------// /|\| XIN|-// | | | 32kHz// --|RST XOUT|-// | |// | P3.5|-->LED//// Dasheng// LiTian Electronic Inc.// Feb 2008// Built with IAR Embedded Workbench V ersion: 3.42A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);BCSCTL1 |= DIV A_2; // ACLK/4WDTCTL = WDT_ADLY_1000; // WDT 1s/4 interval timerIE1 |= WDTIE; // Enable WDT interruptP1DIR = 0xFF; // All P1.x outputsP1OUT = 0; // All P1.x resetP2DIR = 0xFF; // All P2.x outputsP2OUT = 0; // All P2.x resetP3DIR = 0xFF; // All P3.x outputsP3OUT = 0x30; // All P3.x resetP4DIR = 0xFF; // All P4.x outputsP4OUT = 0; // All P4.x resetP5DIR = 0xFF; // All P5.x outputsP5OUT = 0; // All P5.x resetP6DIR = 0xFF; // All P6.x outputsP6OUT = 0x80; // All P6.x resetwhile(1){uint i;_BIS_SR(LPM3_bits + GIE); // Enter LPM3P3OUT &= ~BIT5; // Set P3.5 LED onfor (i = 18000; i>0; i--); // DelayP3OUT |= BIT5; // Clear P3.5 LED off}}#pragma vector=WDT_VECTOR__interrupt void watchdog_timer (void){_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)//******************************************************************************* // MSP-FET430P140 Demo - Software Toggle P3.4//// Description: Toggle P3.4 by xor'ing P3.4 inside of a software loop.// ACLK= n/a, MCLK= SMCLK= default DCO ~800k//// MSP430F149// -----------------// --|RST XOUT|-// | |// | P3.4|-->LED//// Dasheng// LiTian Electronic Inc.// Feb 2008// Built with IAR Embedded Workbench V ersion: 3.42A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerP3DIR |= BIT4; // Set P3.4 to output directionfor (;;){volatile unsigned int i;P3OUT ^= BIT4; // Toggle P3.4 using exclusive-ORi = 50000; // Delaydo (i--);while (i != 0);}//****************************************************************************** // MSP-FET430P140 Demo - WDT, Toggle P3.4, Interval Overflow ISR, DCO SMCLK//// Description: Toggle P3.4 using software timed by the WDT ISR. Toggle rate// is approximately 30ms based on default ~ 800khz DCO/SMCLK clock source// used in this example for the WDT.// ACLK= n/a, MCLK= SMCLK= default DCO~ 800k//// MSP430F149// -----------------// /|\| XIN|-// | | |// | P3.4|-->LED//// Dasheng// LiTian Electronic Inc.// Feb 2008// Built with IAR Embedded Workbench V ersion: 3.42A//****************************************************************************** #include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xbf); //关闭数码管、流水灯和电平转换WDTCTL = WDT_MDLY_32; // Set Watchdog Timer interval to ~30ms IE1 |= WDTIE; // Enable WDT interruptP3DIR |= BIT4; // Set P3.4 to output direction_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}// Watchdog Timer interrupt service routine#pragma vector=WDT_VECTOR__interrupt void watchdog_timer(void){P3OUT ^= BIT4; // Toggle P3.4 using exclusive-OR//****************************************************************************** // MSP-FET430P140 Demo - WDT, Toggle P3.4, Interval Overflow ISR, 32kHz ACLK//// Description: Toggle P3.4 using software timed by WDT ISR. Toggle rate is// exactly 250ms based on 32kHz ACLK WDT clock source. In this example the// WDT is configured to divide 32768 watch-crystal(2^15) by 2^13 with an ISR// triggered @ 4Hz.// ACLK= LFXT1= 32768, MCLK= SMCLK= DCO~ 800kHz// //* External watch crystal installed on XIN XOUT is required for ACLK *////// MSP430F149// -----------------// /|\| XIN|-// | | | 32kHz// --|RST XOUT|-// | |// | P3.4|-->LED// LiTian Electronic Inc.// Feb 2008// Built with IAR Embedded Workbench V ersion: 3.42A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);WDTCTL = WDT_ADLY_250; // WDT 250ms, ACLK, interval timer IE1 |= WDTIE; // Enable WDT interruptP3DIR |= BIT4; // Set P3.4 to output direction_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/interrupt}// Watchdog Timer interrupt service routine#pragma vector=WDT_VECTOR__interrupt void watchdog_timer(void){P3OUT ^= BIT4; // Toggle P3.4 using exclusive-OR//****************************************************************************** // MSP-FET430P140 Demo - Timer_A, Toggle P3.4, CCR0 Cont. Mode ISR, DCO SMCLK//// Description: Toggle P3.4 using software and TA_0 ISR. Toggles every// 50000 SMCLK cycles. SMCLK provides clock source for TACLK.// During the TA_0 ISR, P3.4 is toggled and 50000 clock cycles are added to// CCR0. TA_0 ISR is triggered every 50000 cycles. CPU is normally off and// used only during TA_ISR.// ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~800kHz//// MSP430F149// ---------------// /|\| XIN|-// | | |// --|RST XOUT|-// | |// | P3.4|-->LED//// Dasheng// Built with IAR Embedded Workbench V ersion: 3.42A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDTBoardConfig(0xb8); //关闭数码管、流水灯和电平转换P3DIR |= BIT4; // P3.4 outputCCTL0 = CCIE; // CCR0 interrupt enabledCCR0 = 50000;TACTL = TASSEL_2 + MC_2; // SMCLK, contmode_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}// Timer A0 interrupt service routine#pragma vector=TIMERA0_VECTOR__interrupt void Timer_A (void){P3OUT ^= BIT4; // Toggle P3.4CCR0 += 50000; // Add Offset to CCR0//****************************************************************************** // MSP-FET430P140 Demo - Timer_A, Toggle P3.4, CCR0 Up Mode ISR, DCO SMCLK//// Description: Toggle P3.4 using software and TA_0 ISR. Timer_A is// configured for up mode, thus the timer overflows when TAR counts// to CCR0. In this example, CCR0 is loaded with 20000.// ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~800kHz//// MSP430F149// ---------------// /|\| XIN|-// | | |// --|RST XOUT|-// | |// | P3.4|-->LED//// Dasheng// LiTian Electronic Inc.// Built with IAR Embedded Workbench V ersion: 3.42A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDTBoardConfig(0xb8);P3DIR |= BIT4; // P3.4 outputCCTL0 = CCIE; // CCR0 interrupt enabledCCR0 = 20000;TACTL = TASSEL_2 + MC_1; // SMCLK, upmode_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}// Timer A0 interrupt service routine#pragma vector=TIMERA0_VECTOR__interrupt void Timer_A (void){P3OUT ^= BIT4; // Toggle P3.4//****************************************************************************** // MSP-FET430P140 Demo - Timer_A, Toggle P3.4, Overflow ISR, DCO SMCLK//// Description: Toggle P3.4 using software and Timer_A overflow ISR.// In this example an ISR triggers when TA overflows. Inside the TA// overflow ISR P3.4 is toggled. Toggle rate is approximatlely 12Hz.// Proper use of the TAIV interrupt vector generator is demonstrated.// ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~800kHz//// MSP430F149// ---------------// /|\| XIN|-// | | |// --|RST XOUT|-// | |// | P3.4|-->LED//// Dasheng// LiTian Electronic Inc.// Feb 2008// Built with IAR Embedded Workbench V ersion: 3.42A#include <msp430x14x.h>#include "BoardConfig.h"void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDTBoardConfig(0xb8);P3DIR |= BIT4; // P3.4 outputTACTL = TASSEL_2 + MC_2 + TAIE; // SMCLK, contmode, interrupt_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}// Timer_A3 Interrupt V ector (TAIV) handler#pragma vector=TIMERA1_VECTOR__interrupt void Timer_A(void){switch( TAIV ){case 2: break; // CCR1 not usedcase 4: break; // CCR2 not usedcase 10: P3OUT ^= BIT4; // overflowbreak;}//****************************************************************************** // MSP-FET430P140 Demo - Timer_A, Toggle P3.4, Overflow ISR, 32kHz ACLK//// Description: Toggle P3.4 using software and the Timer_A overflow ISR.// In this example an ISR triggers when TA overflows. Inside the ISR P3.4// is toggled. Toggle rate is exactly 0.5Hz. Proper use of the TAIV interrupt// vector generator is demonstrated.// ACLK = TACLK = 32768Hz, MCLK = SMCLK = default DCO ~800kHz// //* An external watch crystal on XIN XOUT is required for ACLK *////// MSP430F149// ---------------// /|\| XIN|-// | | | 32kHz// --|RST XOUT|-// | |// | P3.4|-->LED//// Dasheng// Feb 2008// Built with IAR Embedded Workbench V ersion: 3.42A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDTBoardConfig(0xb8);P3DIR |= BIT4; // P3.4 outputTACTL = TASSEL_1 + MC_2 + TAIE; // ACLK, contmode, interrupt_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interrupt}// Timer_A3 Interrupt V ector (TAIV) handler#pragma vector=TIMERA1_VECTOR__interrupt void Timer_A(void){switch( TAIV ){case 2: break; // CCR1 not usedcase 4: break; // CCR2 not usedcase 10: P3OUT ^= BIT4; // overflowbreak;}}#include <msp430x14x.h>#include "BoardConfig.h"void main(void){WDTCTL = WDTHOLD + WDTPW; // 关看门狗BoardConfig(0xb0); //开流水灯,关数码管和电平转换CACTL1 = CARSEL + CAREF0 + CAON ; // Vcc/4 = - cmpCACTL2 = P2CA0; // 使用CA0P2DIR = 0xff;P2OUT = 0xff;while(1){if((CACTL2 | 0xfe) ==0xff){ // 比较电压是否超过0.25VccP2OUT &= ~BIT4;CACTL1 &= 0xfe; // CAIFG = 0}else{P2OUT |= BIT4;}}}//**************************************************************************** // MSP-FET430P140 Demo - Flash In-System Programming, Copy SegA to SegB//// Description: This program first erases flash seg A, then it increments all// values in seg A, then it erases seg B, then copies seg A to seg B.// Assumed MCLK 550kHz - 900kHz.// //* Set Breakpoint on NOP in the Mainloop to avoid Stressing Flash *////// MSP430F149// -----------------// /|\| XIN|-// | | |// --|RST XOUT|-// | |//// M. Mitchell// Texas Instruments Inc.// Feb 2005// Built with IAR Embedded Workbench V ersion: 3.21A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"uchar value; // 8-bit value to write to segment Auchar DataBuffer[128];// Function prototypesvoid write_SegA (uchar value);void copy_A2B (void);{BoardConfig(0xb8);WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerFCTL2 = FWKEY + FSSEL0 + FN0; // MCLK/2 for Flash Timing Generator value = 0; // Initialize valuewhile(1) // Repeat forever{write_SegA(value++); // Write segment A, increment valuecopy_A2B(); // Copy segment A to B_NOP(); // SET BREAKPOINT HERE}}void write_SegA (uchar value){uchar *Flash_ptr; // Flash pointeruint i;Flash_ptr = (uchar *) 0x1080; // Initialize Flash pointerFCTL1 = FWKEY + ERASE; // Set Erase bitFCTL3 = FWKEY; // Clear Lock bit*Flash_ptr = 0; // Dummy write to erase Flash segmentFCTL1 = FWKEY + WRT; // Set WRT bit for write operationfor (i=0; i<128; i++){*Flash_ptr++ = value; // Write value to flash}FCTL1 = FWKEY; // Clear WRT bitFCTL3 = FWKEY + LOCK; // Set LOCK bit}void copy_A2B (void){uchar *Flash_ptrA; // Segment A pointeruchar *Flash_ptrB; // Segment B pointeruint i;Flash_ptrA = (uchar *) 0x1080; // Initialize Flash segment A pointerFlash_ptrB = (uchar *) 0x1000; // Initialize Flash segment B pointerFCTL3 = FWKEY; // Clear Lock bit*Flash_ptrB = 0; // Dummy write to erase Flash segment B FCTL1 = FWKEY + WRT; // Set WRT bit for write operationfor (i=0; i<128; i++){DataBuffer[i] = *Flash_ptrA++;*Flash_ptrB++ = DataBuffer[i]; // Copy value segment A to segment B}FCTL1 = FWKEY; // Clear WRT bitFCTL3 = FWKEY + LOCK; // Set LOCK bit//****************************************************************************** // MSP-FET430P140 Demo - USART0, Ultra-Low Pwr UART 2400 Echo ISR, 32kHz ACLK //// Description: Echo a received character, RX ISR used. In the Mainloop UART0// is made ready to receive one character with interrupt active. The Mainloop// waits in LPM3. The UART0 ISR forces the Mainloop to exit LPM3 after// receiving one character which echo's back the received character.// ACLK = UCLK0 = LFXT1 = 32768, MCLK = SMCLK = DCO~ 800k// Baud rate divider with 32768hz XTAL @2400 = 32768Hz/2400 = 13.65 (000Dh)// //* An external watch crystal is required on XIN XOUT for ACLK *////// MSP430F149// -----------------// /|\| XIN|-// | | | 32kHz// --|RST XOUT|-// | |// | P3.4|----------->// | | 2400 - 8N1// | P3.5|<-----------////// M. Buccini// Texas Instruments Inc.// Feb 2005// Built with IAR Embedded Workbench V ersion: 3.21A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);WDTCTL = WDTPW + WDTHOLD; // Stop WDTP3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXDME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXDUCTL0 |= CHAR; // 8-bit characterUTCTL0 |= SSEL0; // UCLK = ACLKUBR00 = 0x0D; // 32k/2400 - 13.65UBR10 = 0x00; //UMCTL0 = 0x6B; // ModulationUCTL0 &= ~SWRST; // Initialize USART state machineIE1 |= URXIE0; // Enable USART0 RX interrupt// Mainloopfor (;;){_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/interruptwhile (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready?TXBUF0 = RXBUF0; // RXBUF0 to TXBUF0}}// UART0 RX ISR will for exit from LPM3 in Mainloop#pragma vector=UART0RX_VECTOR__interrupt void usart0_rx (void){_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)}//****************************************************************************** // MSP-FET430P140 Demo - USART0, Ultra-Low Pwr UART 9600 Echo ISR, 32kHz ACLK //// Description: Echo a received character, RX ISR used. In the Mainloop UART0// is made ready to receive one character with interrupt active. The Mainloop// waits in LPM3. The UART0 ISR forces the Mainloop to exit LPM3 after// receiving one character which echo's back the received character.// ACLK = UCLK0 = LFXT1 = 32768, MCLK = SMCLK = DCO~ 800k// Baud rate divider with 32768hz XTAL @9600 = 32768Hz/9600 = 3.41 (0003h 4Ah )// //* An external watch crystal is required on XIN XOUT for ACLK *////// MSP430F149// -----------------// /|\| XIN|-// | | | 32kHz// --|RST XOUT|-// | |// | P3.4|----------->// | | 9600 - 8N1// | P3.5|<-----------////// M. Buccini// Texas Instruments Inc.// Feb 2005// Built with IAR Embedded Workbench V ersion: 3.21A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){BoardConfig(0xb8);WDTCTL = WDTPW + WDTHOLD; // Stop WDTP3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXDME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXDUCTL0 |= CHAR; // 8-bit characterUTCTL0 |= SSEL0; // UCLK = ACLKUBR00 = 0x03; // 32k/9600 - 3.41UBR10 = 0x00; //UMCTL0 = 0x4A; // ModulationUCTL0 &= ~SWRST; // Initialize USART state machineIE1 |= URXIE0; // Enable USART0 RX interrupt// Mainloopfor (;;){_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/interruptwhile (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready?TXBUF0 = RXBUF0; // RXBUF0 to TXBUF0}}// UART0 RX ISR will for exit from LPM3 in Mainloop#pragma vector=UART0RX_VECTOR__interrupt void usart0_rx (void){_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)//****************************************************************************** // MSP-FET430P140 Demo - USART0, UART 19200 Echo ISR, XT2 HF XTAL ACLK//// Description: Echo a received character, RX ISR used. Normal mode is LPM0,// USART0 RX interrupt triggers TX Echo. Though not required, MCLK = XT2.// ACLK = n/a, MCLK = SMCLK = UCLK0 = XT2 = 8MHz// Baud rate divider with 8Mhz XTAL @19200 = 8MHz/19200 = 416.66 ~ 417 (01A0h)// //* An external 8MHz XTAL on X2IN X2OUT is required for XT2CLK *//// //* Min Vcc required varies with MCLK frequency - refer to datasheet *//////// MSP430F149// -----------------// /|\| XT2IN|-// | | | 8Mhz// --|RST XT2OUT|-// | |// | P3.4|------------>// | | 19200 - 8N1// | P3.5|<------------////// M. Buccini// Texas Instruments Inc.// Feb 2005// Built with IAR Embedded Workbench V ersion: 3.21A//******************************************************************************#include <msp430x14x.h>#include "BoardConfig.h"void main(void){volatile unsigned int i;BoardConfig(0xb8);P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXDWDTCTL = WDTPW + WDTHOLD; // Stop WDTBCSCTL1 &= ~XT2OFF; // XT2ondo{IFG1 &= ~OFIFG; // Clear OSCFault flagfor (i = 0xFF; i > 0; i--); // Time for flag to set}while ((IFG1 & OFIFG)); // OSCFault flag still set?BCSCTL2 |= SELM_2 + SELS; // MCLK = SMCLK = XT2 (safe)ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXDUCTL0 |= CHAR; // 8-bit characterUTCTL0 |= SSEL1; // UCLK = SMCLKUBR00 = 0xA0; // 8Mhz/19200 ~ 417UBR10 = 0x01; //UMCTL0 = 0x00; // no modulationUCTL0 &= ~SWRST; // Initialize USART state machineIE1 |= URXIE0; // Enable USART0 RX interrupt_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}#pragma vector=UART0RX_VECTOR__interrupt void usart0_rx (void){while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready?TXBUF0 = RXBUF0; // RXBUF0 to TXBUF0//****************************************************************************** // MSP-FET430P140 Demo - USART0, UART 115200 Echo ISR, XT2 HF XTAL ACLK//// Description: Echo a received character, RX ISR used. Normal mode is LPM0,// USART0 RX interrupt triggers TX Echo. Though not required, MCLK= XT2.// ACLK = n/a, MCLK = SMCLK = UCLK0 = XT2 = 8MHz// Baud rate divider with 8Mhz XTAL = 8000000/115200 = 0069 (0045h)// //* An external 8MHz XTAL on X2IN X2OUT is required for XT2CLK *//// //* Min Vcc required varies with MCLK frequency - refer to datasheet *//////// MSP430F149// -----------------// /|\| XT2IN|-// | | | 8Mhz// --|RST XT2OUT|-// | |// | P3.4|------------>// | | 115200 - 8N1// | P3.5|<------------////。