STC51单片机中断技术比实际多咋办

2019-03-24 17:51发布

求教高手看下我这个51中断计数问题;磁开关快速通过磁铁基本正常,慢了就会多记;程序如下。

#include<reg51.h>
#include <intrins.h>
//volatile
unsigned int count=0;
        sbit key=P3^2;
//延时函数
void delayms(unsigned int xms)
{
    unsigned int i,j;
for(i=xms;i>0;i--)        //i=xms即延时约xms毫秒
  for(j=110;j>0;j--);
}
//初始化子程序
void init()
{
key=1;
SCON=0x50; //设定串口工作方式;8位数据位,无奇偶校验;
PCON=0x00; //波特率不倍增   
TMOD=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率
//ES = 1;    //串口中断 使能
TL1=0xfd;  
TH1=0xfd;  //波特率9600
TR1=1;    //定时器1中断 使能

EX0=1;    //外部中断0 使能
IT0=1;    //外部中断0触发方式 边沿触发
EA=1;      //全局中断  开启
}
//外部中断0服务函数
void ISR_KEY(void)interrupt 0 using 1
{
EX0=0;    //外部中断0 使能
delayms(10);
if(key==0)
{
count++;
}
else
count=count;
EX0=1;    //外部中断0 使能
}
//串口服务
void ComOutChar(unsigned char OutData)
{
SBUF = OutData;     //输出字符
while(!TI);        //空语句判断字符是否发完
TI = 0;           //清TI   
}
//主函数
void main()
{
init();               //初始化中断
while(1)
{
  
  if(count!=0)
  {
  ComOutChar(count);   //开始
  delayms(1);
  }
  else
  {
   count=count;
  }
  delayms(1000);
}
}

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。