77104|261

2787

帖子

23

TA的资源

至上芯片

楼主
 

【专题】跟你一起玩转超低功耗MSP430单片机 [复制链接]

 

鉴于MSP430单片机的应用,为了方便大家更好地学习MSP430单片机,现在在这里开个专题讨论贴,大家一起来学习! 我将提供一些学习及应用资料,大家有调试等问题都可以在这里广泛讨论~~~~ 【什么是MSP430】 德州仪器 (TI) 的超低功率 16 位 RISC 混合信号处理器的 MSP430 产品系列为电池供电测量应用提供了最终解决方案。作为混合信号和数字技术的领导者,TI 创新生产的 MSP430,使系统设计人员能够在保持独一无二的低功率的同时同步连接至模拟信号、传感器和数字组件。 典型应用包括实用计量、便携式仪表、智能传感和消费类电子产品。 【架构】 采用冯诺依曼架构,通过通用存储器地址总线 (MAB) 和存储器数据总线 (MDB) 将 16 位 RISC CPU、多种外设和灵活的时钟系统进行完美结合。MSP430 通过将先进的 CPU 与模块化内存映像模数外设相结合,为当今和未来的混合信号应用提供了解决方案。

【特点】 1 16位精简指令结构 2 内含10,12,14位快速ADC/SLOP ADC 3 内含FLASH ROM多致60K字节,多致2K RAM 4 片内资源丰富,有ADC,PWM,若干TIME,串行口,WATCHDOG,比较器,模拟信号 5 有多种省电模式,功耗特别省,一颗电池可工作10年,在液晶显示时也能达到0.8uA的低电源消耗 6 开发简单,仿真器价格低廉,不需昂贵的编程器。 同其它微控制器相比,带Flash的微控制器可以将功耗降低5倍,既缩小了线路板空间又降低了系统成本。 高效16位RISCCPU可以确保任务的快速执行,缩短了工作时间。大多数指令可在一个时钟周期里完成 6微秒的快速启动时间可以延长待机时间并使启动更加迅速,降低了电池的功耗。 MSP430产品系列可以提供多种存储器选择,从14位ADCs到LCD驱动电路的混合信号外设,简化了各类应用中 MSP430的设计 ESD保护,抗干扰力特强 1.8V-3.6V低电压供电 PS:附件中的MSP430中文资料需要使用简易PDF软件FoxitPDFReader打开,使用Adobe Reader打开会显示乱码讨论 [ 本帖最后由 open82977352 于 2009-6-29 10:00 编辑 ]

 

MSP430(中文).rar

2.96 MB, 下载次数: 6698

FoxitPDFReader.rar

3.91 MB, 下载次数: 2895

MSP430系列单片机选购指南中文手册.pdf

170.76 KB, 下载次数: 1490

此帖出自电子竞赛论坛

最新回复

Lz牛人   详情 回复 发表于 2016-8-16 21:27

点评

:kiss: 楼主,您这些东西太详细了,多谢多谢···  详情 回复 发表于 2012-7-12 18:41
点赞(1) 关注(10)
个人签名我追求崇本务实,我追求完美第一!我选择低调做人,我选择高调做事!
 
 

回复
举报

2787

帖子

23

TA的资源

至上芯片

沙发
 

学习MSP430必备书籍

本帖最后由 paulhyde 于 2014-9-15 03:16 编辑

共享基本学习MSP430必备书籍 1、MSP430系列单片机C语言程序开发与设计 2、MSP430系列单片机接口技术及系统设计实例 3、MSP430系列单片机原理及应用 4、msp430单片机c语言应用程序设计实例精讲 [ 本帖最后由 open82977352 于 2009-6-29 09:48 编辑 ]

 

MSP430系列单片机C语言程序开发与设计.part1.rar

9.54 MB, 下载次数: 6240

MSP430系列单片机C语言程序开发与设计.part2.rar

6.24 MB, 下载次数: 6222

MSP430系列单片机接口技术及系统设计实例.pdf

14.98 MB, 下载次数: 5935

