标题:
求一个51单片机测量电机转速的c程序
[打印本页]
作者:
everglow-123
时间:
2018-1-5 00:19
标题:
求一个51单片机测量电机转速的c程序
已经有一个广电传感器,作用是测电机转速然后显示在LED屏幕上。 之前用中断写一直没有成功,不知道大家能不能给个模版参考
作者:
村风
时间:
2018-1-5 10:43
广电?光电对射传感器吧,一般精度的用中断配合定时器就OK了,如果要更高精度和更高转速范围的,可以分段,低频测波长,高频测脉冲个数的方法可以很精确。
作者:
cjjcjj1
时间:
2018-1-5 23:51
提示:
作者被禁止或删除 内容自动屏蔽
作者:
刘德华二号
时间:
2018-5-16 14:05
多看看书 查查资料
作者:
18018071995
时间:
2018-5-16 14:17
看书吧
作者:
米斯特巧克力
时间:
2018-5-16 17:39
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define out P0
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x01};
int i=0;
//int TH00;
void main(void)
{
int j;
TMOD=0x15; // T0方式1计数,T1方式1定时
TH0=0; // T0计数器清零
TL0=0;
TH1=0x3C; // 12MHz晶振,T1定时50ms
TL1=0xB0;
TR0=1; // 启动T0计数器
TR1=1; // 启动T1
IE=0x88; // 允许T1中断和总中断允许
while(1)
{ P2=0x00; // 输出百位显示值
out=seg[i/100];
P2=0x02;
for(j=0;j<100;j++);
P2=0x00;
out=seg[i%100/10]; // 输出十位显示值
P2=0x04;
for(j=0;j<100;j++);
P2=0x00; out=seg[i%10]; // 输出个位显示值
P2=0x08;
for(j=0;j<100;j++);
}
}
void Timer1_ISR() interrupt 3 // T1中断程序,产生50ms 定时
{ static char j = 0;
TH1=0x3C; // 重设定时器值,50ms 定时,12MHz 晶振
TL1=0xB0;
if(++j == 20) // 是否中断20次,即50msx20次 = 1s
{ j=0;
i=(TH0 << 8)|TL0;
// 1s内的计数值即为电机转动速度,单位:转/秒
TH0=0; // T0清零
TL0=0;
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1