You are on page 1of 3

#include d:\mc51\8051io.

h
#include d:\mc51\8051reg.h
extern register
unsigned char speedleft,speedright;
register unsigned char high,low,flag,time;
main(){
P1=0x40;
P3=0xff;
high = 80;
low = 30;
flag = 0;
time = 50;
/*perhitungan port microkontroller
misal untuk port3 (p3)
P3_0 = 0
P3_1 = 0
P3_2 = 1
P3_3 = 1
--------------
P3_4 = 1
P3_5 = 0
P3_6 = 0
P3_7 = 0
Jumlah port ada 8 dibagi menjadi 2 kemudian masing2 didesimalkan. P3_0 s
/d P3_3 menjadi desimal digit kedua,
P3_4 s/d P3_7 menjadi desimal digit pertama.
0011 -> 3 ; 1000 ->8 ; contoh di atas menjadi 0x38
*/
tepattengah= //00100
serongkanan1= //00110 dan 00010
serongkanan2= //00011
serongkanan3= //00001
serongkiri1= //01100 dan 01000
serongkiri2= //11000
serongkiri3= //10000
Start();
while(1) {
P3|= 0x0f;
Run();
}
}
Start(){
char exit,key;
exit =1;
while(exit){
key = P1;
if((key & 0x40)==0)
exit=0;
}
}
Run(){
char sensors;
sensors = (P3 &=0x0f);
if((sensors & 0x01)==0) {
TurnRight();
flag = 1;
}
else if((sensors & 0x08)==0) {
TurnLeft();
flag = 2;
}
else if(sensors == 0x09) {
Forward(high);
flag = 0;
}
else if(((sensors==0x0b)||(sensors==0x0d))&&(flag==0))
Forward(low);
}

sensor=P3;
switch(sensor) {
case 0:
lpwm=0;rpwm=0;
if(td==1){lpwm=100;rpwm=0;}
if(td==2){lpwm=0;rpwm=100;}
break;
case 1://00000001
lpwm=100;rpwm=0;td=1;break;
case 3://00000011
lpwm=100;rpwm=20;td=1;break;
case 2://00000010
lpwm=100;rpwm=40;td=1;break;
case 6://00000110
lpwm=100;rpwm=60;td=1;break;
case 4://00000100
lpwm=100;rpwm=80;td=1;break;
case 12://00001100
lpwm=100;rpwm=100;td=0;break;
case 8: //00001000
lpwm=80;rpwm=100;td=2;break;
case 24://00011000
lpwm=60;rpwm=100;td=2;break;
case 16://00010000
lpwm=40;rpwm=100;td=2;break;
case 48://00110000
lpwm=20;rpwm=100;td=2;break;
case 32://00100000
lpwm=0;rpwm=100;td=2;break;
case 63://00111111
lpwm=100;rpwm=100;
//
Forward(char speed){
P1=0x64; //01100100
speedright = speed+10;
speedleft = speed;
delay(time);
}
TurnRight(){
P1=0x68; //01101000
speedright = low+5;
speedleft = low;
delay(time);
}
TurnLeft(){ //01010100
P1=0x54;
speedright = low+5;
speedleft = low;
delay(time);
}
Reverse(char speed){ //01011000
P1=0x58;
speedright = speed;
speedleft = speed+5;
delay(time);}

You might also like