说明:使用中断测速,速度快LED亮,速度慢LED暗。
设备:
使用外部中断和定时器中断,实现里程计测速,从S到dS(V)的过程。
结合高等数学和离散时间系统,理解机器人车轮转速系统的积分和导数等概念。
程序:
#include<8052.h>
#define LSA P1_5
#define LSB P1_6
#define LSC P1_7
#define Led P0
unsigned char speed = 0;
unsigned char cnt = 0;
char a=0;
void EXint_Init(void);
void Delayms(unsigned int);
void EXINT0() __interrupt 0;
void Timer0() __interrupt 1;
void main()
{
EXint_Init();
LSA=0;
LSB=0;
LSC=0;
while(1)
{
;
}
}
void EXint_Init()
{
IT0=1;
IT1=0;
// IPH=0x40;
PX1=1;
EA=1;
EX0=1;
TMOD = 0x01;//设置定时器T0工作方式1
TL0 = 47104%256;//计数器初值
TH0 = 47104/256;
TR0 = 1;//启动定时器
ET0 = 1;//开中断
EX1=1;
}
void Delayms(unsigned int xms)
{
unsigned int i,j;
for(i = xms;i > 0;i--)
{
for (j = 110;j > 0;j--);
}
}
void EXINT0() __interrupt 0
{
speed++;
}
void Timer0() __interrupt 1 //定时器 T0 中断响应
{
TL0 = 47104%256; //计数器初值
TH0 = 47104/256;
cnt++; //计数值自加 1
if (cnt > 4) //判断 T0 溢出是否达到 5 次
{
switch(speed)
{
case 0: {P0=0xff;} break;
case 1: { Led = 0x00;
a=2;
while(a--);
Led = 0xff;
a=255;
while(a--);} break;
case 2: { Led = 0x00;
a=4;
while(a--);
Led = 0xff;
a=255;
while(a--);} break;
case 3: { Led = 0x00;
a=8;
while(a--);
Led = 0xff;
a=255;
while(a--);} break;
case 4: { Led = 0x00;
a=16;
while(a--);
Led = 0xff;
a=255;
while(a--);} break;
case 5: { Led = 0x00;
a=32;
while(a--);
Led = 0xff;
a=255;
while(a--);} break;
case 6: { Led = 0x00;
a=64;
while(a--);
Led = 0xff;
a=255;
while(a--);} break;
case 7: { Led = 0x00;
a=128;
while(a--);
Led = 0xff;
a=255;
while(a--);} break;
default:{P0=0x00;}
}
Delayms(1);
cnt=0;
speed=0;
}
}