MSP430G2553学习笔记_第1页
MSP430G2553学习笔记_第2页
MSP430G2553学习笔记_第3页
MSP430G2553学习笔记_第4页
MSP430G2553学习笔记_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Msp430g2553语句格式:延 时: _delay_cycles(1000000);空语句: _NOP(); 低功耗模式: _BIS_SR(LPMX_bits); / Enter LPM3 _BIC_SR_IRQ(LPM3_bits); / Clear LPM3 bits from 0(SR)按键中断: #pragma vector = PORT1_VECTOR _interrupt void PORT1_ISR(void) ;A0定时器: #pragma vector=TIMER0_A0_VECTOR_interrupt void Timer_A (void) ;开启内部VL0时钟12k

2、Hz:BCSCTL3 |= LFXT1S_2; / LFXT1 = VLO_bis_SR_register(SCG1 + SCG0); / Stop DCO/-运行下面代码可将DC0校准至精准的1MHz- DCOCTL=0; BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;/BCSCTL1 = CALBC1_16MHZ,/DCOCTL = CALDCO_16MHZ,/-(1、8、12、16)-内部数字控制振荡器 (DCO)扩展IO口TCA6416寄存器的一般宏定义配置方法:在 MSP430G2553.h 的头文件中,用于配置寄存器的宏定义有三类,“不带下

3、划线”、“带1 条下划线”和“1 条以上下划线”。 1) 不带下划线的寄存器宏定义:实际上就是一个控制位,以便人们不用去记忆该位在8位或16 位寄存器中的位置。 2) 带 1 条下划线的寄存器宏定义:有些功能设置需要 2 位或以上才能完整描述。当只需要2 位时,我们就可以将2 位的组合展开,变为 xx_0/1/2/3 来直接加以设置,相当于数字电路中的“2-4 译码”。 3) 带 1 条以上下划线的寄存器宏定义:这类宏定义可以完成某一项非常复杂的设置,实际上是将多种宏定义的组合相加起来,相当于宏定义的宏定义。IO口的复用:基本时钟系统结构原理图三种时钟ACLK:辅助时钟 ACLK 可被软件配置

4、成从 LFXT1CLK 或 VLOCLK 输入震荡 ACLK 可以被1,2,4,8 分频。ACLK 可以被选用作为外围模块的时钟输入。MCLK:主时钟主时钟可以从 LFXT1CLK 或 VLOCLK, XT2CLK 或 DCOCLK 输入 MCLK 用在CPU 系统之中。SMCLK:辅助主时钟SMCLK 可被选择从 LFXT1CLK,VLOCLK,XT2CLK 或 DCOCLK 输入。SMCLK 可以被 1,2,4,8 分频。SMCLK 可被选用为外围模块的时钟。 1、ACLK:系统辅助时钟,来自 LFXT1CLK 为32768HZ。 2、MCLK:系统主时钟,有以下5种选择: 1、32768

5、HZ,来自ACLK。 2、1MHZ: BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; 3、8MHZ: BCSCTL1 = CALBC1_8MHZ; DCOCTL = CALDCO_8MHZ; 4、12MHZ: BCSCTL1 = CALBC1_12MHZ; DCOCTL = CALDCO_12MHZ; 5、16MHZ: BCSCTL1 = CALBC1_16MHZ; DCOCTL = CALDCO_16MHZ; 3、SMCLK:子系统时钟,一般为16MHZ。IO 操作主要涉及以下几个寄存器:P1REN:上下拉电阻使能寄存器,用于配置管脚输入时的上下拉电

6、阻, 1 使能,此时与 P1OUT配合选择上拉或者下拉,1 为上拉,0 位下拉。P1SEL:功能选择寄存器,1 为引脚配置为使用外围模块功能。P1IE:中断使能寄存器,1 使能引脚中断。P1IES:中断触发沿选择寄存器,1 为下降沿触发,0 为上升沿触发。P1IFG:中断标志寄存器,发生中断事件时相应位置 1。P1DIR:方向寄存器,1 为输出,0 为输入,复位默认为输入状态。P1OUT:输出寄存器,1 时引脚输出高电平,0 时输出低电平。P1IN:输入寄存器,用于读取 IO 电平状态。MSP430 具有一种运行模式及 5 种可利用软件来选择的低功耗操作模式。 一个中断事件能够将器件从任一低功

