146 lines
2.8 KiB
C
Executable File
146 lines
2.8 KiB
C
Executable File
#include <pic18fregs.h>
|
|
#include <delay.h>
|
|
#include <stdint.h>
|
|
|
|
/* 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
|
|
*/
|