用89C52产生控制二相步进电机的程序,用PWM信号控制步进电机
用普通I/O口采用软件定时器中断可以模拟PWM输出
/*采用6MHz晶振,在P1.0脚上输出周期为2.5s,占空比为20%的脉冲信号*/ /*定时100ms,周期2.5s需25次中断,高电平0.5s需5次中断*/ #include <reg51.h> typedef unsigned char uchar; sbit P1_0=P1^0; uchar time=0; uchar period=25; uchar high=5; void timer0() interrupt 1 using 1 { TH0=0x3c; /*定时器初值重装载*/ TL0=0xb0; time++; if(time==high) /*高电平持续时间结束,变低*/ { P1_0=0;} else if(time==period) /*周期时间到,变高*/ { time=0; P1_0=1; } } void main() { TMOD=0x01; /*定时器0方式1*/ TH0=0x3c; /*定时器装载初值*/ TL0=0xb0; EA=1; /*开CPU中断*/ ET0=1; /*开定时器0中断*/ TR0=1;/*启动定时器0*/ while(1) /*等待中断*/ {} }