MSP430系列单片机原理及应用.pdf

4.21 MB, 下载次数: 5020

msp430单片机c语言应用程序设计实例精讲.rar

1.39 MB, 下载次数: 3910

此帖出自电子竞赛论坛
个人签名我追求崇本务实,我追求完美第一!我选择低调做人,我选择高调做事!
 
 
 

回复

2787

帖子

23

TA的资源

至上芯片

板凳
 

MSP430典型实例

本帖最后由 paulhyde 于 2014-9-15 03:16 编辑

再分享一下MSP430的模块应用等资料 1、MSP430单片机常用模块与综合系统实例精讲.rar 下载内容 --------------------- 下载内容包括3个文件夹:“程序代码”、“实例插图”、“电路图”3个文件夹。 其中各个文件夹主要有以下内容。 “程序代码”文件夹里面的内容为各实例章的程序源代码。 “实例插图”文件夹里面的内容为各实例章的插图,为bmp格式。 “实例电路图”文件夹里面的内容为各实例章的电路图,由Protel99软件制成。 ;---------------------- ;下载内容使用说明 ;---------------------- 下载内容的程序需要采用C语言的编译软件打开阅读,也可以使用“UltraEdit”等软件打开阅读或者编辑。 但是这些程序必须使用“Embedded Workbench”集成开发环境进行编译调试。 下载内容的电路图是用Protel99软件画成的,所以必须使用该软件打开。 2、MSP430资料大全.rar 包括 MSP430常用模块应用原理 MSP430实例程序C源码 MSP430串口波特率计算器等 [ 本帖最后由 open82977352 于 2009-6-29 10:06 编辑 ]

 

MSP430单片机常用模块与综合系统实例精讲.rar

1.35 MB, 下载次数: 4008

MSP430资料大全.rar

8.54 MB, 下载次数: 4922

msp430常用模块应用原理.pdf

1.02 MB, 下载次数: 2571

此帖出自电子竞赛论坛
个人签名我追求崇本务实,我追求完美第一!我选择低调做人,我选择高调做事!
 
 
 

回复

2787

帖子

23

TA的资源

至上芯片

4
 

MSP430典型电路设计

本帖最后由 paulhyde 于 2014-9-15 03:16 编辑

再分享几个MSP430典型电路设计 1、MSP430 JTAG电路 2、MSP430开发板原理电路 3、简易430并口下载器改造方案电路 4、MSP430实验板+配套资料 [ 本帖最后由 open82977352 于 2009-6-29 09:58 编辑 ]

 

MSP430 JTAG电路.rar

3.62 KB, 下载次数: 762

MSP430开发板.pdf

69.91 KB, 下载次数: 949

简易430并口下载器改造方案.doc

191.5 KB, 下载次数: 1025

MSP430实验板+配套资料.rar

5.63 MB, 下载次数: 3444

此帖出自电子竞赛论坛
个人签名我追求崇本务实,我追求完美第一!我选择低调做人,我选择高调做事!
 
 
 

回复

2787

帖子

23

TA的资源

至上芯片

5
 

MSP430应用

本帖最后由 paulhyde 于 2014-9-15 03:16 编辑

再分享几个MSP430的应用 1、uCOS11在MSP430上的移植 2、基于MSP430的开关稳压电源设计 3、MSP430和nRF905的无线数传系统设计 [ 本帖最后由 open82977352 于 2009-6-29 10:04 编辑 ]

 

uCOS11在MSP430上的移植.rar

158.88 KB, 下载次数: 1016

开关稳压电源MSP430.doc

172.5 KB, 下载次数: 1179

MSP430和nRF905的无线数传系统设计.doc

54.5 KB, 下载次数: 782

此帖出自电子竞赛论坛
个人签名我追求崇本务实,我追求完美第一!我选择低调做人,我选择高调做事!
 
 
 

回复

2787

帖子

23

TA的资源

至上芯片

6
 

MSP430与液晶显示器的串行接口方案 计算机网络论文


