我刚刚开始学单片机开发,问几个很白痴的问题...
(1)、中断和调用子函数有什么区别?
(2)、在下面这段代码里,P1.0的电平发生改变时,是在哪一行语句触发中断的?
(3)、中断服务函数结束之后返回到主函数的哪一行?
(4)、为什么主函数里没有循环,却可以一直监测P1.0中断的到来?
代码在问题回答里贴上来,请大神们不吝赐教。
我以为通过某种方式贴代码上来的。。。看来只有粘贴文本了。。。
#include <msp430x15x.h>
unsigned int count = 0;
int main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR &= ~BIT0;
P1IE |= BIT0;
P1IES |= BIT0;
P2DIR = 0xff;
P2OUT = 0xff;
_EINT();
LPM0;
return 0;
}
#pragma vector = PORT1_VECTOR
__interrupt void P1_ISR(void)
{
count++;
if (count <= 10)
{
P1IFG = 0;
return;
}
else
{
P2OUT = 0;
}
}
那是从哪句语句开始的中断呢
追答中断发生的时刻取决于“P1.0的电平发生改变的时候”,这个时该是“随机”的,我们是不知道主程序运行到哪里的(只有CPU知道)。
帮你理解“中断”的概念:
比如你正在看一本书,从头看到尾,反复循环。
但是,如果你接到一个电话,你需要先记住你看到哪一页了,再去接电话。
接完电话之后,又从刚才的那一页继续看。
谁能在事先就知道电话来的时候,你在看哪一页呢?
关于msp430中断的基础问题
1)随时:即中断发生的时刻。这个是主函数无法预料到的。2)别的函数:即中断处理函数。这个函数也是用户写的,但是不会被用户直接调用,而是由CPU自动跳转。这就是中断和子函数调用的区别。3)中断处理函数执行完成之后,接着原来被打断的那个地方继续执行。有点像“从哪里跌倒就从哪里爬起来”。上面的...
msp430编程定时器B的中断
单中断源的一般响应了中断服务程序中断标志位就自动清零,而多中断源的则要求查询某个寄存器后中断标志位才会清零。由于大多数人接触的第一款单片机通常是51,51单片机CPU在响应低优先级的中断程序过程中若有更高优先级的中断发生,单片机就会去执行高优先级,这个过程已经产生了中断嵌套。而430单片机则不同...
MSP430单片机中断嵌套,如何跳出中断?
MSP430单片机中断嵌套跳出中断的方法:如果是要求中断A->中断B这样的序列才会从中断B直接返回主程序的话,那必须要在中断A那里做个标志位表明发生了中断A,由中断B判断。中断B执行完,修改堆栈指针,指向中断A的堆栈地址(压栈后的),直接指令退出中断即可。但要注意,若在中断A中开了总中断,则可以响...
msp430中断定时的问题,该怎么算啊,如图P1.1多长时间去翻一次啊啊,该...
而中断服务程序中的CCR0 += 50000;则是告诉定时器经过50000个SMCLK后再产生中断,也就是翻转P1.1,这样就实现了每隔50000个SMCLK会将P1.1翻转一次,倘若没有这句代码CCR0 += 50000;那么P1.1将会每隔0xFFFF个SMCLK完成一次翻转,这里理解稍微有点绕,不过不算复杂,看看SPEC就懂了。总结:你贴的...
关于msp430单片机中断向量问题 (下面是msp430x14x.h头文件中的内容)
在头文件注释 里面有写 Interrupt Vectors (offset from 0xFFE0) 中断向量偏移量(基地址为0xFFE0)定义 #define PORT2_VECTOR (1*2u)的意思就是 PORT2的中断向量地址为 基地址0xFFE0 偏移(offset) 1*2u 0xFFE0 + 1*2u 就是 0xFFE2 ...
msp430如何在中断服务程序中关闭总中断,经验证用_DINT(),无效,退出...
而且全局中断是禁止的。退出中断后,先前入栈保存的SR出栈,里面的GIE=1,所以就是这个样子了!相当于是说,SR入栈以后,在中断函数中用的新的SR,退出中断后,这个SR是要被主函数以前的SR出栈覆盖的,所以说在这个中断里面改变GIE,并不能改变退出中断以后的GIE。
单片机或msp430没有清除中断标志会咋样 看到很多程序里都是要清除中断...
中断的优先级比较高,系统或者硬件都是优先响应处理中断的;而中断标志则是是否有中断产生的标识,所以没有清除中断标志,系统或者硬件会认为有中断产生,而去响应,这样就可能导致出错了。中断标识有些是会自动清除的,比如MSP430中的通信时发送,接收中断标志,而有些是必须手动清除的。
msp430的AD转换程序中断问题“__bis_SR_register(LPM0_bits + GIE...
GIE是打开全局中断使能 __no_operation(); \/\/进行一个时钟周期的无操作,一般调试可以把断点打在这 这个主要是用在低功耗上,cpu不需要工作时就打到休眠,打开中断使能,等待中断产生进入中断重新工作,这样减少芯片耗电量,一般装电池的要仔细研究这个。直接电源供电的可以无视这几句,不用写 ...
msp430如何让定时器计数器重新开始计数。使它重复不断的产生中断
1、你的GIE没开,也许压根没产生过中断。2、也许你开GIE了。TI_CC_LED1在异或下能亮,说明你的LED1的控制位应该是0吧?既下拉点亮LED1,但你要知道0^0永远都是0,你的LED1永远也都是亮着的。3、你打算LED2闪烁,可你用或语句它只能保持一个状态(恰恰这个状态是1吧?LED2就这么灭着不亮)...
MSP430单片机无法进入外部中断!紧急求助!
放个断点在进中断第一句话,如果能进,说明初始化没问题,如果不能进,说明初始化有问题(大概看了下你程序,初始化加一句P1IFG &= ~BIT0;吧,也不一定是这个问题)。上一步没问题了,再放个断点在标志位判断那个括弧里,就是if(P1IFG & BIT0)这句后边。如果进不了,那就是这里的问题,我...