#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--)
{
;
}
}
|