7、耗模式唤醒、处理请求、并在接收到来自中断程序的返回信号时恢复至低功耗模式。以下 6 种操作模式可利用软件来配置: 激活模式 (AM) 所有时钟处于激活状态 低功耗模式 0 (LPM0) CPU 被禁用 ACLK 和 SMCLK 仍然有效,MCLK 被禁用 低功耗模式 1 (LPM1) CPU 被禁用 ACLK 和 SMCLK 仍然有效,MCLK 被禁用 如果 DCO 不是在激活模式下被使用,则 DCO 的 dc 生成器被禁用 低功耗模式 2 (LPM2) CPU 被禁用 MCLK 和 SMCLK 被禁用 DCO 的 dc 生成器保持启用 ACLK 保持激活 低功耗模式 3 (LPM3) CPU

8、 被禁用 MCLK 和 SMCLK 被禁用 DCO 的 dc 生成器保持启用 ACLK 保持激活 低功耗模式 4 (LPM4) CPU 被禁用 ACLK 被禁用 MCLK 和 SMCLK 被禁用 DCO 的 dc 生成器保持启用 晶体振荡器被停止ACLK(辅助时钟)MCLK(主系统时钟)SMCLK(子系统时钟)以P1口外部中断为例: 打开局部中断: P1IE|=BIT0;/打开P1.0外部中断同样以P1口外部中断为例:关闭局部中断: P1IE&=BIT0;/关闭P1.0外部中断打开、关闭全局中断: _EINT();/打开总中断,相当于51的EA=1; _DINT();/关闭总中断,相当

9、于51的EA=0;TI 将该表命名为“中断向量列表”(Interrupt Vector),由该表可知,断优先级为 1. 上电复位、外部复位、看门狗、Flash 操作失误、程序指针非法读取。 2. NMI、晶体振荡错误、Flash 内存访问违例。 3. 定时器 1,TA1CCR0 的中断 4. 定时器 1,TA1CCR1、TA1CCR2 对应的中断 5. 比较器中断 6. 看狗中断 7. 定时器 0,TA0CCR0 的中断 8. 定时器 0,TA0CCR1、TA0CCR2 对应的中断 9. 串行通信接收中断 10. 串行通信发送中断 11. ADC 转换中断 12. P2 口中断 13. P1

10、口中断 上述中断优先级均无需记忆,用到即查即可。/*/#include <msp430g2553.h> void main(void) WDTCTL = WDTPW + WDTHOLD; / Stop watchdog timer P1DIR |= BIT0; / Set P1.0 to output direction P1IES |= BIT3; / P1.3 Hi/lo edge P1IFG &= BIT3; / P1.3 IFG cleared P1IE |= BIT3; / P1.3 interrupt enabled _BIS_SR(LPM4_bits + GI

11、E); / Enter LPM4 w/interrupt / Port 1 interrupt service routine #pragma vector=PORT1_VECTOR _interrupt void Port_1(void) if (P1IFG & BIT3) P1OUT = BIT0; / P1.0 = toggle P1IFG &= BIT3; / P1.3 IFG cleared /*/中断函数编写的规则为 *#pragma vector = 中断向量源 _interrupt void 函数名 (void) *摁住“Ctrl + 左键”点击 PORT1_V

12、ECTOR 即可查看到所有的“中断向量” 在头文件中可以看到以下所有的中断向量,在这里整理出来,并加以注释。 1. RESET_VECTOR 最高优先级,复位中断。 2. NMI_VECTOR NMI 不可屏蔽中断 3. TIMER1_A0_VECTOR 定时器 1,TA1CCR0 的中断 4. TIMER1_A1_VECTOR 定时器 1,TA1CCR1、TA1CCR2 对应的中断,需要根 据标志位来判断是哪一个中断时间发生 。 5. COMPARATORA_VECTOR 比较器中断 6. WDT_VECTOR 看狗中断 7. TIMER0_A0_VECTOR 定时器 0,TA0CCR0 的

