You are on page 1of 3

miniproject

#include <16F877A.h>
//

#device adc=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD,

NOWRT
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use i2c(master,slow,sda=PIN_C4,scl=PIN_C3)
//#include <lcd.c>
//!#define motor_bkd output_d(0x50);
//!#define motor_fwd output_d(0x88);
//!#define motor_lft output_d(0x10);
//!#define motor_rgt output_d(0x09);
#define led_high output_a(0xff)
#define led_low output_a(0x00)
#define motor1_en output_high(PIN_C1)
#define motor2_en output_high(PIN_C2)
#define motor1_dis output_low(PIN_C1)
#define motor2_dis output_low(PIN_C2)
#define ltrn output_d(0x80)
#define rtrn output_d (0x20)
#define fwd output_d (0x55)
#define bkd output_d (0xAA)
#define stop output_c ((input_c())&0xF8)
unsigned int i ;
signed int I2c_Data[10];
signed int x,y,z;
void motor_fwd();
void motor_bkd();
void motor_lft();
void motor_rgt();
void WriteData(unsigned char address,unsigned char data)
{
i2c_start();
i2c_write(0x98);
i2c_write(address);
i2c_write(data);
i2c_stop();
delay_ms(100);
}
void main()
{
//stop;
//motor_fwd();
set_tris_c(0x90);
printf("X");
WriteData(0x07,0x08);//////sensor module initialisation/////
WriteData(0x06,0x00);
WriteData(0x08,0x1f);
WriteData(0x09,0x00);
WriteData(0x07,0x09);
while(true)
{
//lcd_putc('\f');
//output_high(PIN_A0);
// motor_fwd();
i2c_start();
i2c_write(0x98);
i2c_write(0x00);///i2c write adress is ox98[slave address is 0x4c/////
i2c_stop();
delay_ms(10);
Page 1

miniproject
i2c_start();
i2c_write(0x99);///i2c read address is 0x99
for(i=0;i<7;i++)
{
I2c_Data[i]=i2c_read(1);//i2c read data(ack=1)//
}
I2c_Data[i]=i2c_read(0);
x=I2c_Data[0];
y=I2c_Data[1];
z=I2c_Data[2];
printf("/n/rX=%d",x);
printf(" Y=%d",y);
printf(" Z=%d",z);
//lcd_gotoxy(1,1);
//printf(lcd_putc,"X=%d",x);
//lcd_gotoxy(4,7);
//printf(lcd_putc,"Y=%d",y);
if(((x>0)&(x<12))&&((y>1)&(y<9)))
stop;
if((x>45)&&(y<9))
motor_rgt();
else
if(((x>13)&(x<30))&&(y<12))
motor_lft();
if((y>43)&&(x<10))
motor_fwd();
else
if(((y>10)&(y<30))&&(x<10))
motor_bkd();
i2c_stop();
delay_ms(500);
//!motor_bkd;
//!delay_ms(100);
//!if(x>0)
//!motor_lft;
//!if(x<0)
//!motor_rgt;
//!if(y>0);
//!motor_fwd;
//!if(y<0)
//!motor_bkd;

}
}
void motor_fwd()
{
motor1_en;
motor2_en;
fwd;
}
void motor_bkd()
{
motor1_en;
motor2_en;
bkd;
}
void motor_lft()
{motor1_en;
motor2_dis;
Page 2

miniproject
ltrn;
//if(
}
void motor_rgt()
{
motor1_dis;
motor2_en;
rtrn;
}

Page 3

You might also like