【摘要】
针对利用微控制器(MCU)控制液晶显示驱动器(LCD)的应用开发实例,提出一种采用串行方式来设计微控制器和液晶显示驱动器之间接口的方案。该方案是在现有点阵式液晶显示屏上附加一个MCU,通过程序设计利用MCU的I/O端口去模拟I2C串行总线,从而实现利用MCU去控制LCD的目的;同时介绍一种在图符液晶显示系统中显示动态曲线的技术和实现方法。
  关键词:液晶显示驱动器 I2C串行总线 MSP430

1 概述
点阵式液晶与外部的硬件接口简单,能以点阵或图形方式显示出各种信息,因此在电子设计中得到广泛应用。但是,对它的接口设计必须遵循一定的硬件和时序规范,不同的液晶显示驱动器,可能需要采用不同的接口方式和控制指令才能够实现所需信息的显示。某些液晶显示驱动器与外部的接口必须采用串行方式,而其串行接口往往不是标准的串行接口,这就为这类液晶显示驱动器的设计带来了困难。
针对上述问题,本文提出一种利用微控制器(MCU)的I/O端口,通过软件设计模拟与所使用的液晶显示驱动器规范相符的串行总线的设计思想,实现MCU对液晶显示驱动器的控制,从而建立起一套不但可以显示各种字符,而且可以动态显示曲线的游人显示系统。

