daimellah
Newbie
#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
}
}
#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
}
}