求单片机(c51)外部中断实验的c语言代码或者思路,要求在补充

供稿:hz-xin.com     日期:2025-01-14
求89C51单片机外部中断程序,C语言编写。

方法类似,补写程序如下:
#include
#define uint unsigned int
#define uchar unsigned char
sbit LED=P0^0;
sbit LED1=P0^1;
void delay1ms (uint z)
{
uint x,y;
for (x=z;x>0;x--)
for (y=110;y>0;y--);
}
void exter() interrupt 2
{
delay1ms(600);
LED=0;
delay1ms(200);
LED=1;
}
void exter0() interrupt 0
{
delay1ms(600);
LED1=1;
delay1ms(200);
LED1=0;
}
main()
{
EA=1; //开总中断
EX1=1; //开外部中断1
EX0=1; //开外部中断0
IT1=0; //外部中断边沿触发,下降沿触发
IT0=0; //外部中断0边沿触发,下降沿触发
}

具体的I/O口你根据你的电路设置,数码管编码也是根据你自己的电路编码,我的学习板测试通过。
希望可以给你做个参考
#include
#define uint unsigned int
#define uchar unsigned char
uchar num1,num2,qian,bai,shi,ge;//定义数据类型
uint num;
sbit k1=P3^2;//外部中断按键
sbit k2=P3^3;

sbit LED1=P2^7;//数码管第一位
sbit LED2=P2^6;
sbit LED3=P2^5;
sbit LED4=P2^4;
// 共阳数码管编码显示段码值0123456789ABCDEF- 这个根据电路实际情况编码
uchar code lednum[]={0x28,0xEB,0x32,0xA2,0xE1,0xA4,0x24,0xEA,0x20,
0xA0,0x60,0x25,0x3C,0x23,0x34,0x74,0xF7,0xFF};
void delay(uint);
void display(uchar,uchar,uchar,uchar);
void main()
{
EA=1; //开总中断
EX0 = 1;
EX1 = 1;
IT0 = 1;
IT1 = 1;
display(qian,bai,shi,ge);
while(1) //程序在这里不停的对数码管动态扫描同时等待中断发生
{


display(qian,bai,shi,ge);//调用数码管显示子函数
}
}
void display(uchar qian,uchar bai,uchar shi,uchar ge)//显示子函数
{
qian=num/1000;//千位分离
bai=num%1000/100; //百位分离
shi=num%100/10;//十位分离
ge=num%10;//个位分离

P0 =lednum[qian]; //取显示数据,段码十位
LED1=0; //点亮LED1(第一位)
delay(5); //延时
LED1=1; //熄灭LED1
P0=lednum[bai]; //取显示数据,段码个位
LED2=0; //点亮LED2(第二位)
delay(5); //延时
LED2=1; //熄灭LED2

P0 =lednum[shi]; //取显示数据,段码十位
LED3=0; //点亮LED3(第三位)
delay(5); //延时
LED3=1; //熄灭LED3
P0=lednum[ge]; //取显示数据,段码个位
LED4=0; //点亮LED4(第四位)
delay(5); //延时
LED4=1; //熄灭LED4

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

void X0_INT() interrupt 0//外部中断0
{
num++; //按键key1按下时数码管计数器加1
}
//------------------------------------------
void X1_INT() interrupt 2//外部中断1
{
num--; //按键key2按下时数码管计数器减1

}

#include<reg51.h>
#define uchar unsigned char
void delay(void)
{
uchar i,j;
for(i=0;i<200;i++)
for(j=0;j<120;j++);
}
void ext0() interrupt 0
{
uchar i;
for(i=0;i<8;i++)
    {
    P2=0x00;
    delay();
    P2=0xff;
    delay();
    }
}
main()
{
uchar i;
EX0=1;
IT0=1;
EA=1;
while(1)
    {
    P2=~(1<<i);
    delay();
    i++;
    i%=8;
    }
}


求单片机(c51)外部中断实验的c语言代码或者思路,要求在补充
while(1) { P2=~(1<

求C51单片机用C程序,通过外部中断1实现按键按下(低电平),7个LED灯单...
define uchar unsigned char uchar led[7]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf};uchar num=0;void ext1() interrupt 2 { P0=led[num];num++;num%=7;while(INT1==0);} main(){ EX1=1;IT1=0;EA=1;P0=0xff;while(1);} ...

C51单片机程序。利用外部中断INT0,INT1,当INT0产生中断时,使LED8亮8...
此外,还需要配置单片机的外部中断INT0和INT1。可以通过初始化中断向量表和配置中断触发方式(上升沿或下降沿触发)来实现。总之,通过巧妙地使用外部中断和延时函数,可以实现复杂的LED控制效果,如8灭闪烁4次。这不仅展示了C51单片机的强大功能,也体现了嵌入式系统编程的魅力。

C语言中,51单片机怎么将进入外部中断服务程序,
51单片机的外部中断主要分为两种触发方式。首先,我们有外部中断0(IT0,TCON.0),这是一个中断触发方式控制位。当IT0值设置为0时,意味着中断是电平触发方式;而当其值设为1时,则表示中断为边沿触发方式,其中下降沿有效。在进行51单片机的外部中断初始化时,我们首先需要开启中断源。对于外部中断0...

51单片机的外部中断如何写按键消抖c程序!
跟外部的按键消抖一样处理就可以了。void ext0() interrupt 0 { delay(10);\/\/ flag=0;\/\/按键有效标志=0为无效 if(P3_2){ while(!P3_2);\/\/等待按键抬起 flag=1;} }

急求C程序!!51单片机怎么在外部中断程序中关闭外部中断。
您好:你的程序中关不到外部中断的原因是你的主函数中有一句 EX1=1; ,你在中断中关了中断,但一进入主函数又开了,所以等于没有关。解决的方法为:在主函数里加一句程序,如下:main(){ EA=1;EX1=1;TCON=0x04;while(1);} 希望可以帮到您。

MCS-51单片机外部中断的触发方式如何设定和选择
1、打开Keil μVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并添加STARTUP.A51文件,然后在当前目录下新建一个C文件,并将其添加入工作路径。2、导入51单片机的头文件,否则后续使用的端口都会出现未定义的情况,然后在主函数中,使得EA=1,即总中断允许,...

用keil51编译器编写的单片机C语言中断程序void Time0(void) interrupt...
interrupt 后面的数字简单的说就是中断服务函数的代号 0代表外中断0 1代表定时计数器0中断 2代表外中断1 3代表定时计数器1中断 4代表串行口中断 所以interrupt 1代表定时计数器产生中断后就转到这个函数里面执行 using 后面的数字是个工作寄存器的代号,也就是R0—R7。如果不写的话由系统自动分配,一般...

51单片机,c 语言 为什么写2个外部中断程序,就会有一个不工作呢?不是...
首先两个中断是否都打开了,也就是EX0、EX1是否都等于1;另外看看触发方式:IT0、IT1是什么置;再看看你是否真的触发了,硬件上确认没有问题?第四,你将两个中断函数后面using n ,使n不同,使用不同的工作组试试。

51单片机定时中断C语言的写法步骤,可追加分数
程序说明:51单片机定时器0工作于方式一,定时50ms中断一次 晶振为12M include<reg52.h> void main { TOMD = 0X01;\/\/配置定时器0工作于方式一 TH1 = (65536-50000)\/256; \/\/高八位装入初值 TL1 = (65536-50000)%256; \/\/低八位装入初值 ET0 = 1;\/\/开定时器0中断 EA = 1;...