2 系统设计
本文所建立的液晶显示系统,选用美国德州仪器(TI)公司的MSP430F149微控制器来控制液晶显示驱动器uPD16682A,从而实现各种信息的显示。
2.1 MSP430F14X微控制器简介
TI公司的MSP430F14X微控制器与其它MSP430系列微控制器相同,均甚至一个真正的正交16位RISC CPU内核:具有16个可单周期全寻址的16位寄存器,仅27条的精简指令集以及7种均采用双重取数据技术(DDFT)的一致性寻址方式。DDFT技术利用每个时钟脉冲对存储器进行两次数据存取操作。从而不再需要复杂的时钟乘法和指令流水线方案。
  MSP430F14X系列MCU片内不但包括60多KB的Flash、2KB的RAM、一个看门狗时钟、12位16通道的A/D转换器、定时器、高精度比较器、PWM以及高速的USART控制器等常用资源,还在某些型号中集成了LCD控制器。其I/O资源丰富,且每个输入/输出(I/O)引脚上都提供了矢量中断功能,每个外围器件都支持复杂的事件驱动型操作。同其它微控制器相,带片内Flash的微控制器可将系统功耗降低5倍,并且减小了硬件线路板空间,与现代程序设计技术(如计算分支以及高级语言(如C语言)结合使用,使得MSP430的体系结构更为高效。
MSP430F14X可采用一个集成的数字控制振荡器(DCO)或外部高速晶振对系统进行定时,其工作电压范围为1.8~3.6V,并可根据需要提供高达8MIPS(每秒百万条指令)的操作性能,对于对成本非常敏感的应用,该系列器件能够采用DCO来工作而无需外部晶振,快速的指令执行周期配之以低于6ms的等机启动时间,使得系统总功耗比竞争器件低了10倍,大大延长了诸如公用设施计量、便携式仪表测试和智能检测等工程应用系统中的电池使用寿命。
MSP430F14X系列微控制器允许用户使用标准C语言进行程序编程,并提供高效的C语言编译环境;配之以支持对具有仿零点功能的快闪产品进行丰取的快速实时仿真工具FET及优良的调试环境,使MSP430F14X系列微控制器在工程设计中得到了广泛应用。
2.2 液晶显示驱动器uPD16682A简介
uPD16682是NEC公司2001年初推出的液晶显示驱动器,该产品内置大容量显示RAM内存,并能够提供132×65点阵的全点显示,特别适合用于16×16或12×12点阵中、日文字符显示。该产品采用+3V单电源供电,内置升压电路并具3倍压和4倍压两种工作模式,支持8位串行或并行数据的输入,内置时钟发生电路和程序可编程控制的偏压电路。
(1)uPD16682A的显示内存
uPD16682A的显示RAM内存保存着被显示内容的点阵信息。显示RAM的每一位对应显示屏上的一个点,总共可以存储132×65点的信息;通过选择对应的RAM页地址和列地址,微控制器可以访问其中的任何一个点。微控制器对uPD16682A的显示RAM的读写操作通过uPD16682A的I/O缓冲器进行(串行模式下uPD16682A不支持读操作),并且该读操作和液晶显示屏驱动信号的读取操作是独立的,因此,当显示内存的数据同时被双方访问时,不会出现显示信息的抖动等现象。从微控制器读入的显示数据按照D7~D0的数据位顺序与液晶显示屏的行顺序一一对应,其显示关系对应图如图1所示。如果在系统中使用了多片uPD16682A,则在片间进行显示数据的转移和显示一整幅图案时用户就会有很大的自由度。
(2)uPD16682A与微控制器的接口
uPD16682A可以通过8位双向数据总线(并行模式下)或者通过串行总线接收来自微控制器的数据,这两种模式可以通过将其P/S引脚置高或置低进行选择。当工作于并行输入模式下时,uPD16682A的片选信号端、读写信号端以及控制信号端(A0)和数据线(D0~D7)都应该同微控制器的对应端口进行连接。此时uPD16682A内部显示RAM的数据以刷新液晶显示的内容,也可以通过数据总线读取显示内存的内容。当工作于串行模式下,uPD16682A仅使用数据线D6输入串行数据,即串行总线的数据输入端(SI),数据线D7被用作时钟输入(SCL)端,并将片将信号和控制信号(A0)同微控制器总线进行连接,置高或接地读写信号。此时uPD16682A内部显示RAM的数据访问是单向的,即微控制器只可以向显示RAM写数据以刷新液晶显示的内容,但不可以读取显示RAM的内容。
(3)uPD16682A的串行接口
uPD16682A的串行接口是TTL电平,不是标准的串行接口,对串行数据的接收没有具体波特率、数据接口协议的要求,内部包括1个8位的移位寄存器和1个3位的计数器。UPD16682A在每个串行时钟的上升沿将串行数据捕获到其内部的移位寄存器,同时计数器自动加1。当串行数据按照D7~D0的顺序被依次捕获到后,在第8个时钟周期的上升沿,已接收到内部的8位串行数据被转换成一个8位的并行数据;同时,uPD16682A读取控制信号线A0上的电平,并且根据A0信号来判断当前被写入的8位串行数据是一个显示数据还是一个控制命令。对控制信号线A0的读操作由uPD16682A的内部定时器来控制,在每隔8个串行时钟之后自动操作一次。
(4)uPD16682A的控制指令
uPD16682A通过读取其控制信号线A0的电平来判断当前从片外设备接收的数据是一个显示数据还是控制命令。当A0电平为高时,认为接收到的是一个显示数据;而当A0电平为低时,则认为接收到的是一个显示控制命令。利用uPD16682A的控制命令可以实现对uPD16682A大多数操作的控制。
2.3 uPD16682A与MSP430F149的硬件接口设计
图2是系统uPD16682A与MSP430F149的硬件接口示意图。图中系统采用4MHz晶振,并由系统时钟分频得到其它内外设所用的时钟。MSP430F149和uPD16682A相连接的I/O口被定义为输出,MSP430F149利用片内12位A/D采集传感器变换后的电压信号。经程序处理后,通过上述I/O口传送到uPD16682A进行信息显示。由于驱动液晶显示的电压需要十几V,如果系统板采用+3V单供电,则液晶显示驱动器必须采用片内升压电路。图中uPD16682A采用内部4倍压连接方式。
2.4 软件设计
MSP420F149允许用户标准C进行编程,并提供高效的C编译环境。如果对程序运行时间的要求不是很荷刻,采用C语言进行程序开发应当是编程人员的首先。以下主要介绍关于自定义串口总线的程序设计,同时介绍一种在uPD16682A下的画点和画线函数,提供在衅符显示屏下显示曲线的实现方法,从而为程序实现动态显示波形提供了可能。
2.4.1 串行口控制程序
微控制器送往uPD16682A的数据有显示数据或显示命令两种。两者的区分由uPD16692A控制信号线A0的状态来表征,因此将MSP430F149的Port2.2端口电平置高或置低就可控制uPD16682A的状态。
按照uPD16682A串行接口听原理,为了向其写入一个8位或16位的数据,首先必须通过程序设计向uPD16682A产生一个时钟输出。时钟产生可以有两种方式。一是利用微控制器定时器中断,定时依次从I/O端口输出高、低电平。二是利用指令产生和数据同步的时钟脉冲,通过产生一个电平的跳变沿将位数据送到uPD16682A,然后通过逐次移位,就可以将一个8位数据写进uPD16682A内部的数据锁存器。在第8个时钟脉冲的上升沿,锁存器中数据炙一个8位的并行数据,同时根据A0信号线睥电平来显示图符或执行相应的控制命令。虽然这里的串行数据的发送没有具体波特率和数据接口协议的要求,但是在编写程序时,必须认真考虑串行方式下各个信号的时序。以下是向uPD16682A写入一个8位控制命令的程序:
void Set_Address(unsigned char column,unsigned char page){
unsigned char ColH,ColL;
//设页地址
ColH=page|0xB0;
Write_Command(ColH);
//设列地址
ColH=(column&0xF0)>>4;
ColH|=0x10;
ColL=column&0x0F;
Write_Command(ColH);
Write_Command(ColL);
}2.4.2 字符显示屏上的曲线绘制程序
有了上述程序,就可以方便地在uPD16682A上指定位置显示设定的图案和字符了。如果用户需要动态地展示信号波形和曲线,还可设计出专用的画点和画线函数,从而大大提高了字符液晶显示屏的动态图形显示能力。通常而言,液晶显示屏上的一点对应液晶显示驱动器显示RAM中的一位。显示RAM中的某位为1,则在液晶显示屏上的相应点即为点亮状态;而要想实现在液显示屏上动态的显示点和曲线,必须用到显示RAM中的数据。通常的做法是读取指定点周围的数据,然后在这些点中的某个指定位置插入1位,从而将液晶显示屏上的指定点点亮,这就是基本的画点原理。但是,在串行方式下,uPD16682A不具备数据读出能力。为此,我们仿照显示RAM显示的方式,在MSP430F149的数据区开辟了一块和uPD16682A显示RAM同样大小的内存块,在向uPD16682A显示RAM写入显示数据的同时,也向该内存块的对应位置写入同样的数据,保证了该内存块的内容和uPD16682A显示RAM中的数据是同步刷新的。因此在画点函数中,我们直接从该内存块中取出需要的显示数据进行处理,然后再通过自定义串行总线送往uPD16682A进行显示。用这种方式,我们实现了在液晶显示屏的任意位置画出一个点,并且还可以利用这种方式编制自己的画线函数,这样就使uPD16682A具备了动态显示波形的能力,也就扩展了字符液晶显示屏动态曲线波形的显示功能。以下是uPD16682A编写的画点函数:
void DrawPointXY(unsigned char x,unsigned char y){
unsigned char page,dot,dat,CouL,CouH;
dot=0x01;
page=y/8; /*计算当前点页地址、列地址*/
r_page=page; /*点亮当前点并保持周围点信息不变*/
r_column=x;
page|=0xB0;
dat=y%8;
dot=dot< CouH=(x&0xF0)>>4;
/*通过自定义串行总线向uPD16682A发送数据*/
CouH=CouH|0x10;
CouL=(x&0x0F);
Write_Command(page);
Write_Command(CouH);
Write_Command(CouL);
dat=DisplayRam[r_page][r_column];
dat|=dot;
Write_DisplayData(dat); /*向显示RAM写入数据*/
}
程序中的二维全局数组DisplayRam[][]即为在MSP430F149中开辟的内存块,用于保存当前uPD16682A显示RAM中对应位置的显示数据。全局变量r_page和r_column分别保存8位显示数据的页地址和列地址。
如果想进一步实现曲线的显示,程序中则需要计算两个点之间在X方向和Y方向上的偏差,并依据偏差大小来插入要显示的点。本系统中,用这种设计方法获得了平滑的曲线显示效果。

3 应用
经实践证明,本文所介绍的利用微控制器的I/O端口实现微控制器和液晶显示驱动器之间的自定义串行总线的设计方案,取得了很好的应用效果。设计的液晶显示系统工作稳定可靠,开发的在字符型LCD下动态显示曲线波形的技术,扩展了字符型LCD动态显示曲线的功能,也为液晶显示驱动器的应用开发提供了一种新的途径。本文所提出的用软件模拟串行总线的方法具有很强的通用性,为实现I2C串行接口提供了一种新方式。
此帖出自电子竞赛论坛
个人签名我追求崇本务实,我追求完美第一!我选择低调做人,我选择高调做事!
 
 
 

回复

2787

帖子

23

TA的资源

至上芯片

7
 

MSP430开发重点总结!

1. # include<> 指要在编辑器设定目录下,# include"" 指的是在当前工程目录下。
2. 要调用另一个文件中的函数,要把这个函数文件放到当前工程目录下,并且在工程中添加此文件。
3. 命名中不能有-,比如:byq-ee会认为是错误的,要用下划线。
4. 用IAR软件仿真时,可以加入变量,如果是查看I/O信息只需加入PXIN,PXOUT即可。
5. IAR在处理字符时,要注意\0,是字符处理结尾标志,这和其他编辑软件是不同的。比如我们常用字符处理会自动在结尾处加\0,但IAR有些是不加的,这就要十分注意。
6.如果只用到LFX1的低速时钟,9600bit/s传输的话,接收会出现问题,原因是误差太大,可以设置到4800以下。
7.在写FLASH时要注意其工作频率在257K~476k之间,如果不是,则会出现错误。而且FLAGH只能写入0,这样就出现了必须先擦除再写入的模式。
8.当I/O口作为输入时,要根据平时的状态加电阻,平时为高时,加个上拉电阻,平时为低时加个下拉电阻以增加稳定性。
9.在FLASH写时一定要关外部中断。
10.MSP430一般是不要RC复位的,只要接个100K左右电阻就可以了,如果要加电容,它的大小要根据以下两个标准选择:
--下载程序不会出现下载不了;
--程序上电能稳定复位。
11.用&表达式作为判断时,不要忘记加括号。
12.不要使用中断嵌套。
此帖出自电子竞赛论坛
个人签名我追求崇本务实,我追求完美第一!我选择低调做人,我选择高调做事!
 
 
 

回复

2787

帖子

23

TA的资源

至上芯片

8
 
MSP430系列汇编语言工具用户指南.pdf

MSP430系列汇编语言工具用户指南.pdf

1.53 MB, 下载次数: 1302

此帖出自电子竞赛论坛
个人签名我追求崇本务实,我追求完美第一!我选择低调做人,我选择高调做事!
 
 
 

回复

2787

帖子

23

TA的资源

至上芯片

9
 

MSP430单片机的框架程序

下面给出MSP430的程序框架,我们可以在此基础上修改以及添加自己所需的程序。

/*****************************************************************************\

文件名:main.c

描述:MSP430框架程序。适用于MSP430F149,其他型号需要适当改变。

不使用的中断函数保留或者删除都可以,但保留时应确保不要打开不需要的中断。

保留中断函数,编译器将会为BSL密码填充所有的字节。

版本:1.0 2005-1-13

\*****************************************************************************/

//头文件

#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; //清除中断标志

      //以下填充用户代码

      

  }

  else

  {

      //处理P1IN.7中断

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

      //以下填充用户代码

      

  }

  

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

}

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

