|
#include <reg52.h>
unsigned char timer1;
sbit DIR = P1^2;//位定義DIR為P1.0口,控制步進(jìn)電機(jī)轉(zhuǎn)向
sbit ENA=P1^1; //位定義ENA為P1.1,控制步進(jìn)電機(jī)的使能
sbit PWM=P1^0;//控制輸出脈沖
void Delay(unsigned int t);
void system_Ini() //調(diào)用子函數(shù)初始化定時(shí)器T1
{
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TMOD |= 0x01; //設(shè)置定時(shí)器模式
TL0 = 0x33; //設(shè)置定時(shí)初值
TH0 = 0xFE; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
}
void UsartInit()
{
SCON=0X50; //設(shè)置為工作方式1
TMOD &= 0x0F; //設(shè)置定時(shí)器模式
TMOD|=0X20; //設(shè)置計(jì)數(shù)器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
TL1=0XF3;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計(jì)數(shù)器
}
bit receiveFlag = 0;
main()
{
int count = 0;
system_Ini(); //調(diào)用子函數(shù)初始化定時(shí)器 T1
UsartInit();
IE = 0X92;//開T0,串口中斷,開總中斷10010010
while(1)
{
if(receiveFlag)
{
count = 0;
receiveFlag = 0;
while(count < 205)
{
if (timer1>10) //決定這一個(gè)脈沖的周期時(shí)間,此處為0.5ms*10=5ms
{
timer1=0;
count ++;
}
if (timer1<3)
{
PWM=0;
}
else
{
PWM = 1;
}
}
}
}
}
void T1zd(void) interrupt 1 //開定時(shí)器0中斷 T0中斷
{
TH0 = 0xfe;
TL0 = 0x33;
timer1++;//計(jì)數(shù)+1
}
void Usart() interrupt 4 //串口相應(yīng)中斷
{
RI = 0;//清除接收中斷標(biāo)志位
receiveFlag = 1;
}
void Delay(unsigned int t)//延時(shí)
{
while(t--)
{
;
}
}
|
|