13、中断, 8. TIMER0_A1_VECTOR 定时器 0,TA0CCR1、TA0CCR2 对应的中断,需要根据标志位来判断是哪一个中断时间发生。 9. USCIAB0RX_VECTOR 串行通信接收中断 10. USCIAB0TX_VECTOR 串行通信发送中断 11. ADC10_VECTOR ADC 转换中断 12. PORT2_VECTOR P2 口中断,需要根据标志位来判断是哪一个中断时间发生。 13. PORT1_VECTOR P1 口中断,需要根据标志位来判断是哪一个中断时间发生。中断应用程序举例(外部中断):void interrupt_initial() P1DIR&

14、=BIT7; /P1.7为输入 P1SEL|=BIT7; P1IE|=BIT7; /P1.7中断允许 P1IES|=0x80; /P1.7下降沿触发 P1IFG=0; /P1.7中断标志清除,对于多源中断必须先清中断标志再打开中断 P1DIR|=BIT6; P1OUT&=BIT6; _EINT(); /总中断允许#pragma vector=PORT1_VECTOR_interrupt void Port_1(void) P1IFG&=BIT7; /P1.7中断标志清除 P1OUT|=BIT6; /点亮绿灯 定时基本同msp430f449一样。例程:void zengjishu

15、() TACTL=TASSEL_2+TACLR+ID_3; /选择计数时钟为MCLK,并进行8分频,将计数器TAR清零 CCTL0=CCIE; /使能中断 CCR0=65535; /计数终值,方波频率为:1048576/65536/8/2=1HZ TACTL|=MC_1; /选择Timer_A为增计数模式 P1DIR|=BIT0; /P1.0作为输出 _EINT(); /使能总中断 #pragma vector =TIMER0_A0_VECTOR_interrupt void Timer_A(void) P1OUT=BIT0; /P1.0取反 A/D1、 10位转换精度。2、有多种时钟源可供选

16、择,内带时钟发生器。3、配有6个外部通道和2个内部通道。4、内置参考电源,并且参考电压Vref有8种组合。5、采样速度快,最快200Ks/s。6、四种工作模式: 1、单通道单次转换模式:CONSEQ_0。 2、单通道多次转换模式: CONSEQ_2。 3、序列通道单次转换模式:CONSEQ_1 。 4、序列通道多次转换模式:CONSEQ_3。A/D结构图:例程:void ADC_convert() P1SEL&=0x20; /使能A/D通道A5; ADC10CTL0 = ADC10SHT_1+ ADC10ON+SREF_1+REF2_5V+REFON+MSC; / 打开ADC10内核,

17、确定采样周期为8*ADC10OSC/2,选择内部参考电压为2.5v; ADC10CTL1 = INCH_5+ADC10DIV_1+CONSEQ_2; / input A5模拟信号输入选择通道A5即P1.5,设置为单通道多次转换模式,分频因子为2 ADC10AE0 |= BIT5; / 使P1.5允许AD模拟输入信号 ADC10CTL0|=ENC; /使能转换; ADC10CTL0|=ADC10SC; /开始转换; int Read_result() int result; result= ADC10MEM; return (result); PWM波void PWM_Creat(int a,i

18、nt b) TACTL=TASSEL_2+TACLR+ID_3; /选择计数时钟为MCLK,并进行8分频,将计数器TAR清零 CCR0=65535; /计数终值,方波频率为:1048576/65536/8/2=1HZ CCTL1=OUTMOD_7; CCR1=a; /占空比为:a/65536 CCTL2=OUTMOD_7; CCR2=b; /占空比为:b/65536 P1DIR|=BIT2; /CCR1 P1SEL|=BIT2; P1DIR|=BIT7; /CCR2 P1SEL|=BIT7; TACTL|=MC_1; /选择Timer_A为增计数模式 Timer_A的基本特点: 1、输入时钟可

