运行程序有几种方式,我没有完全弄清楚,一般变频器的运行模式有:V/F启动、V/F分离模式、叠频模式等。
你应该是T0做,T1另外有用吧?我花了一个小时,调了一个,只计算了频率,频率低是1秒计算一次,你可以改,部分地方应该可以优化。你试试,如果可以可以把keil的项目打包发给你。程序如下:
/*
testT0T1.c
芯片:AT89C51
晶振:12MHz
*/
#include <reg51.h>
bit g_bitNewF//计算了新频率
unsigned int g_Count
unsigned int g_Timer200
unsigned long frequency
void Init(void)
{
EA = 0
//T0使用模式3,TL0计数,
TMOD = 0x07
TL0 = 0x00
//TH0计时200us
TH0 = 0x38
//启动
TF0 = 0
TF1 = 0//可以不清这两个
TR0 = 1
TR1 = 1
EA = 1
ET0 = 1
ET1 = 1
}
void main (void)
{
g_bitNewF = 0
g_Timer200 = 0
Init()
while(1)
{
if (g_bitNewF)
{
g_bitNewF = 0
//display or do something else.
}
}
}
//计数满中断
void T0_Int(void) interrupt 1
{
TL0 = 0x00
g_Count += 255
if (g_Count >65535-255) //频率大提前计算
{
g_bitNewF = 1
if (g_Timer200<10){return}//误差太大,请自己增加出错处理
frequency = ((long)g_Count*5000)/g_Timer200
}
}
//定时到中断
void T1_Int(void) interrupt 3
{
TH0 = 0x46
g_Timer200++
if (g_Timer200 == 5000)
{
g_Timer200 = 0
g_bitNewF = 1
frequency = g_Count + TL0
TL0 = 0
g_Count = 0
}
}
//end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)