51单片机P3.2口无法触发外部中断。

小白刚接触单片机正学到外部中断功能,根据郭天祥老师的视频学到了第三节课也按照他的程序试了下外部中断。51单片机有两个外部中断方式,这个程序是当P3.2为低电平的时候可以触... 小白刚接触单片机正学到外部中断功能 , 根据郭天祥老师的视频 学到了第三节课也按照他的程序试了下外部中断。 51单片机有两个外部中断方式 ,这个程序是当P3.2为低电平的时候可以触发中断, 但我以P3.3口为低电平时却不能触发中断了。

这个是以下程序:

/* 外部中断 —— 电平触发方式*/

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit DUAN = P2^0; //P2.0 为段选
sbit wela = P2^1; //P2.1 为位选
sbit d1 = P1^0;
uchar num;
uchar code table[] = { // 0 - F 循环显示
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z); //延时子函数
void main()
{
EA = 1; //中断总允许
EX1 = 1; //允许外部中断0
// IT0 = 0; //电平触发方式,低电平有效
wela = 1; //P2.1 = 1的时候,74HC573 数据直通
P0 = 0xea;
wela = 0; //P2.1 = 0的时候, 数据锁存
while(1)
{
for(num = 0;num < 16;num++)
{
d1 = 1; //开始扫描自动把P1.1口设置为高电平
DUAN = 1; //P2.0 = 1的时候, 74HC573数据直通
P0 = table[num];
DUAN = 0; //P2.0 = 0的时候, 数据锁存
delay(100);
}
}
}

void delay(uint z) //延时子函数
{
uint x,y;
for(x = z;x > 0;x--)
for(y = 110;y > 0;y--);
}

void exter0() interrupt 0 //中断子程序
{
d1 = 0; //P1^0为低电平
}

请大神多多指教,谢谢。
展开
 我来答
lycdl
高粉答主

推荐于2018-03-19 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4946万
展开全部
你以P3.3口为低电平时触发中断,那是INT1,中断号是2,中断子程序应该这么写
void exter1() interrupt 2 //这是2
{
d1 = 0; //P1^0为低电平
}
不过,你的P1^0外部接LED了吗,否则你怎么知道变成低电平了。
还有,虽然在中断子程序中,P1^0变成了低电平,你也能知道,可是回到主程序后,
for(num = 0;num < 16;num++)
{
d1 = 1; //这里马上又变成了高电平,那个低电平是看不到的,不能这么写呀!!!!!
DUAN = 1;
P0 = table[num];
DUAN = 0;
delay(100);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式