#include <stdint.h>
#include <xc.h>
#define _XTAL_FREQ 4000000
uint16_t paso=23869;
uint8_t rps=1;
uint8_t tmp;
uint8_t j=0;
const uint8_t motor [6] = {0b00011000,0b00010100,0b01000100,0b01000010,0b00100010,0b00101000};
void interrupt TIMER1 (void)
{
if(PIR1bits.TMR1IF)
{
TMR1=65536-(125000/(3*rps));
if (j >= sizeof(motor))
{
j=0;
};
PORTB = motor[j];
++j;
PIR1bits.TMR1IF = 0;
}
}
void main (void)
{
T1CON = 0b00101100; //oscilador interno, prescaler 4,fosc/4
PIR1bits.TMR1IF = 0;
PIE1bits.TMR1IE = 1;
INTCONbits.PEIE = 1;
INTCONbits.GIE = 1;
TRISB = 0;
PORTB = 0;
CMCON = 0x07; // A digitales
TRISA = 0b00000010;
TMR1 = paso;
T1CONbits.TMR1ON = 1;
while(1)
{
if(PORTAbits.RA1)
{
__delay_ms(10);
while(PORTAbits.RA1);
tmp = rps + 1;
(!tmp) ? rps = 1 : ++rps;
}
}
}