您的位置:控制工程论坛网论坛 » 教程与手册 » 记数程序以及测转速的C程序

常青树

常青树   |   当前状态:在线

总积分:1421  2025年可用积分:0

注册时间: 2008-09-28

最后登录时间: 2012-05-30

空间 发短消息加为好友

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

常青树  发表于 2008/10/18 8:35:48      718 查看 0 回复  [上一主题]  [下一主题]

手机阅读

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

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



#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;
}
}

1楼 0 0 回复