Motorsteuerung/V2/Motor/Motor.c
2012-10-21 16:30:14 +00:00

84 lines
1.5 KiB
C

#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
volatile uint8_t led[3] = {(1<<PB3)|(1<<PB0),(1<<PB4)|(1<<PB0),(1<<PB5)|(1<<PB0)};
volatile uint8_t motor[6] = {
(1<<PD4)|(1<<PD1),(1<<PD2)|(1<<PD1),
(1<<PD2)|(1<<PD5),(1<<PD0)|(1<<PD5),
(1<<PD0)|(1<<PD3),(1<<PD4)|(1<<PD3)
};
void runon() {
for(uint8_t j=0;j<2;j++) {
for(uint8_t i=0;i<6;i++) {
PORTB = led[i%3];
PORTD = motor[i];
_delay_ms(100);
}
}
for(uint8_t j=0;j<4;j++) {
for(uint8_t i=0;i<6;i++) {
PORTB = led[i%3];
PORTD = motor[i];
_delay_ms(50);
}
}
for(uint8_t j=0;j<8;j++) {
for(uint8_t i=0;i<6;i++) {
PORTB = led[i%3];
PORTD = motor[i];
_delay_ms(20);
}
}
for(uint8_t j=0;j<16;j++) {
for(uint8_t i=0;i<6;i++) {
PORTB = led[i%3];
PORTD = motor[i];
_delay_ms(10);
}
}
for(uint8_t j=0;j<32;j++) {
for(uint8_t i=0;i<6;i++) {
PORTB = led[i%3];
PORTD = motor[i];
_delay_ms(5);
}
}
for(uint8_t j=0;j<64;j++) {
for(uint8_t i=0;i<6;i++) {
PORTB = led[i%3];
PORTD = motor[i];
_delay_ms(3);
}
}
}
ISR(PCINT1_vect) {
PORTD = 0;
while(1) {
_delay_ms(1);
}
}
int main(void) {
cli();
DDRB |= (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB0);
DDRD |= 0b11111111;
PORTB |= (1<<PB0);
sei();
runon();
while(1) {
for(uint8_t i=0;i<6;i++) {
PORTB = led[i%3];
PORTD = motor[i];
_delay_ms(2);
}
}
}