⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p87lpc761_控制交流电机.c

📁 P87LPC761_控制交流电机.rar
💻 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 + -