导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→紧急求助 51 单片机的外部中断和定时器

* 47690: 紧急求助 51 单片机的外部中断和定时器中断问题

   cjfjxp 
cjfjxp发表的帖子 

 紧急求助 51 单片机的外部中断和定时器中断问题
/*-------------------程序如下,请热心的朋友帮忙看看------------*/

#include  <reg52.h>  
#define uchar unsigned char
#define uint unsigned int
uchar bb;
uint n;
void init();


void main()//主函数
{
init();
while(1)
{
display(n);//显示函数就没放上来。
}

}


void init()//初始化函数
{
n=0;
bb=0;

EA=1;//开总中断
ET1=1;//定时器1中断允许
TMOD=0x11;//T1为16位定时模式
TH1=0;//装定时器1初值
TL1=0;
IT1=1;//外部中断1下降沿触发方式 
EX1=1;//开外部中断1

}

void int1() interrupt 2//外部中断1中断函数
{
if (bb==0)//一次测量开始
{
EX1=0;//关外部中断1
TR1=1;//开定时器1
bb=1;
}
else//一次测量结束
{
EX1=0;
n=3535;
TR1=0;//定时器1停止
bb=0;
}
}

void time1() interrupt 3//定时器1中断函数
{
n++;//定时器1溢出一次n++
if (n==30)//11.0592MHz晶振,溢出30次大约为2.13333秒。
{
EX1=1;//开外部中断1
}
}

/*---------------
为什么运行的情况是:给INT1下降沿,n的值一直++ 到30 然后突然变成3535.

我只是在程序一开始时给了INT1一个下降沿,怎么在n++到30,程序自己跳到 中断函数?,而不是等我再一次中断,n才变成3553?

求助,感谢!------------*/




发表时间:2009年4月6日12:20:26

  
回复该帖

本主题共有 4 帖,分页:>>>>>该主题的所有内容[4]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  47694.[详细]紧急求助 51 单片机的外部中断和定时器中断问题
摘要: 程序运行情况:给外部中断一个下降沿,定时器1运行,n++. n加到30时,开外部中断1,但此时并未给外部中断1信号,而程序自动进入了 外部中断1中断函数,突然将3535 赋值给了n. &n......(246字)
- [cjfjxp][578次] 2009年4月6日

  64984.[详细]只能是存在外部中断信号
摘要:n=30时允许了外部中断,此时外部中断信号引起置数。......(48字)
- [红心J][873次] 2009年4月9日

  48062.[详细][讨论]
摘要:你在主函数里面先关关外部中断试试......(32字)
- [litao365366][521次] 2009年4月11日

[上一篇帖子]:紧急求助 51 单片机的外部中断和定时器中断问题 程序运行情况:给外部中
[下一篇帖子]:寻求合作:温度控制PID算法我们公司开发的一个控制器系统需温度精确控制,要用PID算法(用C语言),