#include <htc.h>
#include <pic.h>
__CONFIG ( 0x3F32 );
#define XTAL 20000000
//#define speed_1 RC4
//#define speed_2 RC5
#define servo RB1
#define servo1 RB2
#define servo2 RB3
#define servo3 RB4
#define servo4 RB5
#define left RA1
#define right_1 RA2
#define left_1 RA3
#define right_2 RA4
#define left_2 RA5
#define right_3 RC0
#define left_3 RC1
#define right_4 RC2
#define left_4 RC3*/
#define MHZ *1000L
#define KHZ *1
#define DelayUs(x) { unsigned short _dcnt; \
_dcnt = (((x)*(20MHZ))/(24MHZ))|1; \
while(--_dcnt != 0) \
continue; \
}
unsigned char a;
unsigned short i;
unsigned short keep=0;
unsigned short keep_1=0;
unsigned short keep_2=0;
unsigned short keep_3=0;
unsigned short keep_4=0;
unsigned short speed=2;
unsigned short speed_1=2;
unsigned short speed_2=2;
unsigned short speed_3=2;
unsigned short speed_4=2;
//unsigned short speed_temp;
unsigned char uart_rec(void) // subrountine to receive text from PC
{
while (RCIF == 0);
a = RCREG;
return a;
}
void DelayMs(unsigned short y)
{
unsigned short i;
do {
i = 4;
do {
DelayUs(250);
} while(--i);
} while(--y);
}
void main(void)
{
SPBRG=129;//0x81; // uart configuration
BRGH=1;
TXEN=1;
CREN=1;
SPEN=1;
SYNC=0;
RX9=0;
DelayMs(250);
ADCON1=0b00000111;
TRISB = 0b00000000;
PORTB = 0b00000000;
keep=232;
//......
//this is start position initialisation
//......
while(1) //a is the receive signal from controller
{ //enable continuos receive
if(OERR==0) a=uart_rec(); //receive sata if overrun error free
else CREN=0;
if(a==0x6B) {speed=2;}//k
//.......
//This part is speed selection, because the pic have limited pwm module so if use if statement to creat pwm
//......
//part below is infinite loop for controlling the 5 servo
if(a==0x61)
{if(keep>=394) {keep=394;}
else {keep=keep+speed;}
}
if(a==0x62)
{if(keep<=70) {keep=70;}
else {keep=keep-speed;}
}
// redo same statement above for the next 4 servo
//...................
servo=1;
i=keep;
for(i;0<i;--i) {DelayUs(1);}
servo=0;
// redo same statement above for the next 4 servo
//........
DelayMs(9); // the DelayMs not exactly the ms delay, i calculate from the stopwatch list of MPlab
}
}
Users browsing this forum: No registered users and 11 guests