tylim
Newbie level 4
hi, good afternoon
i want to make a communication between my pc and pic18f4520
i have the rs232 now
i am doing some object tracking with image processing
i planning to send a character to my pic every time my camera catch a new frame
i have checked the data send out from my camera, yes, it is something that i desired, a character of S,R,L,M (stop, right, left, mid) is sent
now is the problem with my pic, i think something is mistake in my code but i really don know why, can someone tell me why
here is my code
i want to make a communication between my pc and pic18f4520
i have the rs232 now
i am doing some object tracking with image processing
i planning to send a character to my pic every time my camera catch a new frame
i have checked the data send out from my camera, yes, it is something that i desired, a character of S,R,L,M (stop, right, left, mid) is sent
now is the problem with my pic, i think something is mistake in my code but i really don know why, can someone tell me why
here is my code
Code:
//*********************************************/
//* Include Header */
//*********************************************/
#include <p18f452.h>
#include <delays.h>
#include <usart.h>
#pragma config OSC=HSPLL
#pragma config OSCS=OFF
#pragma config PWRT=OFF
#pragma config BOR=OFF
#pragma config WDT=OFF
#pragma config CCP2MUX=ON
#pragma config STVR=OFF
#pragma config LVP=OFF
#pragma config DEBUG=OFF
//*********************************************/
//*********************************************/
//* Define */
//*********************************************/
#define ENB LATCbits.LATC1
#define ENA LATCbits.LATC2
#define IN1 LATAbits.LATA1
#define IN2 LATAbits.LATA2
#define IN3 LATAbits.LATA3
#define IN4 LATEbits.LATE1
#define Startled LATEbits.LATE0
#define IR PORTAbits.RA5
#define ChAR PORTBbits.RB1
#define ChBR PORTBbits.RB0
#define Start PORTAbits.RA0
#define PWM1 CCPR1L
#define PWM2 CCPR2L
//*********************************************/
//*********************************************/
//* Function Prototype */
//*********************************************/
void Init(void);
void Delay(unsigned long uldelay);
void Goright(void);
void Goleft(void);
void Gomid(void);
void Stop(void);
//*********************************************/
//*********************************************/
//* Variable */
//*********************************************/
char temp[];
char usart=0;
void rx_handler (void);
//*********************************************/
//*********************************************/
//setting interrupt vector
//*********************************************/
#pragma code rx_interrupt = 0x8
void rx_int (void)
{
_asm goto rx_handler _endasm
}
//interrupt subroutine
//=========================================================
#pragma code
#pragma interrupt rx_handler
void rx_handler (void)
{
while (!DataRdyUSART());
temp[0]=RCREG;
switch(temp[0])
{
case 'R': Goright();
break;
case 'L': Goleft();
break;
case 'M': Gomid();
break;
case 'S': Stop();
break;
}
usart=1;
//clear the flag bit
PIR1bits.RCIF = 0;
}
//*********************************************/
//* Main Function */
//*********************************************/
void Init(void)
{
TRISA = 0b00100001;
TRISB = 0b00000000;
TRISC = 0b00000000;
TRISD = 0b00110000;
TRISE = 0b00000000;
// PWM
T2CON = 0b00000101; //timer2 used for pwm
PR2 = 0xFF; //set up PWM
CCP1CON = 0b00001100; //PWM
CCP2CON = 0b00001100; //PWM
// UART setting through library
OpenUSART( USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_LOW, 1);
// Interrupt
RCONbits.IPEN = 1;
IPR1bits.RCIP = 1;
INTCONbits.GIEH = 1;
}
void main(void)
{
while(1)
{
Delay(200000);
temp[0]=RCREG;
switch(temp[0])
{
case 'R': Goright();
break;
case 'L': Goleft();
break;
case 'M': Gomid();
break;
case 'S': Stop();
break;
}
}
CloseUSART();
}
void Delay(unsigned long uldelay)
{
for( ; uldelay > 0; uldelay--);
}
void Goright()
{
PWM1=150;
PWM2=255;
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void Goleft()
{
PWM1=255;
PWM2=150;
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void Gomid()
{
PWM1=255;
PWM2=255;
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void Stop()
{
IN1 = 0;
IN2 = 0;
IN3 = 0;
IN4 = 0;
PWM1=0;
PWM2=0;
}