定时器A中断函数

多中断中断源:CC1~2 TA

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

#pragma vector=TIMERA1_VECTOR

__interrupt void TimerA1()

{

  //以下为参考处理程序,不使用的中断源应当删除

  switch (__even_in_range(TAIV, 10))

  {

  case 2:

      //捕获/比较1中断

      //以下填充用户代码

      

      break;

  case 4:

      //捕获/比较2中断

      //以下填充用户代码

      

      break;

  case 10:

      //TAIFG定时器溢出中断

      //以下填充用户代码

      

      break;

  }

  

  

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

}

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

定时器A中断函数

中断源:CC0

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

#pragma vector=TIMERA0_VECTOR

__interrupt void TimerA0()

{

  //以下填充用户代码

  

  

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

}

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

AD转换器中断函数

多中断源:摸拟0~7、VeREF+、VREF-/VeREF-、(AVcc-AVss)/2

没有处理ADC12TOV和ADC12OV中断标志

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

#pragma vector=ADC_VECTOR

__interrupt void Adc()

{

  //以下为参考处理程序,不使用的中断源应当删除

  if((ADC12IFG&BIT0)==BIT0)

  {

      //通道0

      //以下填充用户代码

      

  }

  else if((ADC12IFG&BIT1)==BIT1)

  {

      //通道1

      //以下填充用户代码

      

  }

  else if((ADC12IFG&BIT2)==BIT2)

  {

      //通道2

      //以下填充用户代码

      

  }

  else if((ADC12IFG&BIT3)==BIT3)

  {

      //通道3

      //以下填充用户代码

      

  }

  else if((ADC12IFG&BIT4)==BIT4)

  {

      //通道4

      //以下填充用户代码

      

  }

  else if((ADC12IFG&BIT5)==BIT5)

  {

      //通道5

      //以下填充用户代码

      

  }

  else if((ADC12IFG&BIT6)==BIT6)

  {

      //通道6

      //以下填充用户代码

      

  }

  else if((ADC12IFG&BIT7)==BIT7)

  {

      //通道7

      //以下填充用户代码

      

  }

  else if((ADC12IFG&BIT8)==BIT8)

  {

      //VeREF+

      //以下填充用户代码

      

  }

  else if((ADC12IFG&BIT9)==BIT9)

  {

      //VREF-/VeREF-

      //以下填充用户代码

      

  }

  else if((ADC12IFG&BITA)==BITA)

  {

      //温度

      //以下填充用户代码

      

  }

  else if((ADC12IFG&BITB)==BITB)

  {

      //(AVcc-AVss)/2

      //以下填充用户代码

      

  }

  

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

}

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

