控制工程师论坛

教程与手册

记数程序以及测转速的C程序

常青树
常青树

2008-10-18

自己写的~写的不好请大家指出~

通过小磁片对霍尔传感器所产生的电平变化进行记数。



#include<regx51.h>

unsigned char a=0; //定义外部变量,主要为记数值做一个缓冲空间。并且记数值最高值为256。

//***********************
void int0() interrupt 0
{
EX0 =0;
if(a!=255)
   P0=a++;
else
   a =0;
   P0 =a;
EX0 =1;
}

//***********************
//主程序。
void main()
{
SP =0x60;
EA =0;
IT0 =1; //下降沿触发有效。这一点是非常重要的。
EX0 =1;
EA =1;
while(1);
}
//***********************

//***************************
//和上面的程序的效果是一样的。只是有一处做了一些改动。
#include<regx51.h>

//***********************
void int0() interrupt 0
{
static unsigned char a=0xf0; //我使用了内部静态变量,而上一段程序我使用的是外部变量。但是它们达到的效果却是相同的。
     //至于两种变量的原理请自己查资料。
EX0 =0;
if(a!=255)
   P0=a++;
else
   a =0;
   P0 =a;
EX0 =1;
}

//***********************
void main()
{
SP =0x60;
EA =0;
IT0 =1;
EX0 =1;
EA =1;
while(1);
}
//*************************

//*************************
#include<regx51.h>

//*****************************
unsigned char jishu=0; //定义外部变量,主要为记数值做一个缓冲空间。并且记数值最高值为256。
//*****************************

//***********************
void int0() interrupt 0
{
EX0 =0;
if(jishu!=255)
   jishu++;
else
   jishu =0;
EX0 =1;
}
//***********************

//***********************
void delay1s()
{
unsigned char a;
TMOD =0x10;
TH1   =0x3c;
TL1   =0xb0;
TR1   =1;
for(a=0;a<=19;a++)
{
while(TF1==0);
TF1   =0;
TH1   =0x3c;
TL1   =0xb0;
}
TR1   =0;
}
//************************

//*************************
//主函数。
void main()
{
SP =0x60;
EA =0;
    IT0 =1; //下降沿触发有效。这一点是非常重要的。
EX0 =1;
EA =1;
while(1)
{
delay1s();
EX0 =0;
P0 =jishu;
delay1s();
jishu =0;
EX0 =1;
}
}

回帖

评论0

首页 | 登录 | 注册 | 返回顶部↑
手机版 | 电脑版
版权所有 Copyright(C) 2016 CE China