大侠们,51单片机如何利用有限的外部中断控制多个子程序?谢谢啦

作者&投稿:周光 (若有异议请与网页底部的电邮联系)
89C51单片机外部中断按键的中断程序 帮忙做一个外部中断子程序,谢谢~

P1.0,P1.1并不是中断引脚,你如何让其触发中断?

P3.2,P3.3才是中断引脚

使用方法:
单片机的P2.5,P2.6,P2.7口分别接三位动态数码管的位选端,P0口接动态数码管的段选端。然后,P1.0口接一个电阻串联一个LED灯然后接地,电阻取200~470欧之间就行,是一个限流电阻。
中断用的是外部中断0,要触发中断的时候,就用一根杜邦线一端接地,一端接到单片机的P3.2口就行,这样,就满足了你的要求了。
外部中断的触发方式有低电平触发和下降沿触发。到底是那种触发方式,要设置中断允许寄存器中IT0的值,如果IT0=0,像我写的程序,就是低电平触发,如果为1,就是下降沿触发。
灯不是一定要接到P3.2口上的。中断要执行的任务是在中断函数中写代码控制的,就像我写的代码中,你只需要控制LED灯接的那个IO口就行了。
代码如下:
#include
#define uchar unsigned char
sbit led=P1^0;
uchar code duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code wei[3]={0x06,0x05,0x03};
void delay(uchar c);

void ini_() //初始化函数,设置中断触发方式,开中断
{
EA=1;
IT0=0;
EX0=1;
}

void main()
{
uchar i;
ini_();
led=0; //由于单片机上电之后,所有的IO口默认是高电平,而要求是开始不亮,所以要将P1.0口开始设置为低电平。
while(1)
{
for(i=0;i<3;i++) 动态数码管闪烁
{
P2=wei[i];
P0=duan[i];
delay(35);
}
}
}

void led_() interrupt 0 //外部中断0函数,中断函数不需要申明
{
uchar i;
led=1; //在中断中让灯亮起来
while(1)
{
for(i=0;i<3;i++)
{
P2=wei[i];
P0=duan[i];
delay(1);
}
}
}

void delay(uchar c)
{
uchar a,b;
for(c;c>0;c--)
for(a=38;a>0;a--)
for(b=80;b>0;b--);
}

单片机外部中断有限,仅有两个,在某些系统设计中可能会不够用。这里给大家推荐一个比较简单的扩展外部中断的方法。灵感来至于单片机键盘设计!

在有些键盘设计中,如果在程序中采用轮询的方法在检测按键,会花费大量的cpu资源,特别是还要进行大量的数据处理的情况下。所以很多按键设计都加入了中断,上一篇博文里的按键设计其实都可以加入中断,这样可以更好的利用cpu资源。

一般在按键设计中只会用一个中断,但是却可以控制n多的按键。每一个按键的按下都相当于产生了一个中断,所以利用这个原理,我们也可以‘无限’的扩展外部中断。一个简单的电路图如下:

这样当外部送来一个低电平的信号时,通过与非门后将产生一个中断信号,这个信号可以送到单片机的外部中断1,然后检测p00到p03的电平状态,就可以判别是根线上产生了外部中断,从而运行相应的中断服务子程序。

这个电路原理可以结合前面的按键来进行进一步的发挥(每个按键信号可以当做一个中断信号),那样可以产生跟多的中断信号。

你的意思是不同的外部中断来控制不同的内部程序吧
一般采用一个多输入或门电路和其他外部引脚连接 在一起同时将或门的输出连接到外部中断上
这样当有信号输入时,同时或门就改变状态输出到外部中断上触发单片机中断
在中断程序里你通过引脚来判断是那一路输入,同时调用相应子程序。处理完成后在退出中断


大侠们,51单片机如何利用有限的外部中断控制多个子程序?谢谢啦_百度...
这样当外部送来一个低电平的信号时,通过与非门后将产生一个中断信号,这个信号可以送到单片机的外部中断1,然后检测p00到p03的电平状态,就可以判别是根线上产生了外部中断,从而运行相应的中断服务子程序。这个电路原理可以结合前面的按键来进行进一步的发挥(每个按键信号可以当做一个中断信号),那样可以...