USART0发送中断函数

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

#pragma vector=USART0TX_VECTOR

__interrupt void Usart0Tx()

{

  //以下填充用户代码

  

  

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

}

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

USART0接收中断函数

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

#pragma vector=USART0RX_VECTOR

__interrupt void Usart0Rx()

{

  //以下填充用户代码

  

  

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

}

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

看门狗定时器中断函数

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

#pragma vector=WDT_VECTOR

__interrupt void WatchDog()

{

  //以下填充用户代码

  

  

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

}

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

比较器A中断函数

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

#pragma vector=COMPARATORA_VECTOR

__interrupt void ComparatorA()

{

  //以下填充用户代码

  

  

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

}

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

定时器B中断函数

多中断源:CC1~6 TB

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

#pragma vector=TIMERB1_VECTOR

__interrupt void TimerB1()

{

  //以下为参考处理程序,不使用的中断源应当删除

  switch (__even_in_range(TBIV, 14))

  {

  case 2:

      //捕获/比较1中断

      //以下填充用户代码

      

      break;

  case 4:

      //捕获/比较2中断

      //以下填充用户代码

      

      break;

  case 6:

      //捕获/比较3中断

      //以下填充用户代码

      

      break;

  case 8:

      //捕获/比较4中断

      //以下填充用户代码

      

      break;

  case 10:

      //捕获/比较5中断

      //以下填充用户代码

      

      break;

  case 12:

      //捕获/比较6中断

      //以下填充用户代码

      

      break;

  case 14:

      //TBIFG定时器溢出中断

      //以下填充用户代码

      

      break;

  }

  

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

}

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

