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

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

  
楼 主:cjfjxp 2009年4月6日12:20
 紧急求助 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?

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


  
2楼:cjfjxp 2009年4月6日13:18
 紧急求助 51 单片机的外部中断和定时器中断问题

程序运行情况:给外部中断一个下降沿,定时器1运行,n++. n加到30时,开外部中断1,但此时并未给外部中断1信号,而程序自动进入了 外部中断1中断函数,突然将3535 赋值给了n.

我需要在外部再有中断的时候才能将 3535赋值给 n。。。  但为什么MCU不听话。。。

  
3楼:红心J 2009年4月9日10:54
 只能是存在外部中断信号
n=30时允许了外部中断,此时外部中断信号引起置数。
  
4楼:litao365366 2009年4月11日14:10
 [讨论]
你在主函数里面先关关外部中断试试

>>>>>>对该主题发表你的看法

本主题贴数4,分页: [第1页]


[上一篇主题]:OP07

[下一篇主题]:寻求合作:温度控制PID算法