[应用相关] 中断之后是顺序执行吗?

[复制链接]
705|18
 楼主| chuxh 发表于 2020-2-8 16:41 | 显示全部楼层 |阅读模式
dc, ADC, AD, TE, ADC1
如果打开中断,并且打开总中断,但是没有中断子程序,那么该怎样执行?
比如:
#include  "reg52.h"

long temp;
long IntDegF;
long IntDegC;

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  //Configure ADC10
  ADC10CTL1 = INCH_10 + ADC10DIV_3;         // Choose ADC Channel as Temp Sensor
  ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE;        //Choose ADC Ref source
  __enable_interrupt();                     // Enable interrupts.
  TACCR0 = 30;                              // Delay to allow Ref to settle
  TACCTL0 |= CCIE;                          // Compare-mode interrupt.
  TACTL = TASSEL_2 | MC_1;                  // TACLK = SMCLK, Up mode.
  LPM0;                                     // Wait for delay.
  TACCTL0 &= ~CCIE;
  __disable_interrupt();                       // Disable timer Interrupt
  while(1)
  {
    ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
    __bis_SR_register(LPM0_bits + GIE);        // LPM0 with interrupts enabled

    // oF = ((A10/1024)*1500mV)-923mV)*1/1.97mV = A10*761/1024 - 468
    temp = ADC10MEM;
    IntDegF = ((temp - 630) * 761) / 1024;

    // oC = ((A10/1024)*1500mV)-986mV)*1/3.55mV = A10*423/1024 - 278
    temp = ADC10MEM;
    IntDegC = ((temp - 673) * 423) / 1024;

    __no_operation();                       // SET BREAKPOINT HERE
  }
}
里面呢,ADC10和TIMERA出现中断,但是没有中断程序,中断之后是顺序执行吗?
zhuhuis 发表于 2020-2-8 16:45 | 显示全部楼层
也就是说中断是一个空函数,进去就出来了,目的是用来唤醒LPM0低功耗模式.
zwll 发表于 2020-2-8 16:48 | 显示全部楼层
这个简单 就是唤醒低功耗模式,多看书。
llljh 发表于 2020-2-8 16:53 | 显示全部楼层
中断嵌套的也需要注意的,这个就是要看中断优先级的
juventus9554 发表于 2020-2-8 16:57 | 显示全部楼层
如果中断函数为空或者没有在中断函数之中退出低功耗,CPU回到主程序仍然保持低功耗。
liuzaiy 发表于 2020-2-8 17:00 | 显示全部楼层
这个又中断与查询两种方式的。
pangb 发表于 2020-2-8 17:02 | 显示全部楼层
是不是到中断子程序就跳过去了。。
morrisk 发表于 2020-2-8 17:06 | 显示全部楼层
进入中断服务程序,程序为空就过去了。。
yufe 发表于 2020-2-8 17:10 | 显示全部楼层

// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
  __bic_SR_register_on_exit(LPM0_bits);        // Clear CPUOFF bit from 0(SR)
}

#pragma vector=TIMER0_A0_VECTOR
__interrupt void ta0_isr(void)
{
  TACTL = 0;
  __bic_SR_register_on_exit(LPM0_bits);        // Clear CPUOFF bit from 0(SR)
}
zwll 发表于 2020-2-8 17:14 | 显示全部楼层
你在空的中断函数中添加代码就行啊
hanwe 发表于 2020-2-8 17:17 | 显示全部楼层
可以在中断函数中调用别的来处理
 楼主| chuxh 发表于 2020-2-8 17:20 | 显示全部楼层
楼主能找到中断处理函数在哪里么
langgq 发表于 2020-2-8 17:23 | 显示全部楼层
中断函数为空的话,程序直接回到主函数
 楼主| chuxh 发表于 2020-2-8 17:26 | 显示全部楼层

好的,我明天去单位试一下,多谢各位大侠了哈        
labasi 发表于 2020-3-2 12:20 | 显示全部楼层
应该就是这样的
paotangsan 发表于 2020-3-2 12:25 | 显示全部楼层
应该是顺序执行啊
renzheshengui 发表于 2020-3-2 12:47 | 显示全部楼层
自己写一个中断子程序啊
wakayi 发表于 2020-3-2 12:58 | 显示全部楼层
看优先级吧
wowu 发表于 2020-3-2 13:00 | 显示全部楼层
感觉跟你怎么写代码有关
您需要登录后才可以回帖 登录 | 注册

本版积分规则

936

主题

11296

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部