找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3537|回复: 3
打印 上一主题 下一主题
收起左侧

[求助]

[复制链接]
跳转到指定楼层
楼主
ID:35256 发表于 2012-4-6 09:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit d2=P2;   		 	//定义P2口LED。
sbit n1=P1^3;  			//定义P1^3口的LED灯。
void delay(int);
uint num;
uint table[]={
				0xc0,0xf9,0xa4,0xb0,
				0x99,0x92,0x82,0xf8,
				0x80,0x98,0x88,0x83,
				0xc6,0xa1,0x86,0x8e
};							//控制数码管段码从0——F亮。
void main(void) { EA=1; //开总中断开关 EX0=1; //开外部中断0 IT0=0; //设置中断触发方式 while(1) { for(num=0;num<16;num++) {
				d2=0; 		  //点亮数码管
				P0=table[num];
				delay(12450);     //延时闪烁。
				d2=1; 		  //关闭数码管。
			 }

	 }
}
void delay(int z)				//延时程序。
{
	uint i,j;
	 for(i=z;i>0;i--)
	  for(j=2;j>0;j--);
}
            
void exter0() interrupt 0       //中断程序。
     {
      n1=0;			//打开P1^3口
	  delay(1);		//延时。
     }   
  

 

我用的单片机是没有锁存器的,数码管是共阳极的。与外部中断相关的是P3.2口。

我用线把P3.2接地。按理来说,如果不拔掉这个线,中断就没有停止,也就回不了主程序中去。但是没有,单片机还会回到主程序中去执行数码管的闪烁,一顿饭时间,数码管就从6变为C,只是数码管闪烁得慢了很多,但并没有停止。

我不明白这个程序哪里出错了?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:37854 发表于 2012-4-6 09:46 | 只看该作者

void exter0() interrupt 0       //中断程序。
     {
      n1=0; //打开P1^3口
  delay(1); //延时。
     }   
 

 

你试试 把这个段 改成

 

void exter0() interrupt 0       //中断程序。
{
while(1)     

{

   n1=0; //打开P1^3口
   delay(1); //延时。

}
}   
 

回复

使用道具 举报

板凳
ID:35256 发表于 2012-4-6 21:20 | 只看该作者
谢谢您!我试试看。
回复

使用道具 举报

地板
ID:35256 发表于 2012-4-13 09:20 | 只看该作者
很感谢您的建议!我试过了,这样好像行不通的。我把程序烧进去,按下P3.2口的按键(我单片机外部中断的接口是P3.2口),然后松开手,数码管的数字就一直瓮中保持不变了,也就是说它跳不出中断程序,回不到主程序了。所以这样写也不行的。不过还是很感谢您的建议。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表