msp430F149应用电路原理图
- 格式:pdf
- 大小:70.26 KB
- 文档页数:1
基于MSP430F149的GPS
(芯片篇)
1、系统功能框图
2芯片资料:
MSP430F149:
低电源电压范围:1.8~3.6V
超低功耗:待机模式:1.6uA 关闭模式(RAM保持):0.1uA 活动模式:280uA at 1MHz,2.2V
5种省电模式
6us内从待机模式唤醒
16位RISC结构,125ns指令周期
带内部参考,采样保持和自动扫描特性的12位A/D转换器
有7个捕获/比较寄存器的16位定时器Timer_B 有3个捕获/比较寄存器的16位定时器Timer_A
片内集成比较器
串行在线编程,无需外部编程电压,安全熔丝可编程代码保护.
器件系列包括:–MSP430F133:8KB+256B闪速存储器,256B的RAM –MSP430F135:16KB+256B闪速存储器,512B的RAM –MSP430F147,MSP430F1471:32KB+256B闪速存储器,1KB的RAM –MSP430F148, MSP430F1481:48KB+256B闪速存储器,2KB的RAM –MSP430F149, MSP430F1491:60KB+256B闪速存储器,2KB的RAM
可用封装:64脚方形扁平封装(QFP).
功能框图。
自文档归原著所有LT-1BMSP430F149 学习板原理图技术文档说明:自文档归原著所有,但原理图部分有本人自己画图所得,将原著分开的文档画在一个工作区内,方便查阅。
MSP430F149学习板特点选用16 位超低功耗单片机MSP430F149,此MCU的特点如下:l 1.8V~3.6V超宽供电电压l 5 种低功耗模式,从standby 模式唤醒时间小于6μsl0.1uA RAM 保持l0.8uA 实时时钟模式l2K RAM,60KB+256B Flash Memory(支持IAP)l片内硬件乘法器支持四种乘法运算l两个具有PWM输出单元的16-Bit定时器(TimerA3,TimerB7)l两个UART接口,两个SPI 接口(与UART 复用)l一个8 通道12-Bit模数转换器(ADC),具有片内参考电压源l一个模拟比较器,看门狗电路等开发板上功能全面、板上资源丰富:¾三种可选供电方式(标准稳压器接口、USB 接口、电池接口)¾一个8-Bit 双向电平转换接口(5V--3.3V, 3.3V--5V)¾一个兼容USB2.0 规范、符合USB1.1 规范的标准USB 接口¾一个标准的六芯PS2 接口¾一个符合原厂标准的JTAG 仿真调试端口¾一个蜂鸣器¾一个射频通信模块接口¾一个12-Bit 高精度温度传感器¾一个8 路12-Bit 模数转换器(ADC)接口¾一个标准的1602 液晶接口¾一个标准的12864液晶接口¾一个六位共阴极动态扫描数码管电路¾一个可更换的CPU适配器¾一个RTC实时时钟+纽扣电池¾一个存储容量为256×8-Bit的EEPROM¾一个单路输出8-Bit 数模转换器(DAC)¾一个4×4的矩阵式键盘¾一个4×1的独立式按键(与4×4 的矩阵式键盘复用)¾一个标准的RS232接口¾一个简易的RS485接口¾一个含8 个LED 的流水灯电路(红、黄、绿)¾MCU 的全部IO 都用插针引出,便于二次开发提供电源指示灯和上电自动复位、手动复位电路,全SMD 设计、系统稳定可靠。
MSP430单片机的开发及应用设计人:陈小忠西安邮电学院电子信息工程系电子0002班西安邮电学院63# 7100612003年7月目录第一章概述第二章MSP430 F149语言介绍第一节开发环境及程序下载第二节语言介绍第三章MSP430F149 资源的应用介绍及开发第一节中断介绍及存储器段介绍第二节硬件乘法器第三节P口第四节定时器及数模转换第五节时钟模块第六节USART通信模块第七节比较器第八节模数转换第四章MSP430F149开发板的介绍及测试第一节模数转换模块第二节传感器模块第三节外存和实时时钟模块第四节485和232模块第五节电源管理模块及晶振模块第六节PWM波形滤波第一章概述MSP430是德州公司新开发的一类具有16位总线的带FLASH 的单片机,由于其性价比和集成度高,受到广大技术开发人员的青睐.它采用16位的总线,外设和内存统一编址,寻址范围可达64K,还可以外扩展存储器.具有统一的中断管理,具有丰富的片上外围模块,片内有精密硬件乘法器、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART 通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M 的时钟.由于为FLASH 型,则可以在线对单片机进行调试和下载,且JTAG口直接和FET(FLASH EMULATION TOOL)的相连,不须另外的仿真工具,方便实用,而且,可以在超低功耗模式下工作,对环境和人体的辐射小,测量结果为100mw左右的功耗(电流为14mA左右),可靠性能好,加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备.我们相信MSP430单片机将会在工程技术应用中得以广泛应用,而且,它是通向DSP系列的桥梁,随着自动控制的高速化和低功耗化 ,MSP430系列将会得到越来越多人的喜爱.通过两过多月的毕业设计,我对MSP430有了初步了解,对内部的硬件资源和自身的汇编语法进行了实验,并开发了一个应用板,并进行了调试.鉴于时间和能力有限,没能对所有的应用一一实验.第二章 MSP430 F149语言介绍MSP430是德州公司的新产品,有独特的开发环境和自身语言,下面是我在毕业设计中对F149的开发环境熟悉中遇到的一些问题的处理和汇编语言的用法及程序中遇到的问题的体会.第一节开发环境及程序下载1.开发环境:在EW23环境下进行编程,汇编,连接,在C—SPY环境下进行调试,下载是在连接之后,调试之前,通过计算机的串口下载的.关于环境的操作,可以参考有关资料,其中可能遇到的问题及解决方法有:(1) .汇编是对源程序而言的,因此必须打开一个源文件才能汇编,而连接是对一个工程文件而言的,连接是对工程文件的所有源代码(包括多个源文件)和数据的定位,因此连接必须打开一个工程文件才能连接.(2) 连接中必须将库文件的路径改正确,且必须选定C—SPY的驱动方式,即在project中的options的xlink的include下修改(先选中)xcl的库路径为$TOOLKIT_DIR$\icc430\msp430F149A.xcl ,选择C—SPY 的驱动drive为simulator或FLASH EMULATION TOOL ,当没连接430片子时可以选simulator,当连接430片子时,选 FLASH EMULATION TOOL进行在线下载调试.(3) 由于430支持汇编语言和C语言两种语言,因此可以在一个工程文件中同时用两种语言,但建议用汇编语言,因为便于在调试时寻找逻辑和指令的联系及地址的定位正确与否.(4) 在在线的C—SPY 的调试中,单步需要将Control的Reatime前的勾取消才能进行单步测试.(5) 在线调试时,不能将58 管脚(复位/非屏蔽中断)外部变高,否则,会强制退出调试环境.2.程序下载原理及脱机工作原理:程序的在线调试是通过JATG口和F149片子的 RST、TCK、TDI、TDO、TMS引脚按一定的时序串行的传递程序代码和数据的,调试指令的命令传递都是通过这些数据线和控制线传递的,下载时序可参见资料1,其中的地址0FFFEH为复位向量的地址,它是程序遇到非屏蔽中断和程序启动的首要地址,地址中存放的是程序段开始的首地址,因此必须把程序段的首地址标号表示在中断向量中或程序伪指令的开头位置,否则,连接时将会出错,具体的表示方法在下一节中表示.程序的下载和在线调试的电源是通过计算机在JATG提供的,不须另外给加电源.脱机工作时,是将F149的电源线上电,此时的复位时序同下载后在线复位的时序一样,只是时钟是通过F149内部时钟DCO提供的,上电后,程序将复位向量0FFFE中的地址装入PC,PC开始从程序段的首地址开始执行.脱机工作启动不需要任何操作,只需上电即可,电压要大于1.8v,一般取3v左右,另外,在脱机工作时,可以给RST端口加一个低电平脉冲以复位从程序开始重新执行.第二节指令介绍MSP430有自身语言,汇编语言也不同于其他类型的单片机,伪指令也是变幻魔测,但又很重要,下面是我毕业设计的一些尝试、出问题的地方.也可参见资料。
MSP430单片机的应用实例阚世俊B首先来了解什么是单片机,什么是msp30 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机了解计算机原理与结构的最佳选择。
可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
不过,这种电脑,通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成(如图1所示)。
还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋予各种机械的单片机(亦称微控制器,如图2所示)。
顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。
因为它体积小,通常都藏在被控机械的“肚子”里。
它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。
现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。
究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗的混合信号处理器(Mixed Signal Processor)。
单片机芯片配以必要的外部器件,一般包括电源供入及电源开关、复位电路、晶振、输入输出电路等就能构成最小系统。
MSP430F149芯片是美国TI公司推出的超低功耗微处理器,有60KB+256字节FLASH,2KBRAM,包括基本时钟模块、看门狗定时器、带3个捕获/比较寄存器和PWM 输出的16位定时器、带7个捕获/比较寄存器和PWM输出的16位定时器、2个具有中断功能的8位并行端口、4个8位并行端口、模拟比较器、12位A/D转换器、2个串行通信接口等模块。
MSP430F149芯片具有如下特点:1)功耗低:电压2.2V、时钟频率1MHz时,活动模式为200μA;关闭模式时仅为0.1A,且具有5种节能工作方式。
2)高效16位RISC-CPU,27条指令,8MHz时钟频率时,指令周期时间为125ns,绝大多数指令在一个时钟周期完成;32kHz时钟频率时,16位MSP430单片机的执行速度高于典型的8位单片机20MHz时钟频率时的执行速度。
3)低电压供电、宽工作电压范围:1.8~3.6V;4)灵活的时钟系统:两个外部时钟和一个内部时钟;5)低时钟频率可实现高速通信;6)具有串行在线编程能力;7)强大的中断功能;8)唤醒时间短,从低功耗模式下唤醒仅需6μs;9)ESD保护,抗干扰力强;10)运行环境温度范围为-40~+85℃,适合于工业环境。
MSP430系列单片机的所有外围模块的控制都是通过特殊寄存器来实现的,故其程序的编写相对简单。
编程开发时通过专用的编程器,可以选择汇编或C语言编程,IAR公司为MSP430系列的单片机开发了专用的C430语言,可以通过WORKBENCH和C-SPY直接编译调试,使用灵活简单。
1 系统总体设计最小系统是由保证处理器可靠工作所必须的基本电路组成的,主要包括电源电路、时钟电路、复位电路、通信接口电路、数据存储电路组成,其硬件框图如图1所示。
查看原图(大图)1.1 电源电路本系统需要使用+5V和+3.3V的直流稳压电源,其中MSP430Fl49及部分外围器件需要+3.3V电源,另外部分需要+5V电源。
94年“简易数控直流电源”设计要求一、设计任务设计出有一定输出电压范围和功能的数控电源。
其原理示意图如下:二、设计要求1.基本要求(1)输出电压:范围0~+9.9V,步进0.1V,纹波不大于10mV;(2)输出电流:500mA;(3)输出电压值由数码管显示;(4)由“+”、“-”两键分别控制输出电压步进增减;(5)为实现上述几部件工作,自制一稳压直流电源,输出±15V,+5V。
2.发挥部分(1)输出电压可预置在0~9.9V之间的任意一个值;(2)用自动扫描代替人工按键,实现输出电压变化(步进0.1V不变);(3)扩展输出电压种类(比如三角波等)。
三、评分意见项目得分方案设计与论证、理论计算与分析、电路图30基本要求实际完成情况50总结报告20完成第一项5完成第二项15发挥部分完成第三项20且可以方便实现人性化很强的人机界面(键盘输入和液晶输出)。
比之与其它方案,方案三在实现设计要求上有着很大的优越性:不需要外接D/A转换芯片;不需要复杂的参考电压产生电路;不需要外接总线驱动就可以方便实现键盘和液晶显示;MSP430F149内部有足够的存储空间,足以存储程序和显示所需要的汉字字模,不需要扩展存储;MSP430F149有多种低功耗工作模式,通过合理的程序控制可以方便实现低功耗运行。
MSP430F149内部有16位的硬件乘法器,可以快速实现乘法运算;MSP430F149使用的指令简单,只有27条指令,指令周期短,数值计算能力强大。
鉴于以上种种优点,我们最终选择了MSP430F149单片机作为我们的控制中心,并且采用了第三种方案来实现设计的要求。
二.工作原理及电路设计1.工作原理PWM ( pulse-width modulated)脉宽调制信号是一种具有固定周期T,占空比可调的数字信号(如图所示)。
如果PWM 信号的占空比随时间变化,那么通过滤波之后的输出信号将是幅度变化的模拟信号。
因此通过控制PWM 信号的占空比就可以产生不同的模拟信号。
MSP430电路图集锦:创新设计思维2014年11月12日10:11 来源:电子发烧友网整合作者:Dick 我要评论(0)标签:TI(566)MSP430(499)MSP430系列单片机是美国德州仪器开始推向市场的一种16位超低功耗、具有精简指令集的混合信号处理器。
称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,以提供“单片机”解决方案。
该系列单片机多应用于需要电池供电的便携式仪器仪表中。
下面一起来看看基于MSP430的设计电路图集锦。
1、采用MSP430单片机的可穿戴式血糖仪电路介绍了一种便携式血糖仪的设计。
该设计主要从低功耗及精确性的角度出发,以MSP430系列单片机为核心,葡萄糖氧化酶电极为测试传感器,较快地测试出血糖浓度。
此外,所设计的血糖仪还具有储存功能,有助于用户查看血糖浓度历史值和变化趋势。
血糖测试电路:在酶电极两端滴入血液后,会产生自由电子。
由于电极两端存在激励电压,就会有定向电流流过电极。
该激励电压是由ADC模块提供的1.5V稳压通过电阻分压而产生的,大约在300mV左右,它能产生μA级别的定向电流。
由于A/D转换模块测量的是电压,所以需要将该定向电流转换成电压,并且进行一定的放大。
本系统采用图2所示的电路来实现电流到电压的转换和放大。
运算放大器LM358的反相端连接血糖试纸上的酶电极,当有血液滴入时,该电极与地之间为等效电阻Rx,流过该电阻的电流正比于血液中的血糖浓度值。
MSP430的A/D模块输出1.5V的稳压通过R2 和R3分压,产生300mV的激励电压,该电压通过运放的正端加到电极两端。
R4起到反馈放大的作用,它将运放的输出范围限定在A/D模块的转换范围内。
在PCB板布线时,由于运放输出和MSP430的ADC模块输入I/O口之间的走线比较长,为了确保测量值的准确,需要对测试电压进行滤波,C21就是用来起滤波作用的,以减少走线过长所引入的外来干扰对血糖测试的影响。
基于MSP430F149电子秤设计附录1 电路原理图附录2 程序/***********************************************************程序功能:在12864液晶上显示重量---------------------------------------------------------------------------------------------------------------测试说明:观察液晶显示***********************************************************/#include <msp430x14x.h>typedef unsigned char uchar;typedef unsigned int uint;extern const unsigned char shuzi_table[];float e;/***************全局变量***************/uchar key_Pressed; //按键是否被按下:1--是,0--否uchar key_val; //存放键值uchar key_Flag; //按键是否已放开:1--是,0--否/*设置键盘逻辑键值与程序计算键值的映射*/uchar key_Map[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};#define LCD_DataIn P4DIR=0x00 //数据口方向设置为输入#define LCD_DataOut P4DIR=0xff //数据口方向设置为输出#define LCD2MCU_Data P4IN#define MCU2LCD_Data P4OUT#define LCD_CMDOut P3DIR|=0x07 //P3口的低三位设置为输出#define LCD_RS_H P3OUT|=BIT0 //P3.0#define LCD_RS_L P3OUT&=~BIT0 //P3.0#define LCD_RW_H P3OUT|=BIT1 //P3.1#define LCD_RW_L P3OUT&=~BIT1 //P3.1#define LCD_EN_H P3OUT|=BIT2 //P3.2#define LCD_EN_L P3OUT&=~BIT2 //P3.2/*******************************************写入内容待显示内容********************************************/const uchar hang1[] = {"小小苏电子称系统"};const uchar hang2[] = {"净重: g "};const uchar hang3[] = {"总价: 元"};const uchar hang4[] = {"单价/Kg"};const uchar hang5[] = {"萝卜"};const uchar hang6[] = {"豆角"};const uchar hang7[] = {"土豆"};const uchar hang8[] = {"白菜"};const uchar hang9[] = {"苹果"};const uchar hang10[] = {"香蕉"};const uchar hang11[] = {"橘子"};const uchar hang12[] = {"桃子"};const uchar hang13[] = {"猪肉"};const uchar hang14[] = {"羊肉"};const uchar hang15[] = {"牛肉"};const uchar hang16[] = {"鸡肉"};const uchar hang17[] = {"山药"};const uchar hang18[] = {"生姜"};const uchar hang19[] = {"木耳"};/*******************************************函数名称:Init_Keypad功能:初始化扫描键盘的IO端口参数:无返回值:无********************************************/void Init_Keypad(void){P1DIR = 0xf0; //P1.0~P1.3设置为输入状态, P1.4~P1.7设置为输出状态P1OUT |= 0xf0; // P1.4~P1.7输出低电平key_Flag = 0;key_Pressed = 0;key_val = 5;}/*******************************************函数名称:Check_Key功能:扫描键盘的IO端口,获得键值参数:无返回值:无********************************************/void Check_Key(void){uchar row ,col,tmp1,tmp2;tmp1 = 0x80;for(row = 0;row < 4;row++) //行扫描{P1OUT = 0xf0; //P1.4~P1.7输出全0P1OUT -= tmp1; //P1.4~p1.7输出四位中有一个为0tmp1 >>=1;if ((P1IN & 0x0f) < 0x0f) //是否P1IN的P1.0~P1.3中有一位为0{ tmp2 = 0x01; // tmp2用于检测出那一位为0for(col = 0;col < 4;col++) // 列检测{ if((P1IN & tmp2) == 0x00) // 是否是该列,等于0为是{ key_val = key_Map[row * 4 + col]; // 获取键值return; // 退出循环}tmp2 <<= 1; // tmp2右移1位}}}//return (key_val);}/*******************************************函数名称:delay功能:延时约15ms,完成消抖功能参数:无返回值:无********************************************/void delay(){uint tmp;for(tmp = 12000;tmp > 0;tmp--);}/*******************************************函数名称:Key_Event功能:检测按键,并获取键值参数:无返回值:无********************************************/void Key_Event(void){uchar tmp;P1OUT &= 0x00; // 设置P1高四位全为0,等待按键输入tmp = P1IN; // 获取p1INif ((key_Pressed == 0x00)&&((tmp & 0x0f) < 0x0f)) //如果有键按下{key_Pressed = 1; // 如果有按键按下,设置key_Pressed标识delay(); //消除抖动Check_Key(); // 调用check_Key(),获取键值}else if((key_Pressed == 1)&&((tmp & 0x0f) == 0x0f)) //如果按键已经释放{key_Pressed = 0; // 清除key_Pressed标识key_Flag = 1; // 设置key_Flag标识}else{_NOP();}}/*******************************************函数名称:Delay_1ms功能:延时约1ms的时间参数:无返回值:无********************************************/void Delay_1ms(void){uchar i;for(i = 150;i > 0;i--) _NOP();}/******************************************* 函数名称:Delay_Nms功能:延时N个1ms的时间参数:n--延时长度返回值:无********************************************/ void Delay_Nms(uint n){uint i;for(i = n;i > 0;i--) Delay_1ms();}/******************************************* 函数名称:Write_Cmd功能:向液晶中写控制命令参数:cmd--控制命令返回值:无********************************************/ void Write_Cmd(uchar cmd){uchar lcdtemp = 0;LCD_RS_L;LCD_RW_H;LCD_DataIn;do //判忙{ LCD_EN_H;_NOP();lcdtemp = LCD2MCU_Data;LCD_EN_L;}while(lcdtemp & 0x80);LCD_DataOut;LCD_RW_L;MCU2LCD_Data = cmd;LCD_EN_H;_NOP();LCD_EN_L;}/******************************************* 函数名称:Write_Data功能:向液晶中写显示数据参数:dat--显示数据返回值:无********************************************/ void Write_Data(uchar dat){uchar lcdtemp = 0;LCD_RS_L;LCD_RW_H;LCD_DataIn;do //判忙{LCD_EN_H;_NOP();lcdtemp = LCD2MCU_Data;LCD_EN_L;}while(lcdtemp & 0x80);LCD_DataOut;LCD_RS_H;LCD_RW_L;MCU2LCD_Data = dat;LCD_EN_H;_NOP();LCD_EN_L;}/******************************************* 函数名称:Ini_Lcd功能:初始化液晶模块参数:无返回值:无********************************************/ void Ini_Lcd(void){LCD_CMDOut; //液晶控制端口设置为输出Delay_Nms(500);Write_Cmd(0x30); //基本指令集Delay_1ms();Write_Cmd(0x02); // 地址归位Delay_1ms();Write_Cmd(0x0c); //整体显示打开,游标关闭Delay_1ms();Write_Cmd(0x01); //清除显示Delay_1ms();Write_Cmd(0x06); //游标右移Delay_1ms();Write_Cmd(0x80); //设定显示的起始地址}/******************************************* 函数名称:Disp_HZ功能:控制液晶显示汉字参数:addr--显示位置的首地址pt--指向显示数据的指针num--显示字符个数返回值:无********************************************/ void Disp_HZ(uchar addr,const uchar * pt,uchar num) {uchar i;Write_Cmd(addr);for(i = 0;i < num;i++)Write_Data(*(pt++));}/******************************************* 函数名称:Disp_WEI功能:控制液晶显示汉字参数:addr--显示位置的首地址pt--指向显示数据的指针num--显示字符个数返回值:无********************************************/ void Disp_WEI(uchar addr,int c,char num){uchar i;Write_Cmd(addr);for(i = 0;i < num;i++)Write_Data(c);}/***************************主函数*************************/void main( void ){ /*下面六行程序关闭所有的IO口*/P1DIR = 0XFF;P1OUT = 0XFF;P2DIR = 0XFF;P2OUT = 0XFF;P3DIR = 0XFF;P3OUT = 0XFF;P4DIR = 0XFF;P4OUT = 0XFF;P5DIR = 0XFF;P5OUT = 0XFF;P6DIR = 0XFF;P6OUT = 0XFF;WDTCTL = WDTPW + WDTHOLD; //关狗P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换Ini_Lcd(); //初始化液晶ADC12CTL0=SHT0_2+ADC12ON; //设置采样时间+ADC12内核开ADC12CTL1=SHP; //使用采样定时器ADC12IE=0X01; //开启中断ADC12CTL0 |=ENC; //转换使能P6SEL |=0X01;Disp_HZ(0x80,hang1,16);Disp_HZ(0x90,hang2,16);Disp_HZ(0x88,hang3,16);Disp_HZ(0x98,hang4,16);Init_Keypad();_EINT();while(1){ADC12CTL0 |=ADC12SC; //启动转换//while ((ADC12IFG & 0x01)==0);_NOP();Key_Event();if(key_Flag==1){key_Flag=0;switch(key_val){case 0:P2OUT=0XFE;Disp_HZ(0x9a,hang5,4);Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(2+0x30);Write_Data(0x2e);Write_Data(3+0x30);e=2.3; break;case 1:P2OUT=0XFD;Disp_HZ(0x9a,hang6,4);Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(6+0x30);Write_Data(0x2e);Write_Data(9+0x30);e=6.9;break;case 2:P2OUT=0XFB;Disp_HZ(0x9a,hang7,4);Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(2+0x30);Write_Data(0x2e);Write_Data(0+0x30);e=2.0;break;case 3:P2OUT=0XF7;Disp_HZ(0x9a,hang8,4);Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(1+0x30);Write_Data(0x2e);Write_Data(5+0x30);e=1.5;break;case 4:P2OUT=0XEF;Disp_HZ(0x9a,hang9,4);Write_Cmd(0x9c);Write_Data(1+0x30);Write_Data(4+0x30);Write_Data(0x2e);Write_Data(0+0x30);e=14.0;break;case 5:P2OUT=0XDF;Disp_HZ(0x9a,hang10,4);Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(9+0x30);Write_Data(0x2e);Write_Data(0+0x30);e=9.0;break;case 6:P2OUT=0XBF;Disp_HZ(0x9a,hang11,4);Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(6+0x30); Write_Data(0x2e);Write_Data(0+0x30);e=6.0;break;case 7:P2OUT=0X7F;Disp_HZ(0x9a,hang12,4);Write_Cmd(0x9c);Write_Data(2+0x30);Write_Data(0+0x30); Write_Data(0x2e);Write_Data(0+0x30);e=20.0;break;case 8:P2OUT =~0XFE;Disp_HZ(0x9a,hang13,4);Write_Cmd(0x9c);Write_Data(3+0x30);Write_Data(5+0x30); Write_Data(0x2e);Write_Data(0+0x30);e=30.0;break;case 9:P2OUT =~0XFD;Disp_HZ(0x9a,hang14,4);Write_Cmd(0x9c);Write_Data(8+0x30);Write_Data(0+0x30); Write_Data(0x2e);Write_Data(0+0x30);e=80.0;break;case 10:P2OUT =~0XFB;Disp_HZ(0x9a,hang15,4);Write_Cmd(0x9c);Write_Data(7+0x30);Write_Data(0+0x30); Write_Data(0x2e);Write_Data(0+0x30);e=70.0;break;case 11:P2OUT =~0XF7;Disp_HZ(0x9a,hang16,4);Write_Cmd(0x9c);Write_Data(1+0x30);Write_Data(5+0x30); Write_Data(0x2e);Write_Data(0+0x30);e=15.0;break;case 12:P2OUT =~0XEF;Disp_HZ(0x9a,hang17,4);Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(3+0x30); Write_Data(0x2e);Write_Data(5+0x30);e=3.5;break;case 13:P2OUT =~0XDF;Disp_HZ(0x9a,hang18,4);Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(4+0x30);Write_Data(0x2e);Write_Data(5+0x30);e=4.5;break;case 14:P2OUT =~0XBF;Disp_HZ(0x9a,hang19,4);Write_Cmd(0x9c);Write_Data(4+0x30);Write_Data(0+0x30);Write_Data(0x2e);Write_Data(5+0x30);e=40.0;break;case 15:P2OUT =~0X7F;//Disp_HZ(0x9a,hang21,4);Write_Cmd(0x9a);Write_Data(0x20);Write_Data(0x20);Write_Data(0x20);Write_Data(0x20);Write_Data(0+0x30);Write_Data(0+0x30);Write_Data(0x2e);Write_Data(0+0x30);e=0;break;default:break ;}}}}#pragma vector=ADC_VECTOR__interrupt void ADC12_ISR(void){ int a,b,c,d,temp;long int g,y;temp=ADC12MEM0;temp=temp/100;g=121*temp;y=g*e;if(g>400){a=g/1000;b=g%1000/100;c=g%1000%100/10;d=g%1000%100%10;}else{a=b=c=d=0;y=0;}Write_Cmd(0x93);Write_Data(a+0x30);Write_Data(b+0x30);Write_Data(c+0x30);Write_Data(d+0x30);Delay_Nms(200);Write_Cmd(0x8b);Write_Data(y/100000+0x30);Write_Data(y%100000/10000+0x30);Write_Data(y%100000%10000/1000+0x30);Write_Data(0x2e);Write_Data(y%100000%10000%1000/100+0x30);Write_Data(y%100000%10000%1000%100/10+0x30);_BIC_SR_IRQ(CPUOFF);}。
– 28 – 2012年第11卷第1期现代建设 Modern Construction0 引言随着现代电子技术和计算机技术的飞速发展,单片机技术已经渗透到人类生活的各个方面,在自动化装置、智能化仪器仪表、过程控制和家用电器等许多领域得到日益广泛的应用, 单片机家族也越来越庞大,品种越来越多,且在技术上各有特色, 美国德州仪器公司(TI公司)新推出的MSP430F149单片机功耗低, 功能强大, 为广大硬件设计师所青睐。
单片机芯片配以必要的外部器件,一般包括电源供入及电源开关、复位电路、晶振、输入输出电路等就能构成最小系统,结构简单。
MSP430F149芯片有60KB+256字节FLASH,2KBRAM,包括基本时钟模块、看门狗定时器、带3个捕获/比较寄存器和PWM输出的16位定时器、带7个捕获/比较寄存器和PWM输出的16位定时器、2个具有中断功能的8位并行端口、4个8位并行端口、模拟比较器、12位A/D转换器、2个串行通信接口等模块。
MSP430F149芯片具有如下特点:(1)功耗低:电压2.2V、时钟频率1MHz时,活动模式芯片电流为200μA,关闭模式时电流仅为0.1A;(2)高效16位RISC-CPU,27条指令,8MHz时钟频率时,指令周期时间为125ns,绝大多数指令在一个时钟周期完成;(3)低电压供电、宽工作电压范围:1.8~3.6V;(4)灵活的时钟系统:两个外部时钟和一个内部时钟;(5)低时钟频率可实现高速通信;(6)具有串行在线编程能力;(7)强大的中断功能;(8)唤醒时间短,从低功耗模式下唤醒仅需6μs;(9)ESD保护,抗干扰力强;(10)运行环境温度范围为-40~+85℃,适合于工业环境。
MSP430系列单片机的所有外围模块的控制都是通过特殊寄存器来实现的,故其程序的编写相对简单。
编程开发时通过专用的编程器,可以选择汇编或C语言编程,IAR公司为MSP430系列的单片机开发了专用的C430语言,可以通过WORKBENCH和C-SPY直接编译调试,使用灵活简单。
MSP430单片机的开发及应用设计人:陈小忠西安邮电学院电子信息工程系电子0002班西安邮电学院63# 7100612003年7月目录第一章概述第二章MSP430 F149语言介绍第一节开发环境及程序下载第二节语言介绍第三章MSP430F149 资源的应用介绍及开发第一节中断介绍及存储器段介绍第二节硬件乘法器第三节P口第四节定时器及数模转换第五节时钟模块第六节USART通信模块第七节比较器第八节模数转换第四章MSP430F149开发板的介绍及测试第一节模数转换模块第二节传感器模块第三节外存和实时时钟模块第四节485和232模块第五节电源管理模块及晶振模块第六节PWM波形滤波第一章概述MSP430是德州公司新开发的一类具有16位总线的带FLASH 的单片机,由于其性价比和集成度高,受到广大技术开发人员的青睐.它采用16位的总线,外设和内存统一编址,寻址范围可达64K,还可以外扩展存储器.具有统一的中断管理,具有丰富的片上外围模块,片内有精密硬件乘法器、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART 通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M 的时钟.由于为FLASH 型,则可以在线对单片机进行调试和下载,且JTAG口直接和FET(FLASH EMULATION TOOL)的相连,不须另外的仿真工具,方便实用,而且,可以在超低功耗模式下工作,对环境和人体的辐射小,测量结果为100mw左右的功耗(电流为14mA左右),可靠性能好,加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备.我们相信MSP430单片机将会在工程技术应用中得以广泛应用,而且,它是通向DSP系列的桥梁,随着自动控制的高速化和低功耗化 ,MSP430系列将会得到越来越多人的喜爱.通过两过多月的毕业设计,我对MSP430有了初步了解,对内部的硬件资源和自身的汇编语法进行了实验,并开发了一个应用板,并进行了调试.鉴于时间和能力有限,没能对所有的应用一一实验.第二章 MSP430 F149语言介绍MSP430是德州公司的新产品,有独特的开发环境和自身语言,下面是我在毕业设计中对F149的开发环境熟悉中遇到的一些问题的处理和汇编语言的用法及程序中遇到的问题的体会.第一节开发环境及程序下载1.开发环境:在EW23环境下进行编程,汇编,连接,在C—SPY环境下进行调试,下载是在连接之后,调试之前,通过计算机的串口下载的.关于环境的操作,可以参考有关资料,其中可能遇到的问题及解决方法有:(1) .汇编是对源程序而言的,因此必须打开一个源文件才能汇编,而连接是对一个工程文件而言的,连接是对工程文件的所有源代码(包括多个源文件)和数据的定位,因此连接必须打开一个工程文件才能连接.(2) 连接中必须将库文件的路径改正确,且必须选定C—SPY的驱动方式,即在project中的options的xlink的include下修改(先选中)xcl的库路径为$TOOLKIT_DIR$\icc430\msp430F149A.xcl ,选择C—SPY 的驱动drive为simulator或FLASH EMULATION TOOL ,当没连接430片子时可以选simulator,当连接430片子时,选 FLASH EMULATION TOOL进行在线下载调试.(3) 由于430支持汇编语言和C语言两种语言,因此可以在一个工程文件中同时用两种语言,但建议用汇编语言,因为便于在调试时寻找逻辑和指令的联系及地址的定位正确与否.(4) 在在线的C—SPY 的调试中,单步需要将Control的Reatime前的勾取消才能进行单步测试.(5) 在线调试时,不能将58 管脚(复位/非屏蔽中断)外部变高,否则,会强制退出调试环境.2.程序下载原理及脱机工作原理:程序的在线调试是通过JATG口和F149片子的 RST、TCK、TDI、TDO、TMS引脚按一定的时序串行的传递程序代码和数据的,调试指令的命令传递都是通过这些数据线和控制线传递的,下载时序可参见资料1,其中的地址0FFFEH为复位向量的地址,它是程序遇到非屏蔽中断和程序启动的首要地址,地址中存放的是程序段开始的首地址,因此必须把程序段的首地址标号表示在中断向量中或程序伪指令的开头位置,否则,连接时将会出错,具体的表示方法在下一节中表示.程序的下载和在线调试的电源是通过计算机在JATG提供的,不须另外给加电源.脱机工作时,是将F149的电源线上电,此时的复位时序同下载后在线复位的时序一样,只是时钟是通过F149内部时钟DCO提供的,上电后,程序将复位向量0FFFE中的地址装入PC,PC开始从程序段的首地址开始执行.脱机工作启动不需要任何操作,只需上电即可,电压要大于1.8v,一般取3v左右,另外,在脱机工作时,可以给RST端口加一个低电平脉冲以复位从程序开始重新执行.第二节指令介绍MSP430有自身语言,汇编语言也不同于其他类型的单片机,伪指令也是变幻魔测,但又很重要,下面是我毕业设计的一些尝试、出问题的地方.也可参见资料。