定时器B中断函数

中断源:CC0

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

#pragma vector=TIMERB0_VECTOR

__interrupt void TimerB0()

{

  //以下填充用户代码

  

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

}

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

不可屏蔽中断函数

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

#pragma vector=NMI_VECTOR

__interrupt void Nmi()

{

  //以下为参考处理程序,不使用的中断源应当删除

  if((IFG1&OFIFG)==OFIFG)

  {

      //振荡器失效

      IFG1 &= ~OFIFG;

      //以下填充用户代码

      

  }

  else if((IFG1&NMIIFG)==NMIIFG)

  {

      //RST/NMI不可屏蔽中断

      IFG1 &= ~NMIIFG;

      //以下填充用户代码

      

  }

  else //if((FCTL3&ACCVIFG)==ACCVIFG)

  {

      //存储器非法访问

      FCTL3 &= ~ACCVIFG;

      //以下填充用户代码

      

  }

  

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

}

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

基本定时器中断函数

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

#pragma vector=BASICTIMER_VECTOR

__interrupt void BasTimer()

{

  //以下填充用户代码

  

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

}

//不错的程序框架,初学者可以参考学习。
此帖出自电子竞赛论坛
个人签名我追求崇本务实,我追求完美第一!我选择低调做人,我选择高调做事!
 
 
 

