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为低电平
}
请大神多多指教,谢谢。 展开
这个是以下程序:
/* 外部中断 —— 电平触发方式*/
#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为低电平
}
请大神多多指教,谢谢。 展开
展开全部
你以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);
}
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);
}
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询