5585|11

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【求助】请各位大侠指点 [复制链接]

请各位大侠给指点一下: 我在用MSP430做一个智能温度控制器,现在P1口连接着一个4X4的键盘,只要一按键就进入中断,我希望在中断里改变一个全局变量的值,可是不知道为什么这个值怎么都带不出来。请各位高人指点一二。

最新回复

嗯?怎么没人理我了?拜托,各位,再给点意见好不好?这个问题亟待解决!!!!!!!!!!!!!  详情 回复 发表于 2004-9-10 09:44
 
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
有否原程序啊!!应该是你定义的不是全局变量!!或者是米其它地方改写了
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
也有可能你的全局变量与中断程序中的局部变量重名,以至在中断程序中不可见。
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

4
 
没有啊,我定义的的确是全局变量,而且也没有跟其他变量重名。我曾经测试了一个很简单的程序,就只是很简单的中断程序,我设置了一个全局变量然后再中断程序里改变了他的值,可是中断结束后我在显示全局变量的值还是没变,不知道到底是哪里出问题了,真是苦恼。
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

5
 
把程序放上来看看。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

6
 
不可能的,我就爱用全局变量。给你个参考
#include "msp430x41x.h"
unsigned int flag;
main()
{
WDTCTL = WDTPW+WDTHOLD;

for(;;)
{ _EINT();
_BIS_SR(LPM3_bits);
_NOP();
_NOP();
if(flag &BIT0)
ACTIVE();
else
low_power();

}
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_inter (void)
{
flag |= BIT3;
_BIC_SR_IRQ(LPM3_bits);
}
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
P1口的中断没开

中断标志位没清零

#include "msp430x41x.h"
unsigned int flag;
main()
{
WDTCTL = WDTPW+WDTHOLD;
P1DIR = 0X00; //输入

P1IES = 0x00;//上升沿触发中断
P1IE = 0xff;//开p1中断
_EINT();
for(;;)
{
_BIS_SR(LPM3_bits);
_NOP();
_NOP();
if(flag &BIT0)
ACTIVE();
else
low_power();

}
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_inter (void)
{
flag |= BIT3;
P1IFG=0x00 ; //清中断寄存器
_BIC_SR_IRQ(LPM3_bits);
}
__________________
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 
各位大虾,我是单片机的初学者,请各位不要见笑阿,我的程序太长了,不好放,我就把我调试中断的一个小程序给大家看看吧,我的目的是想在中断程序执行完以后,让数码管又原来的0变成2,可是2怎么都带不出来,程序如下:
#include <msp430x14x.h>
int key;
unsigned char seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void delay(void)
{
int i,j;
for(i=0;i<5000;i++)
for(j=0;j<5000;j++) ;
}

interrupt[PORT1_VECTOR]void putkey(void)

{
key=2;
P4OUT=0xFE;
}

void main(void)
{

BCSCTL1&=~0x80; //Xt2 is on
BCSCTL2 |=0x88; //SMCLK=XT2
WDTCTL=WDTPW+WDTHOLD; //Stop WDT

P1DIR=0x0F;
P1IE|=0xF0;
P1OUT=0x00;
P1IES|=0xF0; //中断触发沿选择为下降沿
//P1IE=0xF0; //中断使能
_EINT();

P5DIR|=0xFF;
P4DIR|=0xFF;
P4OUT=0x00;
P5OUT=0x00;
P5OUT=seg[0];
P4OUT=0xFD;
while(1)
{
delay();
P5OUT=seg[key];
}
}
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

9
 
//清中断寄存器
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

10
 
你的程序在中断程序里出不来。端口中断需要手动清标志寄存器。一般在端口中断开始处就处理 Interrupt_buff = PxIFG;PxIFG = 0;
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

11
 
谢谢版主和各位大虾的帮助,我原来试过在中断里面清标志寄存器没有效果,原来还是版主说的对,需要在中断入口处也需要清零。
不过现在又出现了一个新问题,我现在是用中断程序带出来一个4X4的键盘的值,可是现在为什么就只能带出一行(随机的,先按哪一行就只显示哪一行)的键码值,如果反复输出,过一会儿连着一行的键码都戴不出来了,一点反应都没有了,好像中断不起作用了或者是数值由带不出来了,不知道是怎么回事。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

12
 
嗯?怎么没人理我了?拜托,各位,再给点意见好不好?这个问题亟待解决!!!!!!!!!!!!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表