回复

2787

帖子

23

TA的资源

至上芯片

10
 

ARM7和MSP430的对比

MSP430会向着专用,更低电压,更低功耗的方向发展,不求功能大而全。应该会有更多的型号出现以供不同场合的测量使用。430的编程方法是在低功耗模式与任务之间切换来降低系统功耗,满足便携和节能的要求。
ARM是基于软核的高级精简指令机,高端应用方面比如嵌入式系统的主板开发,要求各种接口齐备,硬件的软实现相对容易降低成本,普及使用。ARM需要跑操作系统,如ucos,wince,linux等等,主要由于嵌入式系统开发往往是多任务,实时性强。

ARM7和MSP430的详细对比.pdf

276.86 KB, 下载次数: 1033

此帖出自电子竞赛论坛
个人签名我追求崇本务实,我追求完美第一!我选择低调做人,我选择高调做事!
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

11
 

gggggggggggggggggggood

gooooooooooooooooooooooooooooooood
此帖出自电子竞赛论坛
 
 
 

回复

254

帖子

0

TA的资源

纯净的硅(高级)

12
 
谢谢版主,有幸坐个板凳,学习了!
此帖出自电子竞赛论坛
个人签名把复杂的问题变简单需要智慧
 
 
 

回复

526

帖子

0

TA的资源

五彩晶圆(中级)

13
 
已跟TI申请了几片,只是最近在刻苦钻研AVR,呵呵,不过MSP430的优势还是很猛的
此帖出自电子竞赛论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

14
 
very goooooooooooooooooood!!!
此帖出自电子竞赛论坛

赞赏

1

查看全部赞赏

 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

15
 
回个贴都这么费劲@@!
此帖出自电子竞赛论坛
 
 
 

回复

142

帖子

0

TA的资源

纯净的硅(中级)

16
 
有这么多资料啊,好贴,顶一顶。
此帖出自电子竞赛论坛
 
 
 

回复

674

帖子

0

TA的资源

五彩晶圆(中级)

17
 

有空再下

学习MSP430必备书籍 有空再下
此帖出自电子竞赛论坛
 
 
 

回复

464

帖子

0

TA的资源

五彩晶圆(高级)

18
 
很详细,不错,幸苦
此帖出自电子竞赛论坛
个人签名气力
 
 
 

回复

477

帖子

0

TA的资源

五彩晶圆(高级)

19
 
太无敌了   赞
此帖出自电子竞赛论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

20
 
辛苦了,下来看看
此帖出自电子竞赛论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表