【求单片机C语言程序】STC89C52通过两个外部中断P3.2和P3.3,来控制P1.0和P1.1的数码管亮和灭,一定keil C

说明:通过外部中断0【P3.2】,P1.0的数码管亮,中断结束后,数码管灭;再由外部中断1【P3.3】,P1.1的数码管亮,次中断结束后,数码管灭;简言之就是一个中断只控制一个数码管,中断之间在功能上没有必然的联系,编程环境keil C51。
以下是我编的程序,就是一个中断控制一个数码管,但是当有两个中断时,我就抓瞎了
#include <reg52.h>
sbit D1=P1^0;
void main()
{
D1=1;
EA=1;
EX0=1;
}
void exter() interrupt 0
{
D1=0;
}
求高手帮我改改程序,改成两个中断的那种,功能要求都写在上面了~【希望能有程序注释】3Q,我会去keil里面模拟的~~o()^))o
P1.0和P1.1口上接的都是普通LED小灯,上面说的数码管=LED小灯,希望别误会,急用~

/*模块低电平有效、外部中断0、1为低电平出发*/
#include "reg52.h"
void delay( char i)
{
unsigned char t;
while(i--)
{
for(t=0;t<108;t++);
}
}
void INT0_ROUTING() interrupt 0//外部中断0子程序
{
P0=0xfe;//LED0点亮
while((P3|0xfb)==0xff);//等待外部中断0口(P3^2松开)
delay(10);//延时去抖动
P0=0xff;//LED0熄灭
}
void INT0_ROUTING() interrupt 2
{
P0=0xfd;//LED1点亮
while((P3|0xf7)==0xff);//等待外部中断1口(P3^3松开)
delay(10);//延时去抖动
P0=0xff;//LED1熄灭
}

void main()
{
EA=1;//中断总开关
EX0=1;//外部中断0开
EX1=1;//外部中断1开
/*默认低电平触发*/
while(1);//死循环 防止跑飞
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-17
#include <reg52.h>

tpyedef unsigned int uint;
typedef unsigned char uchar;

#define mLedStatusOn 0
#define mLedStatusOff 1

sbit ledFirstCom = P1^0;
sbit ledSecondCom = P1^1;

void InitSys(void) {
ledFirstCom = mLedStatusOff;
ledSecondCom = mLedStatusOff;

IT0 = 0; //低电平有效,模拟按键效果
IT1 = 0;
EA = 1;
EX0 = 1;
EX1 = 1;
}

void IsrEx0(void) interrupt 0 using 1{
ledFirstCom ~= ledFirstCom;
IE0 = 0; // 防止按键误抖动重新挂起中断
}

void IsrEx1(void) interrupt 2 using 2{
ledSecondCom ~= ledSecondCom;
IE1 = 0; // 防止按键误抖动重新挂起中断
}

void main(void) {
InitSys(); //初始化系统,配置外部中断寄存器,初始化LED为灭
while(1);
}
第2个回答  推荐于2016-01-02
#include <reg52.h>
sbit D1=P1^0;
sbit D2=P1^1;
void main()
{
D1=1;
D2=1;
EA=1;
EX0=1;
EX1=1;
while(1); //死循环一定要加上.....
}
void exter() interrupt 0
{
D1=!D1;
}

void exter() interrupt 1
{
D2=!D2;
}本回答被网友采纳
第3个回答  2010-11-17
参考看看:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/644b57c3e858a3160ff47751.html
再慢慢找找,C语言的,也能找到。

【求单片机C语言程序】STC89C52通过两个外部中断P3.2和P3.3,来控制P1....
void INT0_ROUTING() interrupt 0\/\/外部中断0子程序 { P0=0xfe;\/\/LED0点亮 while((P3|0xfb)==0xff);\/\/等待外部中断0口(P3^2松开)delay(10);\/\/延时去抖动 P0=0xff;\/\/LED0熄灭 } void INT0_ROUTING() interrupt 2 { P0=0xfd;\/\/LED1点亮 while((P3|0xf7)==0xff);\/\/等待外部...

89C51单片机中断一定要接P3.2 P3.3中吗?可以用其它端口作中断口吗?
你好,要实现外部中断,只能在P3.2和P3.3口用,要实现计数器的功能,也只能用P3.4和P3.5,当然,如果你一定要用P1.0也可以,使用查询法,在while循环里面不断查询P1.0的状态并和上一次的进行比较,就可以实现,可是这已经不属于中断处理的概念了。希望对你有帮助。。。

单片机c51,p3.2和p3.3端口接按钮,然后随意按下一个按钮跳到自己原先设...
P3.2 P3.3 是两个外部中断入口,对应的中断入口为0003H 0013H ,(你要使按下键为低电平)你不需要设定任何转移指令 只要系统中断允许已打开(在程序前面加一条 MOV IE,#85H 既可,根据你自己想要 用电平触发 还是下降沿触发,选择设定 SETB ITO SETB IT1 或者CLR IT0 CLR IT1) 这样 ...

学单片机-入门篇1-介绍STC89C52RC单片机
串行口是单片机内部的一个全双工串行接口,数据存储在SBUF中,通过P3.1和P3.0引脚进行串行发送和接收。定时器\/计数器是单片机内部的三个16位可编程部件,可以设置为计数器或定时器,通过指令控制其工作模式和计数范围。中断系统允许单片机处理8个中断事件,包括两个外部中断、三个定时器\/计数器中断和串口...

搞不明白,单片机的外部中断P3.2和P3.3两个端口,那剩下的P3端口应该怎样...
单片机的任何一个端口即可当输入,也可当输出,也可以位操作。外部中断占用了P32,P33口,余下的端口仍然可以根据你得需要连接。

单片机89c52如何控制多个数码管?
D2: RLC A MOV P3.2,C SETB P3.3 CLR P3.3 DJNZ R3,D2 INC R0 MOV A,R2 ANL P1,A D3: MOV R3,#250 DJNZ R3,MOV A,R2 RL A MOV R2,A JB ACC.6,D1 RET TAB: DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH...

51单片机中如果要利用他的外部中断是不是必须把线接到P3.2和P3.3...
至于中断优先级可以不设,因其只有0和1两种,况且用中断嵌套比较复杂 中断程序编号:外部中断0:0 定时\/计数器0中断:1 外部中断1:2 定时\/计数器1中断:3 串行口中断:4 定时\/计数器2中断:5 中断函数后面必须注明interrupt 及序号如 void timer0()interrupt 1\/\/定时器0中断 ...

AT89C51单片机p1口接分别接有8路led灯,p3.2 p3.3端口分别接有两个按钮s...
这个电路有问题,发光二极管要限流,否则要烧

求用C语言编程:单片机P1.0和P1.1分别接两个指示灯
include "reg51.h"sbit D1=P1^0;sbit D2=P1^1;void delay(int i){ while(--i);} \/\/key1控制D1,外部中断0(P3.2)接key1void int0()interrupt 0{ delay(100);\/\/这个加了延时消抖动 if(IE0){ D1=!D1; while(IE0);\/\/键释放后才结束函数 } }\/\/外部中断1(P3.3)接...

89C51单片机外部中断按键的中断程序 帮忙做一个外部中断子程序,谢谢
P1.0,P1.1并不是中断引脚,你如何让其触发中断?P3.2,P3.3才是中断引脚

相似回答