help me convert c to picbasic

Status
Not open for further replies.

daimellah

Newbie
Joined
Oct 11, 2010
Messages
1
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Visit site
Activity points
1,305
#include <16F877.h>
#device ADC=8
#use delay(clock=20000000)
#fuses HS, NOWDT, PUT, NOPROTECT, BROWNOUT, NOLVP, CPD, NOWRT, NODEBUG
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8, stream=sigPC)
#BYTE PORTB = 6
#use fast_io(A)
#use fast_io(B)
#include <stdlib.h>
#include <math.h>
#include <setjmp.h>
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <input.c>

//getting the variables needed to 4 channels of PWM output from just standard IO ports
unsigned int x;
unsigned int i;
unsigned long y;
BYTE howmanyLoops[5] = {5,5,5,5,0}; //for the delay calculation //HighByte
BYTE remainder[5] = {220,220,220,220,0}; //LowByte
BYTE goalHowmanyLoops[5] = {5,5,5,5,0};

unsigned long finaldelay; //this is for the 20ms delay calculation
BYTE finaldelayRemainder;
BYTE buttonPressed = 0;

#define BUFFER_SIZE 3 //we want 3 Bytes
BYTE buffer[BUFFER_SIZE];
BYTE currentByte = 0;

BYTE j;

#int_rda
void serial_isr()
{
if (kbhit())
{
buffer[currentByte] = getc();
currentByte++;
if (currentByte == BUFFER_SIZE) //we have received all 3 BYTES do the array modifications
{
currentByte = 0;
j = buffer[0]-1; //find out which motor we want
goalhowmanyLoops[j] = buffer[1]; //move high byte
remainder[j] = buffer[2]; //remainder is directly modified....this isn't a big change }
}
}
}
#int_ext //INT_EXT is the external interrupt used for the push button when the player finishes his move

void switch_isr()
{
if (buttonPressed == 0)
{ buttonPressed = 1;}
else
{fprintf(sigPC, "P");
buttonPressed = 0;
}
}


main()
{
//fprintf(sigPC, "Initializing... \n\r");
set_tris_a(0xFF); //set all A registers as inputs
set_tris_b(0x01); //set all B as output
PORTB = 0 ; //set immediately B as zero to avoid servo jerking]

enable_interrupts(global);
enable_interrupts(int_ext);
enable_interrupts(INT_RDA);

while(1)
{
finaldelay = 20000;
for(x=0;x<4;x++) // step through the array and send out the data to b1-b6
{
bit_set(PORTB,x+4);

for (i=0; i<howmanyLoops[x]; i++)
{delay_us(256);}
delay_us(remainder[x]);

bit_clear(PORTB,x+4);

finaldelay = finaldelay - (howmanyLoops[x]*256) - remainder[x];

}
//handle electromagnet pickup signal
y = (unsigned int)remainder[4];
if
bit_set(PORTB, 3); //setting B3 to be y
else
bit_clear(PORTB,3); //setting B3 to be y

for (i=1; i< (finaldelay >> 8); i++)
{delay_us(256);}

finaldelayRemainder = (finaldelay % 256);
delay_us(finaldelayRemainder);//this is adjustable

}
}
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…