#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; //设置为工作方式1
TMOD &= 0x0F; //设置定时器模式
TMOD|=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
bit receiveFlag = 0;
main()
{
int count = 0;
system_Ini(); //调用子函数初始化定时器 T1
UsartInit();
IE = 0X92;//开T0,串口中断,开总中断10010010
while(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--)
{
;
}
}
|