大侠们,本人速求单片机书籍一本,能介绍下书名?
51单片机《MCS51单片机实用接口技术》 李华 北航出版 PIC单片机 《PIC单片机原理》李学海 北航 都是经典,

能与MCS-51系列单片机兼容是什么意思?
所谓的MCS-51系列兼容,是指一些厂家在推出了新的单片机后,为了巩固原来的市场,所以将新推出的单片机改动不大,可能的改动也就是性能上面的升级,或者多了些接口什么的,但是指令和开发工具则和原来的完全一样,这样做的好处是无须让开发者们更换原有的工具和知识,就可以继续开发项目。现在国内有很多51...

请问AT系列51单片机和STC系列51单片机有什么区别呢?AT89S51 和AT89C51的...
AT系列51单片机和STC系列51单片机区别为:定时器不同、兼容不同、存储器不同。一、定时器不同 1、AT系列51单片机:AT系列51单片机有两个16位定时器\/计数器。2、STC系列51单片机:STC系列51单片机有四个16位定时器\/计数器。二、兼容不同 1、AT系列51单片机:AT系列51单片机与MCS-51 兼容。2、STC系...

51单片机p0p1p2p3口,到底有啥区别啊,他们的基本功能有啥
首先,51单片机p0p1p2p3口,都可以当准IO口使用,也就是既可以作输出口,也可以作输入口。区别在于:1、P0口作输出口用时,需加上拉电阻。2、P0口有复用功能。当对外部存储器进行读写操作时,P0口先是提供外部存储器的低8位地址,供外部存储器地址锁存器锁存,然后充当数据线,用于写出或读入数据...

问一个51单片机定时器0中断的问题。假如T0中断,然后蜂鸣器报警。请老师...
过程很简单呀,首先是初始化定时器,比如工作模式,我们可以设为模式1,赋初值,比如在12M晶振情况下,我们可以选最经典的50毫秒定时,初值为:65536-50000;确定需要定时多长时间,比如10分钟,那么需要中断次数是20*60*10=12000,一个整型变量就可以搞定了,如果再长些,比如是1小时,那么为了方便,可以...

求助各位前辈,小弟在自学51单片机,想请大侠们赐一个小程序给我学习,万...
你这第一下就想玩这难度要大点,因这有个控制亮度的麻烦点,你最好先玩玩流水灯啊,数码管自动加数啊,(本以后你这中也要用的)完成后再来玩你这才会达到事半功倍的效果,这类程序 网上多的是,你可根据你想玩C语言还是玩汇编去找相应的下载....

接近开关和51单片机之间怎么连?
1)接近开关有两线制和三线制之区别,三线制接近开关又分为NPN型和PNP型,它们的接线是不同的。2)两线制接近开关的接线比较简单,接近开关与负载串联后接到电源即可。3)三线制接近开关的接线:红(棕)线接电源正端;蓝线接电源0V端;黄(黑)线为信号,应接负载。负载的另一端是这样接的:...

求助各位大瞎关于51单片机外部中断的问题
实际上,外部中断工作在边沿触发方式的时候,第一次电平跳变触发后进入中断程序,然后硬件自动清除IE0中断标志位。但是在执行中断程序的过程中,如果中断引脚再次检测到电平跳变(负到高),那么IE0会被再次置1 。如果在退出中断程序之前没及时清0,那么就会再次引发一次中断。而按键的过程,不包括按下和...

