小菜向大家请教数码管的中断问题

[复制链接]
3510|14
 楼主| jackxn 发表于 2009-8-15 08:17 | 显示全部楼层 |阅读模式
本人目前菜鸟级!请各位大侠指点!

我写了一段程序,主程序是控制数码管由1-F显示,循环,我在程序中加入了中断服务程序,通过外部中断0控制一个LED点亮,触发方式为默认的电平触发,当我触发中断时,LED点亮,但数码管却继续循环,正常的话不是应该停住主程序吗?
请各位大侠指点!
chen3bing 发表于 2009-8-15 08:39 | 显示全部楼层
中断执行完了,就要继续执行主程序。
 楼主| jackxn 发表于 2009-8-15 08:42 | 显示全部楼层
我没让她执行完啊,处于联系中断中
chen3bing 发表于 2009-8-15 09:10 | 显示全部楼层
你能否说的具体一点?或者干脆把程序贴出来。
 楼主| jackxn 发表于 2009-8-15 09:30 | 显示全部楼层
好的,我把程序贴下来。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
uchar num;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x98,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
void delay(uint z);

void main()
{
        EA=1;                                //开总中断
        EX0=1;                                 //开外部中断0
        wela=1;
        P0=0x55;
        wela=0;
        while(1)
        {
                for(num=0;num<16;num++)
                        {
                                dula=1;
                                P0=table[num];
                                dula=0;
                                delay(1000);       
                        }
        }
}

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;       
}
houfire007 发表于 2009-8-15 09:56 | 显示全部楼层
你这个中断根本没有用,程序中实际上没有执行。你缺少了中断标志位设置,在TCON中设置IE0为1,你试试。
chen3bing 发表于 2009-8-15 10:14 | 显示全部楼层
不知道。
s46410864 发表于 2009-8-15 12:21 | 显示全部楼层
6L说的不对,..IE0是检测到INT0引脚出现外部中断下降沿时,由硬件置位的..
你这个程序.当进行中断后,执行d1=0;后就反回主程序了,就是说主程序While(1)这个是一个死循环,
反回了之后,当然还是数码管显示了..
 楼主| jackxn 发表于 2009-8-15 13:42 | 显示全部楼层
谢谢楼上几位大侠,我在程序中加入了
TCON=0x01;语句之后现象没有变化,我是用一根导线把STC89C52的P3.2跟地连在一起的,连上时灯点亮,数码管继续循环,当把线拿开时灯熄灭,数码管继续循环。我真的是无奈了,还请各位大侠继续指导。
s46410864 发表于 2009-8-15 14:03 | 显示全部楼层
我不是和你说了么,WHILE(1)这个循环,当中断后,又回到这里,数码管还是显示的.
如果你要中断后不显示,那改成这样,前面定义个变量A=1之后 while(A){}中断中写:
void exter0() interrupt 0
{
        d1=0;  
        A=0;      
}
这样就跳出循环了..
 楼主| jackxn 发表于 2009-8-15 15:28 | 显示全部楼层
我明白前辈您的意思,但是我看单片机视频教程里面,
在中断时数码管停止。
中断返回时数码管继续,
这怎样解释呢?
s46410864 发表于 2009-8-15 15:35 | 显示全部楼层
中断的时候进入中断子程序..你那个数码显示就停了,.
但是你这个程序中.中断子程序所用的时间很短.你这个中断只有一句,用肉眼是看不出来中断时候的时间的
所以,再你看来,一直都是数码管再走,如果你在中断子程序中加个延时,你就会发现数码管停止的
救火车 发表于 2009-8-15 15:37 | 显示全部楼层
路过。顺便说一句,请把"using 1 "加到中断函数后边。
void exter0() interrupt 0 using 1
chen3bing 发表于 2009-8-15 16:10 | 显示全部楼层
果如12楼所说。
 楼主| jackxn 发表于 2009-8-15 20:38 | 显示全部楼层
十分感谢各位大侠的鼎力相助,在中断服务程序中加入延时可以使数码管停止。
当数码管停止到设定的时间后,数码管继续正常循环(此时P3.2仍给低电平),当我把P3.2的短接线拿掉以后,数码管还会出现一段时间的停止,停止时间为设定的时间,小弟不知这是为何?我拿掉短接线之后,P3.2就是高电平了,为什么会再次进入中断服务程序?再次请各位大侠指导!
谢谢!
非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:STC16F2407

16

主题

136

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部