19、以有多种选择。 2、产生的定时脉冲或PWM信号没有软件带来的误差。 3、四种计数功能。 4、8种输出方式。 5、16位定时器。 6、生成的PWM波能用软件任意改变占空比和周期,当PWM波不需要修改占空比和周期时,Timer_A能自动输出PWM,而不需要利用中断来维持PWM波的输出 Timer_A 定时器的下列四种事件均能产生中断: (1)主计数器(TACCR0)计满后复位,TAIFG 标志被置 1。中断发生在计数值从 TACCR0跳至 0 时刻。 (2)捕获通道 0 发生捕获事件,或让主计数器值 TAR 计至 TACCR0(计数值从 TACCR0-1跳至 TACCR0 的时刻),TACCTL0

20、 寄存器内的 CCIFG 标志被置 1。 (3)捕获通道 1 发生捕获事件,或主计数值 TAR 计至 TACCR1(计数器从 TACCR1-1 跳至TACCR0 的时刻),TACCTL1 寄存器内的 CCIFG 标志被置 1。 (4)捕获通道 2 发生捕获事件,或主计数器 TAR 计至 TACCR2(计数值从 TACCR2-1 跳至TACCR2 的时刻),TACCTL2 寄存器内的 CCIFG 标志被置 1。 这 4 种事件占用了两个中断源,其中,事件 2(计至 TACCR2 或捕获通道 0 发生捕获事件)独占一个中断源 TIMERA0_VECTOR,其余 3 种事件共用另一个中断源 TIME

21、RA1_VECTOR。对于需要紧急处理的捕获事件建议使用通道 0,因为它独占一个中断源,在终端内无需分之判断,反应最快。 #pragma vector=TIMER0_A0_VECTOR_interrupt void ta0_isr(void) ;A: 1. TIMER0_A1_VECTOR2. TIMER0_A0_VECTORB: 3. TIMER1_A1_VECTOR4. TIMER1_A0_VECTOR定时器的工作模式:1、停止模式:用于定时器的暂停,并不发生复位,所有寄存器现行类容在停止模式结束后都可用。当定时器暂停后重新计数时,计数器将从暂停前的计数方向计数。2、增计数模式:捕获/比较

22、寄存器CCR0用作Timer_A增计数模式的周期寄存器,因为CCR0为16位寄存器,所以该模式适用于定时周期小于65536的连续计数情况。计数器TAR可以增计数到CCR0的值,当计数值与CCR0的值相等时,定时器复位,并从0开始重新计数。增计数模式:void zengjishu() TACTL=TASSEL1+TACLR; /选择计数时钟为ACLK,将计数器TAR清零 CCTL0=CCIE; /使能中断 CCR0=200; /计数终值,方波频率为:32768/200/2 TACTL|=MC_1; /选择Timer_A为增计数模式 P1DIR|=BIT0; /P1.0作为输出 _EINT();

23、/使能总中断 #pragma vertor =TIMERA0_VECTOR_interrupt void Timer_A(void) P1OUT=0X01; /P1.0取反 连续计数模式: 特点:定时器从0开始记到0XFFFF后又开始从0开始计数,当记到CCR0时产生中断(可产生多个定时信号)例程: void lianxujishu() TACTL=TASSEL_1+TACLR; /选择计数时钟为ACLK,将计数器TAR清零 CCTL0=CCIE; /使能中断 CCR0=1000; /计数终值,方波频率为:32768/1000/2 TACTL|=MC_2; /选择Timer_A为连续计数模式 P1DIR|=BIT0; /P1.0作为输出 _EINT(); /使能总中断 #pragma vertor =TIMERA0_VECTOR_interrupt void Timer_A(void) P1OUT=0X01; /P1.0取反 CCR0+=1000; 增/减计数模式:需要对称波形的情况可以用增/减计数模式,该模式下,定时器先计数到CCR0的值,然后反向减计数到0。 注:定时器TAR的值从CCR01增计数到CCR0时,中断标志CCIFG0置位,从1减计数到0时,中断标志TAIFG置位定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论