自己写的~写的不好请大家指出~
通过小磁片对霍尔传感器所产生的电平变化进行记数。
#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;
}
}