• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

写了外部中断的程序,可是出了点问题

#include

#include

#define LED P0

sbit K=P1^0;

unsigned char KEY=0;

void Delay(unsigned int n)

{

unsigned char a,b;

for(;n>0;n--)

{

for(b=1;b>0;b--)

for(a=22;a>0;a--);

}

}

void Intconfiguration(void)

{

IT0=1;

EX0=1;

EA=1;

}

void Int() interrupt 0

{

Delay(1);

if(K==0)

{

KEY=1;

}

}

void main()

{

LED=0xfe;

Intconfiguration();

while(1) {

if(KEY==1)

{

LED=_cror_(LED,1);

}

if(KEY==0)

{

LED=_crol_(LED,1);

}

Delay(2000);

}

}

全部回复(26)
正序查看
倒序查看
backin
LV.4
2
2014-02-25 20:38
p0加上拉电阻没有?你是怎么发出中断信号的?那个intrins.h是什么文件?延时函数的第二个for有什么意义?main函数前面的void去掉再试试看
0
回复
close3
LV.5
3
2014-02-25 20:38
@backin
p0加上拉电阻没有?你是怎么发出中断信号的?那个intrins.h是什么文件?延时函数的第二个for有什么意义?main函数前面的void去掉再试试看
电路是试验箱做好的,中断信号是下降沿触发,intrins是为了左移右移准备的函数,延时函数是抄来的应该没错,void应该不要去掉吧,应为没有返回值啊
0
回复
backin
LV.4
4
2014-02-25 20:39
@close3
电路是试验箱做好的,中断信号是下降沿触发,intrins是为了左移右移准备的函数,延时函数是抄来的应该没错,void应该不要去掉吧,应为没有返回值啊
主函数不用void,用了反而要出问题。你的设计是中断来了的时候如果此时按键按下就改变led?
0
回复
backin
LV.4
5
2014-02-25 20:40
@backin
主函数不用void,用了反而要出问题。你的设计是中断来了的时候如果此时按键按下就改变led?
话说你到底是哪里出问题了?是没法编译还是烧录了程序没法正常运行。
0
回复
backin
LV.4
6
2014-02-25 20:41
@backin
话说你到底是哪里出问题了?是没法编译还是烧录了程序没法正常运行。
还有那个延时函数确实很奇怪。
0
回复
close3
LV.5
7
2014-02-25 20:41
@backin
还有那个延时函数确实很奇怪。
要不我换个延时函数?
0
回复
close3
LV.5
8
2014-02-25 20:42
程序编译没错,也能用,但是状态改变不了,就是中断不起作用
0
回复
backin
LV.4
9
2014-02-25 20:43
@close3
程序编译没错,也能用,但是状态改变不了,就是中断不起作用
你确定在p3.几来着,反正就是中断0的输入端接受到下降沿的时候按键是按下的?
0
回复
close3
LV.5
10
2014-02-25 20:44
@backin
你确定在p3.几来着,反正就是中断0的输入端接受到下降沿的时候按键是按下的?
我主函数用了一个while循环啊,可以不停地接受吧
0
回复
backin
LV.4
11
2014-02-25 20:44
@close3
程序编译没错,也能用,但是状态改变不了,就是中断不起作用
对的,按照你的程序设定,你需要将p1.0接地,然后给p3.2一个下降沿,此时key才会等于1,然后程序的行为是每隔一段时间对p0端口进行一次移动。
0
回复
backin
LV.4
12
2014-02-25 20:45
@backin
对的,按照你的程序设定,你需要将p1.0接地,然后给p3.2一个下降沿,此时key才会等于1,然后程序的行为是每隔一段时间对p0端口进行一次移动。
主函数不论在干什么中断都不会受到影响的
0
回复
close3
LV.5
13
2014-02-25 20:46
@backin
主函数不论在干什么中断都不会受到影响的
那这个程序应该怎么改能?
0
回复
backin
LV.4
14
2014-02-25 20:46
@close3
那这个程序应该怎么改能?
你想要实现什么目标?
0
回复
close3
LV.5
15
2014-02-25 20:47
@backin
你想要实现什么目标?
没有中断LED彩灯依次左移,有中断LED彩灯右移
0
回复
backin
LV.4
16
2014-02-25 20:48
@close3
没有中断LED彩灯依次左移,有中断LED彩灯右移
中断只是一瞬间的事,只有下降沿到来的那一刻才叫有中断
0
回复
close3
LV.5
17
2014-02-25 20:49
@backin
中断只是一瞬间的事,只有下降沿到来的那一刻才叫有中断
中断来的瞬间KEY值不是改变了吗,主程序是依照KEY的值来决定左移右移的
0
回复
close3
LV.5
18
2014-02-25 20:49
@close3
中断来的瞬间KEY值不是改变了吗,主程序是依照KEY的值来决定左移右移的
解决了,原来中断的IO口用错了
0
回复
backin
LV.4
19
2014-02-25 20:50
@close3
解决了,原来中断的IO口用错了
不过按照你的程序key值没法再从1变回0哦
0
回复
backin
LV.4
20
2014-02-25 20:50
@backin
不过按照你的程序key值没法再从1变回0哦
话说我还以为你是要两个信号同时控制呢
0
回复
daylight
LV.4
21
2014-02-25 20:51
设置了下降沿中断吗?
0
回复
close3
LV.5
22
2014-02-25 20:52
@daylight
设置了下降沿中断吗?
设置啦
0
回复
daylight
LV.4
23
2014-02-25 20:53
@close3
设置啦
没看出问题,再写一个吧
0
回复
matou
LV.3
24
2014-02-25 20:54
中断io口好像不是p10,其他口的话可以直接用键盘扫描的形式
0
回复
close3
LV.5
25
2014-02-25 20:54
@matou
中断io口好像不是p10,其他口的话可以直接用键盘扫描的形式
试验箱上有独立键盘,应该用哪个IO口?
0
回复
close3
LV.5
26
2014-02-25 20:55
@close3
试验箱上有独立键盘,应该用哪个IO口?
解决了,原来中断的IO口用错了
0
回复
金鱼1
LV.3
27
2014-02-25 20:56
@close3
解决了,原来中断的IO口用错了
按你的程序看应该要按着p10然后按p32。
0
回复