请教大神 我想用按键或者串口接受数据来控制步进电机 但是只能按键控制 串口接收不到数据 是为什么?
#include<reg51.h>
unsigned char Direction=0,Speed=0;
unsigned char receiveData='0';
void UsartConfiguration();
//电机控制引脚
sbit CLK = P1^0;
sbit ENA = P1^1;
sbit DIR = P1^2;
//按键控制引脚
sbit SS_Step = P3^1;
unsigned int Tspeed[3]={20,40,100}; //调速等级表
unsigned int StepAngle[4]={25,50,60,80}; //步进角度表--90度/180度/360度/720度
bit Run_Status=0;
bit CY_status=0;
unsigned int CYCLE=20;
unsigned int cy_count=0;
unsigned PWM_count=0;
void Init_time();
void Key_scan();
void Step(unsigned int step_count);
/*void delay() //延时函数
{
unsigned int i = 200;
while (i--);
} */
void main()
{
ENA=1;
CLK=0;
DIR=0;
UsartConfiguration(); //初始化电机
Init_time(); //初始化定时器
while(1)
{
if(receiveData=='1') //转动
{
//消除抖动
Direction=1;
}
Key_scan();
Direction=0;
}
}
void Init_time() //初始化定时器
{
TMOD |= 0x01;
TH0=(65536-CYCLE)/256; //给time0装初值
TL0=(65536-CYCLE)%256;
//TH1=(65536-2000)/256; //给time1装初值
//TL1=(65536-2000)%256;
IE = 0x82;
//PT1=1; //使得time1的优先级高于time0
TR0=1; //打开两个中断
//TR1=1;
}
void Enter_Timer0() interrupt 1 //进入定时器中断
{
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
CLK=~CLK;
PWM_count++;
if(PWM_count==(2*cy_count)&&CY_status)
{
PWM_count=0;
TR0=0;
ENA=0;
}
}
void Enter_timer1() interrupt 3
{
TH1=(65536-2000)/256; //给time1装初值
TL1=(65536-2000)%256;
Key_scan();
}
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1
//TMOD=0X20; //设置计数器工作方式2
TMOD=0X21; //设置计数器工作方式2 和定时器0
PCON=0X80; //波特率加倍
//TH1=0XF4; //计数器初始值设置,注意波特率是4800的
//TL1=0XF4;
TH1=0XFA; //计数器初始值设置,注意波特率是9600的
TL1=0XFA;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1;
CLK=~CLK;
//打开计数器
}
void Usart() interrupt 4
{
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
}
/************************按键扫描程序************************
功能:读取各按键值,判断是否按下,再处理相应事件
注:按键控制程序,由于按键中断优先级高,且每个按键都设计
为弹起有效, 所以长时间按住不放会导致电机减速甚至停
止直至放开按键
*************************************************************/
void Key_scan()
{
static char j=0;
if((SS_Step==0)||(Direction=='1'))
{
Step(StepAngle[j]);
}
//}
}
/***********************角度控制函数*************************/
void Step(unsigned int step_count)
{
PWM_count=0;
CY_status=1;
cy_count=step_count;
ENA=1;
TR0=1;
}
|