标题: C8051F120单片机定时器中断函数不起作用,求分析原因 [打印本页]

作者: cheney03    时间: 2021-7-31 14:47
标题: C8051F120单片机定时器中断函数不起作用,求分析原因
本帖最后由 cheney03 于 2021-7-31 15:12 编辑

为什么  if(flag_close>4000)         {  KEY=0;} 放中断中不起作用,KEY没法置0。
而放到中断外主函数中该函数可以执行,KEY置零。
通过LED模块检测,定时器是正常计数的。

单片机源程序如下:
int flag_close;//关机标志位
sbit KEY=P4^0;//按键

void PORT_Init(void) //端口初始化
{
          SFRPAGE  = CONFIG_PAGE;
          XBR0     = 0x04;
          XBR1     = 0x00;
          XBR2     = 0x40;
          flag_open=0;
          flag_close=0;
          P0MDOUT |=0x01;
          P1MDOUT  =0x00;
          P2MDOUT  =0xff;
          P3MDOU    =0xff;   
          P4MDOUT  =0xff;
          P6MDOUT |=0x9f;
          P5MDOUT  =0x00;
          P7MDOUT  =0x00;
}


void Timer0_Init(void) //定时器0初始化
{
   char SFRPAGE_SAVE = SFRPAGE;        // Save Current SFR page

   SFRPAGE = TIMER01_PAGE;             // Set SFR page


   TH0 =0x38;//0X38;                         // Init Timer0 High register
   TL0 = 0x9F;//0x9F;                         // Set the intial Timer0 value
   TMOD = 0x01;
   CKCON|=0x08;                        // 计数器/定时器使用系统时钟
                                       // Timer0 in 8-bit reload mode
   ET0=1;                              // Timer0 interrupt enabled
   TCON = 0x10;                        // Timer0 ON

   SFRPAGE = SFRPAGE_SAVE;             // Restore SFR page
}

void Timer0_ISR (void) interrupt 1  //定时器0中断函数
{

  TH0 =0xEC;// 0X38;                         // Init Timer0 High register
  TL0 =0x78; //0x9F;                         //6M(2.5ms),12M(5ms)
  flag_close++;
  if(flag_close>4000)               
  {                                                                 
     KEY=0;
  }               
}


void main(void)
{

while(1);

}
作者: cheney03    时间: 2021-7-31 15:05
sbit LED=P4^0;

void Timer0_ISR (void) interrupt 1  //定时器0中断函数
{

  TH0 =0xEC;// 0X38;                         // Init Timer0 High register
  TL0 =0x78; //0x9F;                         //6M(2.5ms),12M(5ms)
  flag_close++
  if(flag_close>4000)               
  {                                                                 
     KEY=0;
     LED=~LED;
     flag_close=0;
  }               
}

LED正常闪烁,用示波器检测P4.0口(KEY)电平,一直维持高电平,无法置零。
作者: lkc8210    时间: 2021-7-31 15:09
flag_close++//分号呢? 编译竟然可以过?
作者: cheney03    时间: 2021-7-31 15:11
lkc8210 发表于 2021-7-31 15:09
flag_close++//分号呢? 编译竟然可以过?

复制过来的时候漏了,程序可以编译通过的。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1