51单片机外部中断嵌套的问题

程序代码如下:#include<stc89.h>//包含51单片机寄存器定义的头文件sbiten0=P0^0;sbitcw0=P0^1;voidinit(void){EX... 程序代码如下:
#include<stc89.h> // 包含51单片机寄存器定义的头文件
sbit en0=P0^0;
sbit cw0=P0^1;
void init(void)
{
EX0=1; //INT0开
EX1=1; //INT1开
IT0=1; //负跳变触发
IT1=1; //负跳变触发
EA=1; //总中断开
PX1=1;
}
/******************************************************************
函数功能:主函数
********************************************************************/
void main(void)
{
en0=1;
cw0=0;
init();
while(1);
}
void js_int1(void) interrupt 2
{
cw0=0;
}
void xw_int0(void) interrupt 0
{
cw0=1;
}
外部中断1是一个脉冲信号,希望来一个脉冲触发一次中断。
外部中断0是一个按键,希望按一次触发一次。
现在的现象是按键一次之后,外部中断0可以触发,但是外部中断1不能触发。

求助
展开
 我来答
向少年拉飞驰
2011-07-22 · TA获得超过338个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:108万
展开全部

当外部中断0按下后,cw0=1;这时如果按键再一次按下去之前来了脉冲(外部中断1)那么将cw0=0; 

你说的外部中断1不能触发是不正确的。因为外部中断1不触发的话意味着cw0为高电平。 但实际仿真不是这样的

你把你Q告诉我 我们一起探讨

追问
我Q448616745。求指点啦
biyeshengbj
2012-12-20
知道答主
回答量:7
采纳率:0%
帮助的人:3.2万
展开全部
中断1不应该不触发,你仔细观察P0_1引脚的颜色,外部时钟脉冲到了后会变成蓝色,表示低电平,按键触发中断0又会把它变成灰色高阻态。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
greatway000
2011-07-22 · TA获得超过362个赞
知道小有建树答主
回答量:193
采纳率:100%
帮助的人:181万
展开全部
1、只使用外部中断1能触发吗?会不会硬件有问题?
2、将两个中断程序移到main上面试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaopc001
2011-07-22 · TA获得超过1954个赞
知道小有建树答主
回答量:578
采纳率:0%
帮助的人:219万
展开全部
从你的程序上看,没问题。
你现在用两种方式试试。
(1)将外部中断1和外部中断0的功能调换一下,或者都用按键,或者都用脉冲;
(2)将 PX1=1;这句删除。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
578945082
2011-07-24 · 超过17用户采纳过TA的回答
知道答主
回答量:84
采纳率:0%
帮助的人:51.2万
展开全部
优先级为最高系外部中断0的,他进去了跳不出来, 你应该进一次INTO关闭一次IT0=0,防止死等在内INT1也加上 ,第二明白一下是用下降沿,还是高电平
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
嘲讽帅哥
2011-07-28 · TA获得超过1186个赞
知道小有建树答主
回答量:113
采纳率:0%
帮助的人:183万
展开全部
你这里是因为两个方面的原因使你外部中断1不能触发
1.IP优先级中默认的顺序是外部中断0优先级大于外部中断1的优先级,你给的中断0设置是默认的电平触发方式,所以你必须保证中断0中断完毕后,同优先级的中断1才能被中断
2.脉冲方式在main()下定义必须在有
TR1=1; //下降沿触发,这样就可以满足你的要求了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式