#include #include #include /* Configs options */ #pragma config XINST = OFF /* Extended instruction set */ #pragma config FOSC = HS /* Internal osc */ #pragma config WDT = OFF /* Watchdog timer */ #pragma config LVP = OFF /* Single Supply ICSP OFF */ #pragma config MCLRE = OFF #define RRCF(F) F = ((F >> 1) | (F << 7)) #define RLCF(F) F = ((F << 1) | (F >> 7)) void rota1(void); void rota2(void); void rota3(void); void rota4(void); void rota5(void); void main(void); void main(void) { TRISD = 0; LATD = 0; TRISE = 0; LATE = 0x04; TRISB = 0xff; //LATB = 0; INTCON2bits.RBPU = 0; ADCON1 = 0x0f; uint8_t port = 0; while (1) { port = PORTB; switch (port) { case 0x01: rota1(); break; case 0x02: rota2(); break; case 0x04: rota3(); break; case 0x08: rota4(); break; case 0x10: rota5(); break; } delay1ktcy(50); // 1s @ 1MHz } } void rota1(void) { LATD = 1; while (LATD != 0x80) { delay1ktcy(150); RLCF(LATD); } return; } void rota2(void) { LATD = 0x80; while (LATD != 0x01) { delay1ktcy(150); RRCF(LATD); } return; } void rota3(void) { LATD = 0x01; while (LATD != 0x80) { delay1ktcy(150); RLCF(LATD); } LATD = 0x81; while (LATD != 0xC0) { delay1ktcy(150); LATD = LATD << 1; LATD |= 0x80; } LATD = 0xC1; while (LATD != 0xE0) { delay1ktcy(150); LATD = LATD << 1; LATD |= 0xC0; } LATD = 0xE1; while (LATD != 0xF0) { delay1ktcy(150); LATD = LATD << 1; LATD |= 0xE0; } LATD = 0xF1; while (LATD != 0xF8) { delay1ktcy(150); LATD = LATD << 1; LATD |= 0xF0; } LATD = 0xF9; while (LATD != 0xFC) { delay1ktcy(150); LATD = LATD << 1; LATD |= 0xF8; } LATD = 0xFD; while (LATD != 0xFE) { delay1ktcy(150); LATD = LATD << 1; LATD |= 0xFC; } delay1ktcy(150); LATD = 0xFE; delay1ktcy(150); LATD = 0xFF; delay1ktcy(150); return; } void rota4(void) { LATD = 1; while (LATD != 0x80) { delay1ktcy(150); RLCF(LATD); } LATD = 0x80; while (LATD != 0x01) { delay1ktcy(150); RRCF(LATD); } } void rota5(void) { LATD = 0x55; delay1ktcy(150); LATD = 0xAA; delay1ktcy(150); } /* NOTES * Looks like I can treat register like normal variables * Use PORT instead of LAT for reading * != doesnt work */