找回密码
 注册
关于网站域名变更的通知
查看: 164|回复: 2
打印 上一主题 下一主题

msp430执行中断服务程序后主函数退出了循环体或循环体不执行是为什么?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-12-15 09:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
主函数while(1)循环体为LED亮灭,中断服务程序为开关移动12864的光标,但是一旦有进入中断服务程序过后led就不再亮灭了,不知道是什么问题
4 E0 S8 R2 X- q1 f6 `9 Q
/ V6 I4 K! ?& y0 h. Y' z+ ?3 b0 f, n1 X2 E6 A# ^+ B  U  F
  • /*************************************************************
  • 程序功能:读取DS18b20进行温度测量以后的结果并在1602液晶上显示
  • ---------------------------------------------------------------
  • 测试说明:观察显示温度数值。
  • *************************************************************/
  • #include  "msp430.h"
  • #include  "12864.h"
  • #include "DS18B20.h"
  • #define KEYIN    (P1IN & 0x0f)
  • typedef unsigned char uchar;
  • typedef unsigned int  uint;
  • //要显示的6位温度数字
  • uchar DN[7];
  • uchar cursor_state = 0;                         //光标开关状态
  • /*************************主函数*************************/
  • void main( void )
  • {
  •     /*下面六行程序关闭所有的IO口*/
  •     P1DIR = 0XFFp1OUT = 0XFF;
  •     P2DIR = 0xFFp2OUT = 0xFF;
  •     P3DIR = 0XFFp3OUT = 0XFF;
  •     P4DIR = 0XFFp4OUT = 0XFF;
  •     P5DIR = 0XFFp5OUT = 0XFF;
  •     P6DIR = 0XFFp6OUT = 0XFF;
  •   
  •     uchar i;
  •     uint a;
  •     WDTCTL = WDTPW + WDTHOLD;           //关狗
  •     P6DIR |= BIT2p6OUT |= BIT2;        //关闭电平转换
  •     /*------选择系统主时钟为8MHz-------*/
  •     BCSCTL1 &= ~XT2OFF;                 //打开XT2高频晶体振荡器
  •     do
  •     {
  •         IFG1 &= ~OFIFG;                 //清除晶振失败标志
  •         for (i = 0xFF; i > 0; i--);     //等待8MHz晶体起振
  •     }
  •     while ((IFG1 & OFIFG));             //晶振失效标志仍然存在?
  •     BCSCTL2 |= SELM_2 + SELS;           //MCLK和SMCLK选择高频晶振
  •    
  •     //计数时钟选择SMLK=8MHz,1/8分频后为1MHz
  •     TACTL |= TASSEL_2 + ID_3;
  •     //打开全局中断
  •     _EINT();
  •     P1DIR = 0x00;               //P1为输入状态
  •     P1IES = 0x0f;               // P1.0~P1.3选择下降沿中断
  •     P1IE = 0x0f;                // 打开中断使能
  •     while(1)
  •     {
  •         for(a = 0; a < 1000; a++)
  •           DelayNus(1000);
  •         P2OUT ^= BIT1;
  •         for(a = 0; a < 1000; a++)
  •           DelayNus(1000);
  •         P2OUT ^= BIT1;
  •         for(a = 0; a < 1000; a++)
  •           DelayNus(1000);
  •         P2OUT ^= BIT1;
  •     }
  • }
  • #pragma vector = PORT1_VECTOR
  • __interrupt void P1_ISR(void)
  • {
  •     uchar temp,i,KEY;
  •     temp = 0x01;
  •     P2OUT ^= BIT1;
  •     for(i = 0; i < 4; i++)
  •     {
  •         if(!(temp & P1IN))
  •         {
  •             KEY = i;
  •             break;
  •         }
  •         temp <<= 1;
  •     }
  •     if(P1IFG & 0x0f)
  •     {
  •         switch(P1IFG)
  •         {
  •         case 0x01:
  •                     if(KEY == 0)
  •                     {
  •                         DelayNus(100);
  •                         while(KEYIN != 0x0f);
  •                         if(cursor_state == 0)
  •                         {
  •                             cursor_state++;
  •                             Write_Cmd(0x0F);
  •                         }
  •                         else
  •                         {
  •                             cursor_state--;
  •                             Write_Cmd(0x0C);
  •                         }
  •                         P1IFG = 0;
  •                     }
  •                     break;
  •         case 0x02:
  •                     if(KEY == 1)
  •                     {
  •                         DelayNus(100);
  •                         while(KEYIN != 0x0f);
  •                         Write_Cmd(0x14);
  •                         P1IFG = 0;
  •                     }
  •                     break;
  •         case 0x04:
  •                     if(KEY == 2)
  •                     {
  •                         DelayNus(100);
  •                         while(KEYIN != 0x0f);
  •                         Write_Cmd(0x10);
  •                         P1IFG = 0;
  •                     }
  •                     break;
  •         case 0x08:
  •                     if(KEY == 3)
  •                     {
  •                         DelayNus(100);
  •                         while(KEYIN != 0x0f);
  •                         Write_Cmd(0x10);
  •                         P1IFG = 0;
  •                     }
  •                     break;
  •         default:
  •                     while(KEYIN != 0x0f);       //等待按键放开
  •                     //KeyVal = 0;
  •                     //LPM1_EXIT;
  •                     P1IFG = 0;
  •                     break;
  •         }
  •     }
  • }3 ~; H6 h% S# r, ?1 U
& i: q7 h/ C8 P- M- Z
$ |' X* o# q$ y% W% K

5 r4 e. U$ `+ }7 G9 S8 g

该用户从未签到

2#
发表于 2021-12-15 10:21 | 只看该作者
怀疑是进入中断后就出不来了

该用户从未签到

3#
发表于 2021-12-15 10:22 | 只看该作者
中断
$ l3 e, u  _* x. K$ c/ j, G, R& w7 a里面用延时
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-18 13:14 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表