
1、配置外部中断的触发模式:上沿、下沿、高电平、低电平;
2、中断允许位打开,中断总开关打开;
3、输入外部触发的引脚配置好(有的单片机需要把端口改为外设端口,而不是普通输入口);
4、检查中断向量是否正确。
这个主要是你的程序设计问题
在中断函数中,你并没有使用死循环之类的语句
所以,当你按下按键进入中断后,中断内的语句是可以执行的
但执行完 P1=0XFF; d5=0; 之后,又会返回到主函数
在这两条语句的执行过程中,只有几微妙的时间,所以肉眼看上去好像没有进入中断一样
如果想达到你要的效果,可以在中断内加上一个循环,如下面的代码
void int0() interrupt 0
{
while(!INT0)// INT0 是外部中断系统关键字,此句是等待按键松开
{
P1=0XFF;
d5=0;
}
}
当你按下按键后,只会执行这两条语句,松开后回到主程序
也可改成这样
void int0() interrupt 0
{
while(1)// 始终执行这两句,直到系统复位
{
P1=0XFF;
d5=0;
}
}
若满意,记得采纳哦
外部中断,是需要用开关来触发的。
----
你的延时函数,写的有毛病。
编译,根本不过去。
改好后,程序就正常了,可以进入中断。
#include <reg52h>
#include <intrinsh> //启用 循环左移(_crol_),循环右移(_cror_)函数
#define uint unsigned int
#define uchar unsigned char
sbit d1=P1^0; //
char i,m,n,temp,k; //
uchar code table[] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0x88,0x83,0xa7,0xa1,0x06,0x8e};
//定义共阳极数码管
void delay(int x) //延时函数
{
uchar i;
while(x--) for(i=0;i<110;i++);
}
void main() //主函数
{
EA=1;
EX0=1;
IT0=0;
while(1) {
for(i=0;i<16;i++) {
P0=table[i]; //数码管显示
delay(500);
}
}
}
void my_int0() interrupt 0 //中断函数
{
temp=0xfe; //定义temp 1111 1110 即 P10 低电平
P1=temp; //让第一个灯点亮
for(k=0;k<3;k++) { //循环3次
for(m=0;m<7;m++) { //左移7次
delay(500);
temp=_crol_(temp,1); //库函数里面的循环左移函数,将temp的值左移一位后重新赋给temp
P1=temp; //将左移一位后的temp值送P1口显示
}
for(n=0;n<7;n++) { //右移7次
delay(500);
temp=_cror_(temp,1); //库函数里面的循环右移函数,将temp的值左移一位后重新赋给temp
P1=temp;
}
}
delay(200);
d1=1; //P10 高电平
}
外部中断0设置为低电平触发,去掉while循环后一直按下按键实际代码为
delay();
P1=0xfe;
delay();
EX0=0;
P1=_crol_(P1,1);
delay();
EX0=1;
P1=0X00;
一直重复
之前的代码进入中断后会一直循环,并不会退出中断。正确做法中断应该改为:
void
tx0()
interrupt
0
using
0
{
unsigned
char
i;
delay();
P1=0xfe;
delay();
EX0=0;
while(1)
{
P1=_crol_(P1,1);
delay();
if(P3&0x04)
//判断是否松开中断0的按键
{
break;
}
}
EX0=1;
P1=0X00;
}
以上就是关于STC单片机PCA扩展外部中断程序全部的内容,包括:STC单片机PCA扩展外部中断程序、请教一个实验版stc80c52rc单片机外部中断0的问题、51单片机 ,,外部中断后,中断函数没有运行 #include <reg52.h> #include等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)