822e5d1f5aabbd6b
获得 0 次赞
帮助过0人
#include <reg52.h>unsigned char timer1;sbit DIR = P1^2;//位定义DIR为P1.0口,控制步进电机转向sbit ENA=P1^1; //位定义ENA为P1.1,控制步进电机的使能sbit PWM=P1^0;//控制输出脉冲void Delay(unsigned int t);void system_Ini() //调用子函数初始化定时器T1{ TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 TL0 = 0x33; //设置定时初值 TH0 = 0xFE; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时}void UsartInit(){SCON=0X50; //设置为工作方式1TMOD &= 0x0F; //设置定时器模式TMOD|=0X20; //设置计数器工作方式2PCON=0X80; //波特率加倍TH1=0XF3; //计数器初始值设置,注意波特率是4800的TL1=0XF3; ES=1; //打开接收中断EA=1; //打开总中断TR1=1; //打开计数器}bit receiveFlag = 0;main() {int count = 0;system_Ini(); //调用子函数初始化定时器 T1UsartInit();IE = 0X92;//开T0串口中断,开总中断10010010while(1){ if(receiveFlag) { count = 0; receiveFlag = 0; while(count < 205) { if (timer1>10) //决定这一个脉冲的周期时间,此处为0.5ms*10=5ms { timer1=0; count ++; } if (timer1<3) { PWM=0; } else { PWM = 1; } } } } }void T1zd(void) interrupt 1 //开定时器0中断 T0中断 {TH0 = 0xfe;TL0 = 0x33;timer1++;//计数+1}void Usart() interrupt 4 //串口相应中断{ RI = 0;//清除接收中断标志位 receiveFlag = 1;}void Delay(unsigned int t)//延时{ while(t--) { ; }}