51单片机设计跑马灯的程序用(c语言)编写
include <AT89X51.H> unsigned char i;unsigned char temp;unsigned char a,b;void delay(void){ unsigned char m,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);} void main(void){ while(1){ temp=0xfe;P1=temp;delay();for(i=1;i<8;i++){ a=...

朔城区13916913730: 大侠们,51单片机如何利用有限的外部中断控制多个子程序?谢谢啦 -
郎金大黄: 你的意思是不同的外部中断来控制不同的内部程序吧 一般采用一个多输入或门电路和其他外部引脚连接 在一起同时将或门的输出连接到外部中断上 这样当有信号输入时,同时或门就改变状态输出到外部中断上触发单片机中断 在中断程序里你通过引脚来判断是那一路输入,同时调用相应子程序.处理完成后在退出中断

朔城区13916913730: 89c51单片机怎样外部利用外部计数? -
郎金大黄: 在这中只是要注意设置好二个计数器的计数源就行了,也就是说只需把TMOD寄出存器中的计数器或定时器C/T位按需设好就行了,其余的都和用内部源时一样的用.

朔城区13916913730: 51单片机如何用外部中断来停止定时器的工作,然后再用此中断程序来实现中断返回? -
郎金大黄: 利用一个变量做标志来做处理,外部中断出发后将这个标志置1,然后在主函数里面判断这个变量,如果标志为1,那么TR0或者TR1就等于1(运行定时器),再次出发外部中断后,标志置0,此时标志为0,那么TR0,TR1等于0(停止运行定时器). 在外部中断函数中可以如设置一个全局变量为标志位 static bit FLAG=0; 然后 FLAG=!FLAG 就可以完整出发外部中断后的标志位切换.

朔城区13916913730: 51单片机c语言怎么使用片外存储 -
郎金大黄: #define是宏定义啊,DAT只是替换了你后面的代码,DAT不是一种数据类型,不能用来定义变量,typedef用来定义数据类型

朔城区13916913730: 51单片机计数器怎么用 -
郎金大黄: 可以利用51单片机的计数器T0、T1,例如用计数器0的外部计数脉冲输入端T0计数,当计满100个脉冲数量后,触发中断.进入计数服务中断程序.

朔城区13916913730: 大侠们,51单片机开发板,如何通过配套的红外遥控,控制发光二极管的亮灭,比如按1,第一个管亮,按2 -
郎金大黄: 首先你要写一个解码程序让数码管显示数据码与数据反码,然后记录下来,然后再写一个程序,把记录的数据写入程序中,接收时与写入的数据对比一下就可以了.

朔城区13916913730: MCS - 51访问片外存储器时,利用( )信号锁存来自( )发出的低8位地址信号. -
郎金大黄: MCS-51访问片外存储器时,利用( ALE )信号锁存来自( P0 )发出的低8位地址信号.

朔城区13916913730: 怎么编程让51单片机实现每计来自外部的三个数脉冲而发生一次中断! -
郎金大黄: 用外部中断计数到3的时候,关闭外部中断EX1=0,进入中断子程序,处理完成,再打开外部中断EX1=1.主函数内打开外部中断后必须要有一个死循环.比如main() { EA=1; EX1=1; TCON=0x04; while(1); }

朔城区13916913730: 在单片机中:我想用外传感器的高电平或低电平送入单片机中,然后让单片机收到外电平的时候再控制输出. -
郎金大黄: #includesbit p=P3^3; //传感器接连单片机端口为哪个则等号后写哪个 sbit led1=P0^0; void main() { while(p==1); //传感器输入为1时循环 led1=0;//传感器输入变为0后跳出循环执行led点亮 led1=1; }

朔城区13916913730: 51单片机中如何再一个外部中断中再嵌入一个定时器中断 -
郎金大黄: 要设置中断优先级,在默认情况下,外部中断0的优先级是最高的:外部中断0-->T0溢出中断-->外部中断1-->T1溢出中断-->串行接口中断(按辅助优先级从高到低排列) 但是,改变中断寄存器IP的内容可以改变这个默认设置:7 6 5 4 3 2 1 0 IP - - - PS PT1 PX1 PT0 PX0 上面是IP的各个位的内容,可见从0至4位分别控制外部中断0、T0溢出中断、外部中断1、T1溢出中断、串行接口中断的优先级,在51单片机Reset之后,IP为0(低优先级),所以你想在外部中断0里面嵌套定时器,可以用 setb PT1 或 setb PT0 (根据你的情况) 使定时器的优先级升到最高.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网