msp430g2553呼吸灯l里面的例程在断开时为什么运行不了

Msp430 技 术 论 坛 精 粹
一MSP430内部原理与应用
1msp430 x11x1如果要做串口通讯怎么办 答用TIMER-A
来做ti的例程里有例子
2我想用MSP430开发一款仪表需要用到大容量非易失性
以上不知各位有没
有好主意串行
RAM太慢满足不了要求答请参考
/product/ti/430/download/msp430book.pdf第80页
cpu中提供的工作寄存器Rn不够用
那我该则么办呢希望指导一下对ram的理解有点疑问在不少程序中看到对堆戋的初始化是这样的mov #300h, sp是否说明200h--300h分配给堆戋那余下的呢
答430所有的flash型的ram起始地址都是200h不同型号结束地址不同堆栈指针sp初始化地址一般是
ram顶依次向下使用数据一般起始是200h,向上使用
的ram有2k200h-a00hsp
初始化为a00h使用要保证堆栈顶和普通数据不冲突
我最近在设计一个无线监测系统中采用单板双CPU方案通过光耦测量70多路28V数字量及模拟量信号无输入信号时光耦输出2V有输入信号时光耦输出0.25V左右系统平时工作都挺正常
就是发现在大量输入信号发生改变时常常死机而此时往往
CPU正在发射数据加了各种看门狗效果都不是很理想
想请教各位高手应该如何处理
答附MCLK7.3728M,ACLK:32768Hz,Bps:1200
有没有中断嵌套呢有这种可能中断中开了系统平时正常工作大量信号发生时死机
中断允许有大量数据要处理可能一次中断没完成又来一个如此不断的嵌套下去ram区可能会被用完
保存pc和sr
能就乱了 而sp还会变化到了200h以下就是SFR了如果被修改程序可
的运行速度如何和传统的51比呢 不同指令所耗费
答430的时钟速度可到8mhz极限
10mhz一个机器周期=1
个时钟周期
的机器周期不同
430 部分RAM在系统进入异常复位时其内容如何才能不被清除谢谢 在users guide上有表可查
答在XXXX.XCL文件中定义:-Z(DATA)NO-INIT=0200-02FF在源文件中这样定义变量: no-init int a,b,c;即可不过,要将NO-INIT段与UDATA0,IDATA0,ECSTR段分开,不然就有重叠
全局变量的最高地址是021A现在再加一全局变 的地址空间,其他变量可能定义到了NO-INIT段 7我的MSP430F135
的SP地址是02DC
430的堆栈底一般定义在ram区的最高地址
杭州利尔达单片机技术有限公司
0 量程序就不正常我想是堆栈溢出我想修改堆栈大小不知怎么修改使用的时候向低地址延伸c语言中sp的首址都是定义好的您只需要在选择.xcl文件的时候选择msp430f135c.xcl
Msp430 技 术 论 坛 精 粹
8我让定时器(A或B)工作在输出PWM方式, 那 CCRx 还能产生中断吗? 产生中断时影响定时器继续计数吗??定时器工作在 PWM方式, 如果我让 CCR0 与 CCRx的相等, 那么 PWM 输出将会是什么状态? 会发生竞争吗??
答能产生中断,也不会影响定时器继续计数输出要根据你选择的模式
9请问ADC12转换一次需要的时间是多少
答13个ADC12CLK周期
10假设定时器以增计数方式, 工作在输出模式6, 不允许TAIE, 当CCR0计数到0时, TAIFG会置位吗? 当CCR0继续计数时, TAIFG会自动复位吗?? TAIFG是否一定要手动复位?? 答1:TAIFG会置位2:不会自动复位3:读TAIV
向量中相应的内容时
11430能用 uC/OS-II 实时操作系统吗
怎么用或者说哪里能找到资料
答在www.上可以找到源代码
12我使用 P2 口, 将高8位设为输出, 低8位设为输入, 这样我在读 P2IN 时, 高8位会是什么状态呢?
答您可以看一下i/o
部分的图示
输出态时输入PxINx没有禁止和输出相连读入的就
是输出的值
输入态时输出被禁止
13在 MSP430 中, 我将 A/D 设置成单次多通道序列转换方式, 如果在 A/D 正在进行转换时, 我将 ENC 置0 关闭转换, 等一会再 将 ENC 置1 , 请问这时 A/D 是从刚才停止的地方继续转换呢? 还是要重新启动 ADC12SC 才能开始一次新的转换?
答序列转换时如果转换过程中enc位由1变为0当前的序列转换仍正常完成转换结果正常之后如果enc置为1并且ADC12SC出现上升沿
就开始一次新的转换
14我刚接触msp430,对msp430
仿真及在线编程不懂我究竟可不可以用P440
仿真及如何实现仿真那位老师能告诉一声将如何去昨我以前是用MCS-51
他们有何区别
谢谢 答可以430所有的flash型的仿真器fet都是通用的连接方法可以看这个文档的15页
15片内FLASH的擦写寿命有多少次
答数据手册给了这个参数典型值10万次最小值1万次
你可以查阅对应型号的数据手册
16在Basic Clock Module
ACLK Divider四种值为DIVA_0到DIVA_3分别表示对ACLK的1
248分频可是在例程fetp140_lmp3.c里包含了同样的头文件却用DIVA1表示对ACLK的4
不知道是为什么
的配置我用149在default下DCOCLOCK
的输出是多少呢
答头文件定义DIVA1=0X20BCSCTL1 |= DIVA1使DIVA=2即份频系数4
默认的DCOCTL=0X60,BCSCTL1=0X84,BCSCTL2=00,数据手册上给定了这时的频
率VCC=3V时约
杭州利尔达单片机技术有限公司
Msp430 技 术 论 坛 精 粹
17msp430F149的TIMEA
可不可以同时用做定时和模拟串口
答串口需要2
个捕获两个比较寄存器 18请问msp430F412采用4MUX时,R03-R33在硬件中怎么接,接多大的电阻,这些电阻要接电源和地吗?
答R33-1M-R23-1M-R23-1M-R03-GNDR33不用接VCC可以通过设置寄存器控制LCD驱动的开关
19我的程序一进入到timer_a
答timer_a1
是多源中断
0 20连光盘中自带的例子采出来都是有很大的波动
答外接的参考电压不要超过vcc请问这是怎么回事 加稳压电容减小其波动电路的布板干扰对它影响很大就退不出来了
这可能是什么原因 中断标志不会自动清0必须访问TAIV或者直接将相应的中断标志另一个可以用来定时定时器用连续增计数模式互 相之间没有冲突
定时中断和收发中断如果可能同时发生
可以用允许中断嵌套来避免冲突最好不要直接在工具的实验板上做这样的精度不是很好例程都是用的内部参考电压浮动比较大精确测量要用外部电源仿真器上的电源是计算机并口提供的
计算机采用的是开关电源因此有很大的干扰
建议用电池供电试一试
21我看了 一份中文的资料介绍说可以达到65M,94M,可是手册上面的设计最多可以达到8M我做数据采集速度可能不够请问MSP430F149的CPU
频率最多可以达到多少答手册规定是8M,你可以超频,具体能超多少,你试一试就可以了.
22请问MSP430F149中SPI
接口最高可传送的速率是多少比特每秒
答SPI最高可以做到2MBPSUART可以到1MBPS
23参考电平Vref+(内部)即是内部参考电平ADC12MEMx确定
那该引脚又有什么作用答可以由它测量VREF+的具体大小
无其他意义
转换频率的上下限是多少不是可能不稳
如果是运行中断程如果选用内部时钟有没有可能对转换过程产生影响时钟是
望高手指教 望高手指教 答当Vref+外接一个5uF的电容时fADC12CLK应不超过5MHz转换时间为13个时钟周期还有采样时间为
4 * ADC12CLK * N
26请问各位F413中的FLASH可以替代EEPROM的功能吗
答FLASH基本可以代替EEPROM
的IAR软件中有例程 只是擦除操作不能一个一个字节擦除,只能一段一段擦除请教一下
看门狗中断以后是运行看门狗中断程序还是直接复位系统 那么让系统复位在c
中用什么指令答jmp到你的复位地址看门狗的入口地址和复位的入口地址所以看门够复位就是跳到
杭州利尔达单片机技术有限公司
看过本文章的还看过。。。
msp430单片机入门知识_信息与通信_工程科技_专业资料。 前沿 1、《msp......
msp430单片机经典资料_计算机硬件及网络_it计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 msp430单片机经典资料_计算机硬件及网络_it计算机_专业资料。ultra.........
msp430单片机专业网站基于模拟前端信号处理与控制技术的专业论坛、网站
微控设计网 page 6 of 21 基于模拟前端信号处理与控制技术的专业论坛、.........
msp430单片机_电子电路_工程科技_专业资料。msp430 msp430单片机结构 msp430指令系统与程序设计 msp430单片机模块 msp430系列单片机特点超低功耗强大的处理能力 高.........
各类单片机的比较与 msp430 的应用
付宇鹏 概述:本文将市面上的主要型号的单片机进行比较和分析。主要以 msp430 为核心阐述 其在电子设计竞赛中的主要.........
南京邮电大学单片机 c 语言论文 msp430 单片机的应用实例 阚世俊 b.....
msp430单片机中文选型表_计算机硬件及网络_it计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档msp430单片机中文选型表_计算机硬件及网络_it计算机_专业资料。.........
弃,变量左侧补“0” 1 msp430单片机c语言基础 赋值运算符与表达......
超低功耗 msp430 单片机之所以有超低的功耗,是因为其在降低芯片的电源电压和......
430 单片机个人总结一 时钟部分(msp430f149 单片机) 1、关于 x......
第二章 msp430单片机的内部资源_计算机硬件及网络_it计算机_专业资料。第二章 msp430单片机的内部资源 罗小刚 重庆大学 1 msp430单片机选型 ti 430有一系列.........
msp430单片机基本知识_信息与通信_工程科技_专业资料。msp430 单片机的详细介绍 很全面 很有用msp430 单片机是 ti 公司 1996 年开始推向市场的超低功耗微处理器,.........
msp430单片机最小系统_电子电路_工程科技_专业资料。第八章 msp430f249 单片机最小系统 1 msp430 单片机下载方式当单片机程序利用 iar 开发环境编译和 proteus.........
msp430单片机硬件结构及原理_信息与通信_工程科技_专业资料。详细的msp430内部的结构 第3章 msp430单片机硬件 结构及原理 1 本章内容 ? ? ? ? ? ? ? 1 .........
msp430单片机原理_电子电路_工程科技_专业资料。第 2 章 msp430 单片机原理与 c 语言基础 msp430系列超低功耗单片机有200多种型号,ti 公司用3~ 4位数字表示其.........
msp430单片机题目答案整理(大部分)_工学_高等教育_教育专区。第一章 ......
msp430单片机_电子电路_工程科技_专业资料。msp430单片机 msp430系列单片机 原理与应用 赵来定 025- msp430单片机--1 ? 参考书:
谢兴红等.........
msp430单片机_电子电路_工程科技_专业资料。msp430系列单片机 原理与应用 03 第一部分 概述 主要内容 ? 单片机概述 msp430系列单片机介绍 ? 什么是单片机单.........
电子设计暑期培训第一周实验报告——msp430g2553 单片机 msp430g2553 单片机 摘要:如今的单片机已经不再是二十年前所谓的 scm,而是从 mcu 向 soc 转型中间期的.........
如何学习 msp430 单片机 如何学习 msp430 单片机 。 下面以 ms......
■ 热门推荐MSP430G2553测试程序(串口程序,USCI模式)
  //******************************************************************************
  // HW UART(J4)!!!!!! 特别注意,板子上J4有2个跳线要竖放,设为HW UART模式
  // G2xx3 Demo - USCI_A0, 9600 UART Echo ISR, DCO SMCLK
  // Deion: Echo a received character, RX ISR used. Normal mode is LPM0.
  // USCI_A0 RX triggers TX Echo.
  // Baud rate divider with 16MHz
  // ACLK = n/a, MCLK = SMCLK = CALxxx_16MHZ = 16MHz
  // MSPG2xx3
  // -----------------
  // /|\| XIN|-
  // | | |
  // --|RST XOUT|-
  // | |
  // | P1.2/UCA0TXD|------------&
  // | | 9600 - 8N1
  // | P1.1/UCA0RXD|&------------
  // 修改http://jiwm.
  //助手,下载地址:/download/AccessPort137.zip
  // Texas Instruments Inc.
  // February 2011
  // Built with IAR Embedded Workbench Version: 5.40
  //******************************************************************************
  #include "g2553.h"
  void main(void)
  WDTCTL = WDTPW + WDTHOLD; // Stop WDT
  BCSCTL1 = CALBC1_16MHZ; // Set DCO
  DCOCTL = CALDCO_16MHZ;
  P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
  P1SEL2 = BIT1 + BIT2;
  UCA0CTL1 |= UCSSEL_2; // SMCLK
  UCA0BR0 = 0x82; // 16MHz 9600 UCA0BRX=2
  UCA0BR1 = 0x06; // 16MHz 9600
  UCA0MCTL = UCBRS2 + UCBRS1; // Modulation UCBRSx = 6
  UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
  IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
  __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enab
  // Echo back RXed character, confirm TX buffer is ready first
  #pragma vector=USCIAB0RX_VECTOR
  __interrupt void USCI0RX_ISR(void)
  while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
  UCA0TXBUF = UCA0RXBUF; // TX -& RXed character
  原文链接:
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点MSP430G2553 LunchPad口袋实验平台实验例程(附部分流程图)-电子产品世界论坛
MSP430G2553 LunchPad口袋实验平台实验例程(附部分流程图)
MSP430 LaunchPad是一款易于使用的闪存编程器和调试工具,它提供了在 MSP430 超值系列器件上进行开发所需的一切内容。它提供了具有集成仿真功能的 14/20 引脚 DIP 插座目标板,可通过 Spy Bi-Wire(2 线 JTAG)协议对系统内置的 MSP430 超值系列器件进行快速编程和调试。由于 MSP430 闪存的功耗极低,因此无需外部电源即可在数秒内擦除闪存并对其进行编程。LaunchPad 将 MSP430 器件与 Code Composer Studio 版本 4 或 IAR 嵌入式工作平台等集成软件环境相连接。MSP430 超值系列器件上的这些 IDE 是免费且非受限的软件。LaunchPad 支持所有采用 14 或 20 引脚 DIP 封装(TI 封装代码:N)的 MSP430G2xx 闪存器件。LaunchPad 还采用用于定制项目和应用的板载可编程 LED 和按钮!10 引脚 PCB 连接器还可用于连接 LaunchPad 和附加器件。
实验要求:
一、流水灯
控制一个灯闪烁、一个灯常亮。
二、按键控制灯
第1次按下按键,绿灯亮;
第2次按下按键,绿灯灭,红灯亮;
第3次按下按键,绿灯亮,红灯亮;
第4次按下按键,绿灯亮,红灯灭;
第5次按下按键,绿灯灭,红灯灭;
如此循环。
三、定时中断
设两个定时中断,其中一个的中断周期是另一个的4倍。
短周期的中断每产生一次,改变红灯的状态。
长周期的中断每产生一次,改变绿灯的状态。
四、PWM输出
初始状态,PWM输出占空比为学号值%,如学号是16,则输出占空比为16%,绿灯亮,红灯灭。
每按一下按键,PWM输出的占空比增加10%,
如果按键按下时,PWM输出的占空比&=100%,输出100%的占空比,绿灯灭,红灯亮。
再继续按下按键,每按一次,PWM输出的占空比减少10%,
如果按下按键时,PWM输出的占空比=&学号%,输出占空比为:学号值%,绿灯亮,红灯灭。
如此循环。
实验例程如下:
——回复可见内容——
不错,学习了。
学习了,谢谢分享。
77好厉害!学习了!
正需要这个啊,多谢分享
菜鸟学习中~~~ & 努力~~~ &奋斗~~~~~!!!
学习学习学习
匿名不能发帖!请先 [
Copyright (C) 《电子产品世界》杂志社 版权所有查看: 8859|回复: 12
硬币大小的迷你MSP430G2553最小系统有人有兴趣吗?28个IO口比LaunchPad多8个
最近在打算做MSP430G2553的最小系统,
总尺寸在25mm*25mm以内,
和硬币大小基本相同,
28个IO口,
用SWD调试和下载程序,
带3.3V稳压,复位,电源指示灯。
可以把LaunchPad比作Arduino Uno,这个比作Arduino Mini,不过尺寸比Arduino Mini更小,只有硬币大小。
有人想要吗?要的人多的话我就拿去做,初步打算参考Arduino Mini的定价。
上个图瞧瞧
{:soso_e103:} 小封装。。。。
本帖最后由 AndersonBY 于
21:24 编辑
smfox10 发表于
上个图瞧瞧
还没实际做出来的说。。。我先做十个样板出来各位有兴趣的可以再联系
mp430不是一颗芯片就能直接工作么?
迷你强 发表于
mp430不是一颗芯片就能直接工作么?
如果这样说的话atmega也是一颗芯片就能工作
msp430g2553芯片价格感觉贵了点,而且下载程序需要下载器,优点是省电
最近发现stm8s105不错,价格便宜,用串口就能下载程序,拿来DIY性价比很高,就是没有成熟的开源编译器,那几个商业IDE用着不是很爽
histamine 发表于
msp430g2553芯片价格感觉贵了点,而且下载程序需要下载器,优点是省电
最近发现stm8s105不错,价格便宜, ...
stm32的有maple可以用,类似arduino那样的,不过stm8能不能用没试过。我在想干脆改成stm32的最小系统板如何?
AndersonBY 发表于
stm32的有maple可以用,类似arduino那样的,不过stm8能不能用没试过。我在想干脆改成stm32的最小系统板 ...
maple的资料还不全,都不知道怎开始好了
本帖最后由 muggle 于
10:33 编辑
AndersonBY 发表于
如果这样说的话atmega也是一颗芯片就能工作
这样滴,就算够小的系统了吧?
参考下这个 MSP430G2231外接晶振 20F 2.7v超级电容跑了十个星期
后面回帖,发个原理图上来
(73.79 KB, 下载次数: 10)
10:33 上传
Powered by电设工作小结之——MSP430G2553学习笔记——1
把这几天的工作做一个小结:
MSP430G2553学习笔记
&&Created&on:&
&&&&&&Author:&zhang&bin
for&msp430g2553
redesigned&by&zhang
:12_08_01
一,MSP430G2553单片机的各个功能模块
&&(一),IO口模块,
&&1,我们所用的MSP430G2553有两组IO口,P1和P2。
&&2,IO口的寄存器有:方向选择寄存器PxDIR,输出寄存器PxOUT,输入寄存器PxIN,IO口内部上拉或下拉电阻使能寄存器PxREN,&IO口功能选择寄存器PxSEL和PxSEL2,IO口中断使能寄存器PxIE,中断沿选择寄存器PxIES,IO口中断标志寄存器PxIFG。
&&3,所有的IO都带有中断,其中所有的P1口公用一个中断向量,所有的P2口公用一个中断向量。所以在使用中断时,当进入中断后,还要判断到底是哪一个IO口产生的中断,判断方法可以是判断各个IO口的电平。
&&&4,中断标志PxIFG需要软件清除,也可以用软件置位,从而用软件触发一个中断。
注意:在设置PxIESx时根据PxINx有可能会引起相应的PxIFGx置位(具体的情况见用户指南),所以在初始化完IO口中断以后,正式使用IO中断前要先将对应的PxIFGx清零。程序如下:
void&IO_interrupt_init()&&&&&//IO中断初始化函数
&&P1REN&|=&BIT4+BIT5+BIT6+BIT7;&&&&&//&pullup&内部上拉电阻使能
&&//使用中断时,使能内部的上拉电阻这样当该脚悬空是,电平不会跳变,防止悬空时电平跳变不停的触发中断
&&P1OUT&=&BIT4+BIT5+BIT6+BIT7;&&&//&当引脚上的上拉或下拉电阻使能时,PxOUT选择是上拉还是下来
&&&&&&&&&&//0:下拉,1:上拉
&&P1IE&|=&BIT4+BIT5+BIT6+BIT7;&&&&&&&//&interrupt&enabled&P13中断使能
&&P1IES&|=&BIT4+BIT5+BIT6+BIT7;&&&&&&&&&&//&Hi/lo&edge&&下降沿中断
&&//P1IES&&=&~BIT3;&&&&&&&&&&&&&&&&&&&&&&&&&//上升沿触发中断
&&P1IFG&&=&~(BIT4+BIT5+BIT6+BIT7);&&&&&&&&&//中断标志位清零
5,PxOUT:如果引脚选择了内部的上拉或下拉电阻使能,则PxOUT设定电阻是上拉还是下拉,0:下拉,1:上拉
6,当IO口不用时,最好不要设为输入,且为浮动状态(这是IO口的默认状态),因为当输入为浮动时,输入电压有可能会在VIL和VIH之间,这样会产生击穿电流。所以不用的IO口可以设为输出状态,或设为输入状态但通过外围电路接至VCC或GND,或接一个上拉/下拉电阻。
7,当使用msp430g2553的IO口时要注意,因为g2553的IO口寄存器的操作,不像51,它不能单独针对某一位进行操作,必须对整个寄存器进行操作。所以就不像51,g2553不可以定义bit型的数据。所以在使用msp的IO口时要注意对需要位的操作,而不要影响其他无关的位,可以&用&|&&&&&^等按位操作的符号。在使用IO都控制其他外围模块时也要注意要使用的IO口的定义,可以用如下的定义方法:
#define&CLR_RS&P2OUT&=~BIT0;&&&&//RS&=&P2.0
#define&SET_RS&P2OUT|=BIT0;
#define&CLR_RW&P2OUT&=~BIT1;
//RW&=&P2.1
#define&SET_RW&P2OUT|=BIT1;
#define&CLR_EN&P2OUT&=~BIT2;
//EN&=&P2.2
#define&SET_EN&P2OUT|=BIT2;
#define&DataPort&&&&P1OUT
8,g2553的P27和P26脚分别接外部晶体的输出和输入脚XOUT和XIN,默认是自动设为了晶振管脚功能,但是当想把它们用为普通的IO时,也可以,设置对应的SEL设为普通的IO即可,如下:
P2DIR&|=&BIT6+BIT7;&&&&//把P26和P27配置为普通IO&并为输出脚&&默认为晶振的输入和输出引脚&作为dac0832的
&&&&P2SEL&&=&~(BIT6+BIT7);&&&//cs和wr控制端
&&&&P2SEL2&&=&~(BIT6+BIT7);
(二),时钟系统
&&&&&1,msp430能做到超低功耗,合理的时钟模块是功不可没的。但是功能强大的时钟模块设置起来也相对复杂一些。
&&&&&2,msp430的时钟源有:
(1),外接低频晶振LFXT1CLK:低频模式接手表晶体32768Hz,高频模式450KHz~8MHz;
(2),外接高速晶振XT2CLK:8MHz;
(3),内部数字控制振荡器DCO:是一个可控的RC振荡器,频率在0~16MHz;
(4),超低功耗低频振荡器VLO:不可控,4~20KHz&典型值为12KHz;
&&&&&3,时钟模块:430的时钟模块有MCLK&&SMCLK&&ACLK&:
(1),主系统时钟MCLK:提供给MSP430的CPU时钟。可以来自LFXT1CLK&&XT2CLK&&DCO&&VLO可选,默认为DCO。
(2),子系统时钟SMCLK:&提供给高速外设。可以来自LFXT1CLK&&XT2CLK&&DCO&&VLO可选,默认为DCO。
(3),辅助系统时钟ACLK:提供给低速外设。可来自LFXT1CLK&&VLO。&
&&&&&4,内部的振荡器DCO和VLO提供的时钟频率不是很精确,随外部环境变化较大。
DCO默认的频率大概为800KHz,但我用示波器观察的为1.086MHz左右,当DCO设置的过高时,用示波器可以看到波形不再是方波,而是类似于正弦波。DCO可以用CCS提供的宏定义进行相对比较精确的设置,如下:
DCOCTL&=&CALDCO_12MHZ;&&&//DCO设为12MHz&&&这种方法设DCO频率比较精确,实际测得为12.08MHz左右&正弦波
BCSCTL1&=&CALBC1_12MHZ;
用这种方法可以设置1,8,12,16MHz
宏定义如下:
#ifndef&__DisableCalData
SFR_8BIT(CALDCO_16MHZ);&&&&&&&&&&&&&&&&&&&&&&&
SFR_8BIT(CALBC1_16MHZ);&&&&&&&&&&&&&&&&&&&&&&&
SFR_8BIT(CALDCO_12MHZ);&&&&&&&&&&&&&&&&&&&&&&&
SFR_8BIT(CALBC1_12MHZ);&&&&&&&&&&&&&&&&&&&&&&&
SFR_8BIT(CALDCO_8MHZ);&&&&&&&&&&&&&&&&&&&&&&&&
SFR_8BIT(CALBC1_8MHZ);&&&&&&&&&&&&&&&&&&&&&&&&
SFR_8BIT(CALDCO_1MHZ);&&&&&&&&&&&&&&&&&&&&&&&&
SFR_8BIT(CALBC1_1MHZ);&&&&&&&&&&&&&&&&&&&&&&&&
5,使用超低功耗低频振荡器VLO可以很大程度地降低系统功耗,下面的例子是设置ACLK为VLO,MCLK为VLO的8分频:
#include&&&msp430g2553.h&
//#define&CPU_F&((double))//cpu&frequency
#define&CPU_F&((double)1630)//cpu&frequency1630&&&//CPU的实际MCLK大约为13.05/8=1.63KHz
#define&delay_us(x)&__delay_cycles((long)(CPU_F*(double)x/))
#define&delay_ms(x)&__delay_cycles((long)(CPU_F*(double)x/1000.0))
void&main(void)
&&volatile&unsigned&int&i;&&&&&&&&&&&&&&&&&&//&Volatile&to&prevent&removal
&&WDTCTL&=&WDTPW&+&WDTHOLD;&&&&&&&&&&&&&&&&&//&Stop&watchdog&timer
&&BCSCTL3&|=&LFXT1S_2;&&&&&&&&&&&&&&&&&&&&&&//&LFXT1&=&VLO&&低频时钟选择为VLO&ACLK选为VLO
&&IFG1&&=&~OFIFG;&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Clear&OSCFault&flag&&清除振荡器错误中断标志
&&__bis_SR_register(SCG1&+&SCG0);&&&&&&&&&&&//&Stop&DCO&&SCG1禁止SMCLK&&SCG0禁止DCO
&&BCSCTL2&|=&SELM_3&+&DIVM_3;&&&&&&&&&&&&&&&//&MCLK&=&LFXT1/8
&&//因为前面已经选择了LFXT1&=&VLO&所以MCLK选为VLO&&8分频&&所以CPU的MCLK大约为1.5KHz
&&P1DIR&=&0xFF;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&All&P1.x&outputs
&&P1OUT&=&0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&All&P1.x&reset
&&P2DIR&=&0xFF;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&All&P2.x&outputs
&&P2OUT&=&0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&All&P2.x&reset
&&P1SEL&|=&BIT0+BIT4;&&&&&&&&&&&&&&&&//&P10&P14options&&功能选择为外围模块
&&//p10输出ACLK,来自VLO,p14输出SMCLK,&&因为禁止了SMCLK,所以P14脚无波形输出
&&//VLO典型值为12KHz&&实际用示波器测得为:13.05KHz&左右波动
&&//所以CPU的实际MCLK大约为13.05/8=1.63KHz
&&for&(;;)
&&&&P1OUT&^=&BIT6;&&&&&&&&&&//&P1.6&闪烁
&&&&delay_ms(1000);
&&6,如上面的程序所示,其中的延迟函数用那种方法,使用系统的延迟周期函数__delay_cycles(int&n);&可以达到比较精确的延迟,如下:
//#define&CPU_F&((double))//cpu&frequency
#define&CPU_F&((double))//cpu&frequency
#define&delay_us(x)&__delay_cycles((long)(CPU_F*(double)x/))
#define&delay_ms(x)&__delay_cycles((long)(CPU_F*(double)x/1000.0))
#define&nop()&_NOP();
&&&7,系统上电后默认使用的是DCO时钟,DCO默认的频率大概为800KHz,但我用示波器观察的为1.086MHz左右,当DCO设置的过高时,用示波器可以看到波形不再是方波,而是类似于正弦波。
&(三),定时器Timer_A
&&&1,MSP430g2553具有两个16位的定时器:Timer0_A&&&Timer1_A。分别具有三个捕捉/比较寄存器,具有输入捕捉,输出比较功能。可以产生定时中断,也可以产生PWM。
&&&2,产生PWM,例子如下:
#include&&msp430g2553.h&
&void&Timer_A0_1_init()&&//TA0.1输出PWM
TACTL|=&TASSEL_1+MC_1;//ACLK,增计数
CCTL1=OUTMOD_7;//输出模式为复位/置位
CCR0=328;//时钟频率为32768HZ,100HZ
//CCR1=164;//时钟频率为32768HZ,占空比CCR1/CCR0=50%
CCR1=109;//占空比CCR1/CCR0=1/3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&TA0.1由P1.2&P1.6输出
&void&Timer_A1_2_init()&&&&//TA1.2输出PWM
TA1CTL|=&TASSEL_1+MC_1;//ACLK,增计数
TA1CCTL2=OUTMOD_7;//输出模式为复位/置位,注意CCTL2要写为TA1CCTL2
TA1CCR0=164;//时钟频率为32768HZ,波形32768/CCR0=199HZ
TA1CCR2=41;//占空比CCR2/CCR0=1/4,注意CCR2要写成TA1CCR2&&&&&&&TA1.2由P2.4&P2.5输出
&void&Timer_A1_1_init()&&&//TA1.1输出PWM
&TA1CCTL1=OUTMOD_7;
&TA1CCR1=123;&&&//占空比CCR1/CCR0=3/4,注意CCR1要写成TA1CCR1&&&TA1.1由P2.1&P2.2输出
&void&IO_init()
&P1SEL|=BIT2+BIT6;
&P1DIR|=BIT2+BIT6;//P1.2&P1.6输出&&&TA0.1&&&OUT1
&P2SEL|=BIT4+BIT5;
&P2DIR|=BIT4+BIT5;//P2.4&P2.5输出&&&TA1.2&&&OUT2
&P2SEL|=BIT1+BIT2;
&P2DIR|=BIT1+BIT2;&//P2.1&P2.2输出&&TA1.1&&&OUT1
void&main(void)&{
WDTCTL=WDTPW+WDTHOLD;
&&&&IO_init();
Timer_A0_1_init();
Timer_A1_2_init();
Timer_A1_1_init();
_BIS_SR(CPUOFF);&&&&&&&&&&&&&&&&&&&&&&&&&&//&Enter&LPM0&&进入低功耗模式0&SMCLK&ON,ACLK&ON
&&3,Timer_A的捕获/比较寄存器
TAR寄存器是Timer_A的16位的计数寄存器。TACCRx是Timer_A的捕获/比较寄存器,当为捕获模式时:当捕获发生时,把TAR的值装载到TACCRx中。当为比较模式时:TACCRx中装的是要与TAR寄存器相比较的值。
&&&4,捕获模式
捕获外部输入的信号的上升沿或下降沿或上升沿下降沿都捕捉,当捕捉发生时,把TAR的值装载到TACCRx中,同时也可以进入中断,执行相应的操作。这样利用捕捉上升沿或下降沿就可以计算外部输入信号的周期,得出频率。利用捕捉上升沿和下降沿可以得出输入信号的高电平或低电平的持续时间。也可以算出占空比。下面是一个例子,是Timer_A捕获初始化的程序:
void&timer_init()&&&&&&//使用Timer1_A时要特别注意各个寄存器的写法,因为Timer0_A的寄存器都简写了,所以在写
//Timer1_A的寄存器时,要特别注意与Timer0_A的不同
P1SEL&|=&BIT2;&&&&//选择P12作为捕捉的输入端子&&Timer0_A
&//TACCTL1&|=CM_3+SCS+CAP+CCIE;&&//上下沿都触发捕捉,用于测脉宽,同步模式、时能中断&&CCI1A
TACCTL1&|=CM_1+SCS+CAP+CCIE;&&//上升沿触发捕捉,同步模式、时能中断&&CCI1A
&&&&TACTL&|=&TASSEL1+MC_2;&&//选择SMCLK时钟作为计数时钟源,不分频&&&增计数模式不行,必须连续计数模式
&&P2SEL&|=&BIT1;&&&&//选择P21作为捕捉的输入端子&&&&Timer1_A
&&//TA1CCTL1&|=CM_3+SCS+CAP+CCIE;&&//上下沿都触发捕捉,用于测脉宽,同步模式、时能中断&&CCI1A
&&TA1CCTL1&|=CM_1+SCS+CAP+CCIE;&&//上升沿触发捕捉,同步模式、时能中断&&CCI1A
&&TA1CTL&|=&TASSEL1+MC_2;&&//选择SMCLK时钟作为计数时钟源,不分频&&&增计数模式不行,必须连续计数模式
相对应的中断函数如下:
#pragma&vector=TIMER0_A1_VECTOR&&&//Timer0_A&CC1&&的中断向量
__interrupt&void&Timer_A(void)
CCI0A&使用的捕捉比较寄存器是TA0CCR0,TA0CCR0单独分配给一个
&&&&//中断向量TIMER1_A0_VECTOR,所以进入中断后直接就是Timer0_A&CC0产生的中断,不用经过类似
&&&//下面的方法判断中断源了&&。
//Timer0_A&CC1-4,&TA0公用一个中断向量&TIMER0_A1_VECTOR,所以进入了中断后还要用下面
&&&&//的方法进行判断是哪一个中断源产生的中断
&&switch(TAIV)&&&&//如果是Timer0_A&CC1产生的中断
&&&flag=1;
&&&LPM1_EXIT;&&&&&&//退出低功耗模式
&&//&_BIC_SR_IRQ(LPM1_bits);
&&&//_bic_SR_register_on_exit(LPM1_bits);
&&case&4:&
&&case&10:
#pragma&vector=TIMER1_A1_VECTOR&&&&&&//Timer1_A&CC1&&的中断向量
__interrupt&void&Timer_A1(void)
P1OUT|=BIT0;&&//led调试用的
LPM1_EXIT;&&&&&&//退出低功耗模式&&因为使用的是CCI0A&使用的捕捉比较寄存器是TA1CCR0,TA1CCR0单独分配给一个
&&&&&&&&&&&&&&&&//中断向量TIMER1_A0_VECTOR,所以进入中断后直接就是Timer1_A&CC0产生的中断,不用经过类似
&&&&&&&&&&&&&&&//下面注释掉的方法判断&&。
&&&&&&&&&&&&&&&//而Timer1_A&CC1-4,&TA1则公用一个中断向量&TIMER1_A1_VECTOR,所以进入了中断后还要用下面
&&&&&&&//的方法进行判断是哪一个中断源产生的中断
&&switch(TA1IV)&&&&//如果是Timer1_A&CC1产生的中断
&&&flag=2;
&&&LPM1_EXIT;&&&&&&//退出低功耗模式
&&//&_BIC_SR_IRQ(LPM1_bits);
&&&//_bic_SR_register_on_exit(LPM1_bits);
&&case&10:
//如果要测量更低频率的信号的话,可以在中断中判断溢出中断发生的次数,这样就可以得到溢出的次数,从而可以测量更
//低频率的信号
&&5,Timer_A的计数模式
计数模式有:增计数模式,连续计数模式和增减计数模式。具体的各个模式的详解,参见用户指南。
&&&6,定时器的定时中断
在使用定时器的定时中断时,要注意定时器计数模式的选择。在使用中断时,要注意中断向量的使用和中断源的判断,下面就举一个例子,注释的也较详细:
#include&&msp430g2553.h&
unsigned&int&t=0;
void&main(void)
&&WDTCTL&=&WDTPW&+&WDTHOLD;&&&&&&&&&&&&&&&&&//&Stop&WDT
&&P1DIR&|=&0x01;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&P1.0&output
&&CCTL0&=&CCIE;&&&//&CCTLx是捕获/比较控制寄存器&&&interrupt&enabled&&CCIE=0x0010&&时能定时器A中断
&&CCR0&=&50000;&&&//捕获/比较寄存器&&&设置计数器CCR0的初值&&16位寄存器,最大值为65535
&&&&&&&&&&&&&&&&//默认SMCLK使用的是DCO,默认的DCO大约为800KHz,而CCR0=50000,所以中断产生的频率大约为16Hz
&&TACTL&=&TASSEL_2&+&MC_2;&&&&&&&&&&&&&&&&&&//&SMCLK,&contmode&&连续计数模式从0计到0FFFFh
&&//TACTL&=&TASSEL_2&+&MC_1;&&&&&&&&&&&&&&&&&&//&SMCLK,&upmode&&增计数模式从0计到CCR0
&&_BIS_SR(LPM0_bits&+&GIE);&&&&&&&&&&&&&&&&&//&Enter&LPM0&w/&interrupt&&进入低功耗模式0,允许中断
//&Timer&A0&interrupt&service&routine
#pragma&vector=TIMER0_A0_VECTOR
__interrupt&void&Timer_A&(void)&&&&//CCIFG中断被响应后,该标志位自动清零
&&//P1OUT&^=&0x01;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Toggle&P1.0
P1OUT&^=&BIT0;&&&&&&&&&&&//&Toggle&P1.0
&&CCR0&+=&50000;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&Add&Offset&to&CCR0&&增加CCR0偏移
&&//定时器总是从0开始往上计数,一直到计满再从0开始,在连续计数模式下,当定时器的值等于CCR0时,产生中断
&&//在中断中对CCR0增加50000,这样的话定时器从当前值到下一时刻再次等于CCR0时的间隔为50000,恒定
&&//这样产生中断的时间间隔就相等了
&//所以在连续计数模式下,要想使中断的时间间隔一定,就要有CCR0&+=&n;这句话
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//在中断中CCR0不需要从新赋值,区别于51
中断的使用注意情况:还是把举个例子吧:
#include&&msp430g2553.h&
void&main(void)
&&WDTCTL&=&WDTPW&+&WDTHOLD;&&&&&&&&&&&&&&&&&//&Stop&WDT
&&P1DIR&|=&0x01;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&P1.0&output
&&TACTL&=&TASSEL_2&+&MC_2&+&TAIE;&&&&&&&&&&&//&SMCLK,&contmode,&interrupt&&TAIE允许定时器溢出中断
&&_BIS_SR(LPM0_bits&+&GIE);&&&&&&&&&&&&&&&&&//&Enter&LPM0&w/&interrupt&&GIE允许中断
//&Timer_A3&Interrupt&Vector&(TA0IV)&handler
#pragma&vector=TIMER0_A1_VECTOR
__interrupt&void&Timer_A(void)
&switch(&TA0IV&)&&&&//TAIV中断向量寄存器&&用于
&&&case&&2:&&&&&&&&&&&&&&&&&&&&&&&&&&&//&CCR1&not&used&&&捕获/比较器1
&&&case&&4:&&&&&&&&&&&&&&&&&&&&&&&&&&&//&CCR2&not&used&&&&捕获/比较器2
&&&case&10:&P1OUT&^=&0x01;&&&&&&&&&&&&&&&&&&//&overflow&&定时器溢出
&&&&&&&&&&&&
&&7,注意:定时器Timer0_A的时钟可以选择为外接时钟输入TACLK(P10),这样当外接一个信号时,定时器Timer0_A就相当于一个计数器使用。这样就可以用Timer0_A接外接信号,Timer1_A接标准的时钟如32768Hz的晶振,就可以实现等精度测频了。其实Timer1_A的时钟也可以外接的,但是在g2553中没有这个外接管脚(P37),所以就只能选择正常的时钟了。
Timer0_A的外接时钟输入TACLK(P10)的设置如下:下面是我实现等精度测频时,两个定时器的初始化程序:
void&timer0_init()
TACTL&|=&TASSEL_0+MC_2+TACLR;&&//选择TACLK时钟作为计数时钟源,不分频&&&必须连续计数模式
P1SEL&|=&BIT0;&&&//P10为Timer0_A的时钟TACLK输入,接外部待测信号,这样Timer0_A就当作计数器用
//Timer1_A采用ACLK作为时钟源计数,这样ACLK就相当于是标准信号,这样两个定时器相当于都工作在计数器方式,
//ACLK&32768Hz作为标准信号,这样可以实现等精度测频
void&timer1_init()
TA1CCTL0&=&CCIE;
TA1CCR0&=&32768;&&&&//1s定时
TA1CTL&|=&TASSEL_1+MC_2+TACLR;&&//选择ACLK时钟作为计数时钟源,不分频&&&必须连续计数模式
8,用定时器和比较器可以实现DAC
&&&使用定时器也可以实现串口通信
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 msp430g2553程序大全 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信