📄 p87lpc761_控制交流电机.c
字号:
//飞利浦51LPC系列单片机用于控制交流电机
/*
Philips 51LPC是采用两倍速80C51内核的低成本,低功耗,低功耗,低EMI,高抗干扰性及
内建电源Brownout,模拟功能,UART,I2C和片内RC振荡器的新一代单片机.该系列目前已
包括P87LPC760/1/2/4/7/8/9共六个型号.51LPC提供高速和低速的晶振和RC振荡方式,
可编程选择具有较宽的操作电压范围2.7-6.0V,可编程I/O口线输出模式选择,可选择
施密特触发输入,LED驱动输出有内部看门狗定时器及提供掉电检测模拟功能.最大限
度地减少了外部元件的使用.这些特性和改进的C51结构结合在一起使得在设计高集成度
低成本和低功耗控制电路时具有更多的选择.该系列主要用于对系统成本有严格要求的低
功耗应用领域.
*/
#include<REG764.H>
#define uchar unsigned char
#define uint unsigned int
uchar keyflag=0;
uchar s,x,y=0;
void timer0(void) interrupt 1 using 1 { //T0 interrupt
x=x+1;
if (x/10>s) {
if (y==0){
P1=P1&0xfb; /* LED ON---P12 */
x=0;y=1;}
else {
P1=P1|0x04; /*LED OFF*/
y=0;x=0;}
}
TF0=0;
TH0=-(28/256);
TL0=-(28%256);
}
void speed(s) {
uchar pulsecount ,pulseduration=0;
uint i=0;
uint j=0;
if (((CMP1&0x02))&&!(CMP2&0x02)) //poll comparator value
{
for (i=0;i<s;i++)
{for (j=0;j<210; j++) ;} //delay trigger
CMP1=CMP1&0xfc;
CMP2=CMP2&0xfc;
pulsecount=1;
while(pulsecount)
{
P1=P1&0xfe;
pulseduration=12; //trigger pulse
while(pulseduration) {pulseduration--;}
P1=P1|0x01;
pulsecount --;
} //pulse width
} //enter windows comparator
}
void Initcomparator(void)
{
PT0AD=0x6f; /*disable P0 port digtial I/O function */
P0=0xff;
P0M1=0x2a; /* p01,p03,p05 input only */
P0M2=0xd5; /* p00,p04,p06 push pull */
P1=0xff;
P1M1=0x82; /* p17 input only for VZC */
P1M2=0x05; /*p10,p12 push pull, p11 input only */
CMP1=0x34; /* Cin1B+CMPREF+OE*/
CMP2=0x34; /* Cin2B+CMPREF+OE*/
}
void main (void)
{
uchar pulseduration=0x08;
uint i=0;
uint j=0;
uint keyflag=0;
SP=0x5f;
EA=0;
TH0=-(28/256);
TL0=-(28%256);
TF0=0;
EA=0;
TR0=0;
ET0=1;
CMP1=0;
CMP2=0;
Initcomparator();
CMP1=CMP1&0xfc;
CMP2=CMP2&0xfc;
s=0;
while (P1^1) {; } //wait press
while (!P1^1) {; } //wait release
while(P1&0x80) {};
while(!(P1&0x80)) {};
while(P1&0x80) {};
while(!(P1&0x80)) {};
while(P1&0x80) {};
P1=P1&0xfe; // P1_0=0 start up motor
while(1)
{
if (P1^1==0) {x=0;
while (!x) {;}
if(P1^1==0)
{ P1=0xff; s=s+1;} //stop motor
if (s==8) {s=0;}
while (!P1^1) {; } //wait release
while(P1&0x80) {};
while(!(P1&0x80)) {};
while(P1&0x80) {};
while(!(P1&0x80)) {};
while(P1&0x80) {};
P1=P1&0xfe; } //start up motor
EA=1;TR0=1;
speed(s);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -