|
問題:
程序如下:程序可以實現(xiàn),但是我想要讓他:比如我發(fā)A他運動然后發(fā)B他立馬就會跑到B的程序里!{黃色部分}我這個程序只能A的1000次循環(huán)完了才能接受到信號B進入信號B的程序里‘
還有一個就是我想讓他到達我需要的額那個速度時可以停在那個速度上行駛!請問我該怎么修改!
新手問題多多請包涵
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a,i,flag,t,temp;
void delay(uint j) /* 簡易延時函數(shù) */
{
for(j;j>0;j--);
}
sbit IN1=P1^1;
sbit IN2=P1^2;
sbit ENA=P1^3;
sbit IN3=P1^4;
sbit IN4=P1^5;
sbit ENB=P1^6;
sbit IN11=P2^1;
sbit IN22=P2^2;
sbit ENA1=P2^7;
sbit IN33=P2^4;
sbit IN44=P2^5;
sbit ENB1=P2^6;
void init()
{
TMOD=0X22; //定時器1的方式2 八位自動重裝
SCON=0X50; //串行口工作方式1 REN=1啟動串行口接受數(shù)據(jù)
TH1=0XFD;
TL1=0XFD;
EA=1;
TR1=1;
ES=1;
// TMOD=0x02; /* 設(shè)定T0的工作模式為2 */
TH0=0x87; /* 裝入定時器的初值 ,120us,頻率83HZ*/
TL0=0x87;
EA=1;
ET0=1; /* 定時器0允許中斷 */
TR0=1;
}
void zhengjia()
{
for(i=1;i<=100;i++) //正向加速
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
IN11=1;
IN22=0;
IN33=1;
IN44=0;
delay(1000);
}
}
void zhnegjian()
{
for(i=100;i>0;i--) //正向減速
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
IN11=1;
IN22=0;
IN33=1;
IN44=0;
delay(1000);
}
}
void fanjia()
{
for(i=1;i<=100;i++) //反向加速
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
IN11=0;
IN22=1;
IN33=0;
IN44=1;
delay(1000);
}
}
void fanjian()
{
for(i=100;i>0;i--) //反向加速
{
IN1=1,
IN2=0,
IN3=1,
IN4=0,
IN11=0,
IN22=1,
IN33=0,
IN44=1,
delay(1000);
}
}
void main()
{
init();
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
TI=0;
ES=1;
switch(a)
{
case 'A': 正向加速
zhengjia();
break;
case 'B': 正向減速
zhnegjian();
break;
case 'C': 反向加速
fanjia();
break;
case 'D': 反向減速
fanjian();
break;
}
}
}
}
void timerr() interrupt 4 //串行中斷函數(shù)
{
if(RI) //發(fā)送完數(shù)據(jù)后RI=1;檢測RI是否為0
{
RI=0;
a=SBUF;
flag=1;
}
}
void timer0() interrupt 1 /* T0中斷服務程序 */
{
TH0=0xc8; /* 裝入定時器的初值 */
TL0=0xc8;
t++;
if (t<i)
{
ENA=1; ENA1=1;
ENB=1; ENB1=1;
}
else
{
ENA=0; ENA1=0;
ENB=0; ENB1=0;
}
if(t==100)
t=0;
}
|
評分
-
查看全部評分
|