msp430的中断怎么写啊

如题所述

首先msp430的单片机中断分为可屏蔽中断与不可屏蔽中断这两类,而有的中断则会有几个不同的中断源,所以在编写中断函数的时候也要视具体情况而定,一般的写法首先在主函数中进行初始化之后打开总中断也就是这个函数_EINT();当然也可以这样_BIS_SR(LPM1_bits+GIE)这是低功耗模式下的写法,在主函数的最后别忘了写while(1) ; 注意加“;”,这句话作用是当程序执行完中断函数后cpu返回while(1)后边的“ ;”来等待中断。中断函数的写法:
#prama vector="中断函数向量"
void 中断服务函数名称(void)
{

//中断函数的定义
}想到这么多就先写到这把
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-25
说起来很麻烦,P一个定时器的中断给你看看。你可以到TI上下载代码程序。希望帮到你。
#include "msp430x54xA.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0x01; // P1.0 output
TA1CCTL0 = CCIE; // CCR0 interrupt enabled
TA1CCR0 = 50000;
TA1CTL = TASSEL_2 + MC_2 + TACLR; // SMCLK, contmode, clear TAR
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts
__no_operation(); // For debugger
}
// Timer A0 interrupt service routine
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
{
P1OUT ^= 0x01; // Toggle P1.0
TA1CCR0 += 50000; // Add Offset to CCR0
}本回答被网友采纳

msp430的中断怎么写啊
首先msp430的单片机中断分为可屏蔽中断与不可屏蔽中断这两类,而有的中断则会有几个不同的中断源,所以在编写中断函数的时候也要视具体情况而定,一般的写法首先在主函数中进行初始化之后打开总中断也就是这个函数_EINT();当然也可以这样_BIS_SR(LPM1_bits+GIE)这是低功耗模式下的写法,在主函数的...

在msp430中每次开中断之前都需要写#pragma vector=TIMERA0_VECTOR 吗...
这是中断服务函数的起始语句,每次在写中断中执行什么内容前都要写,TIMERA0_VECTOR 只是针对TimerA0的中断,它是对应于TimerA0的中断向量。如果是其他外设所引发的中断,这句话写法会不同,例如#pragma vector=UART0RX_VECTOR是写针对串口的中断。中断的写法是这样的:pragma vector = 中断向量(可在头...

MSP430的"中断"到底是什麼意思 while (!(UCA1IFG&UCTXIFG)) 有看没...
UCTXIFG是发送中断标志位 当发送缓冲器为空的时候该位被置位 while (!(UCA1IFG&UCTXIFG)) ;的意思就是 等待发送缓冲器的里面的数据发送完毕。

msp430编程定时器B的中断
假如你在进入中断函数之前,430是在LPM0下待机,若要求执行完中断函数之后进入LPM3待机,在中断函数里写MOV.B #LPM3,SR是无效的。因为在进入中断时430会把PC,SR压栈,( SR内保存着低功耗模式的设置)即使你写了MOV.B #LPM3,SR,在退出中断出栈时SR会被重新设置成低功耗0,要达到这样的目的,...

关于msp430单片机中断向量问题 (下面是msp430x14x.h头文件中的内容)
在头文件注释 里面有写 Interrupt Vectors (offset from 0xFFE0) 中断向量偏移量(基地址为0xFFE0)定义 #define PORT2_VECTOR (1*2u)的意思就是 PORT2的中断向量地址为 基地址0xFFE0 偏移(offset) 1*2u 0xFFE0 + 1*2u 就是 0xFFE2 ...

MSP430单片机无法进入外部中断!紧急求助!
放个断点在进中断第一句话,如果能进,说明初始化没问题,如果不能进,说明初始化有问题(大概看了下你程序,初始化加一句P1IFG &= ~BIT0;吧,也不一定是这个问题)。上一步没问题了,再放个断点在标志位判断那个括弧里,就是if(P1IFG & BIT0)这句后边。如果进不了,那就是这里的问题,我...

msp430的AD转换程序中断问题“__bis_SR_register(LPM0_bits + GIE...
GIE是打开全局中断使能 __no_operation(); \/\/进行一个时钟周期的无操作,一般调试可以把断点打在这 这个主要是用在低功耗上,cpu不需要工作时就打到休眠,打开中断使能,等待中断产生进入中断重新工作,这样减少芯片耗电量,一般装电池的要仔细研究这个。直接电源供电的可以无视这几句,不用写 ...

msp430中断定时的问题,该怎么算啊,如图P1.1多长时间去翻一次啊啊,该...
而中断服务程序中的CCR0 += 50000;则是告诉定时器经过50000个SMCLK后再产生中断,也就是翻转P1.1,这样就实现了每隔50000个SMCLK会将P1.1翻转一次,倘若没有这句代码CCR0 += 50000;那么P1.1将会每隔0xFFFF个SMCLK完成一次翻转,这里理解稍微有点绕,不过不算复杂,看看SPEC就懂了。总结:你贴的...

msp430g2553怎么中断中带中断
include<msp430g2553.h> void Init_Port(){ P1DIR|=BIT0+BIT6;P1DIR&=~BIT3;P1REN|=BIT3;P1IES|=BIT3;\/\/选择下降沿触发 P1IE|=BIT3;P1OUT&=~BIT0;P1OUT|=BIT6;} void main(){ WDTCTL = WDTPW + WDTHOLD;Init_Port();_EINT();while(1);} pragma vector=PORT1_VECTOR \/\/...

MSP430程序中 case 0: TACTL &=~ (ID0 + ID1); TACTL |= ID_3; brea...
程序中的两个中断是不同的中断,分别对应TACCIFG0和TACCIFG1标志位,也就是说,当对应的标志位置位时便进入对应的中断中。根据这个程序再详细点地说,由于设置成Timer_a 增计数模式,CCR0 = 50000-1,所以每次定时器A都会自动计数,到达49999时TACCIFG0置位,便进入到了Timer A0中断服务程序;而进入...

相似回答