Blame |
Last modification |
View Log
| RSS feed
#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>
#include <avr/interrupt.h>
void sleep_ms(uint16_t ms);
#define LED_WS PB2 // LED port 1
#define LED_BL PC1 // LED port 2
#define LED_BLITZRT PC2 // LED port 3
#define LED_BLITZGN PC3 // LED port 4
#define LED_PORT5 PC4 // LED port 5
#define LED_HINTENGN PC5 // LED port 6
#define LED_HINTENRT PD4 // LED port 7
#define LED_VORNEGN PD5 // LED port 8
#define LED_UNTENGB PD6 // LED port 9
#define LED_VORNERT PD7 // LED port 10
#define LED_STATUS PB0 // LED blau - on board
#define STATUS_OFF PORTB |= (1<<LED_STATUS) //Den Portpin auf high setzen
#define STATUS_ON PORTB &= ~(1<<LED_STATUS) //Den Portpin auf low setzen
#define STATUS_TOGGLE PORTB ^= ~(1<<LED_STATUS) //Den Portpin toggeln
#define WEISS_ON PORTB |= (1<<LED_WS) //Den Portpin auf high setzen
#define WEISS_OFF PORTB &= ~(1<<LED_WS) //Den Portpin auf low setzen
#define PORT5_ON PORTC |= (1<<LED_PORT5) //Den Portpin auf high setzen
#define PORT5_OFF PORTC &= ~(1<<LED_PORT5) //Den Portpin auf low setzen
#define BLITZGN_ON PORTC |= (1<<LED_BLITZGN) //Den Portpin auf high setzen
#define BLITZGN_OFF PORTC &= ~(1<<LED_BLITZGN) //Den Portpin auf low setzen
#define BLITZRT_ON PORTC |= (1<<LED_BLITZRT) //Den Portpin auf high setzen
#define BLITZRT_OFF PORTC &= ~(1<<LED_BLITZRT) //Den Portpin auf low setzen
#define BLAU_ON PORTC |= (1<<LED_BL) //Den Portpin auf high setzen
#define BLAU_OFF PORTC &= ~(1<<LED_BL) //Den Portpin auf low setzen
#define GELB_ON PORTD |= (1<<LED_UNTENGB) //Den Portpin auf high setzen
#define GELB_OFF PORTD &= ~(1<<LED_UNTENGB) //Den Portpin auf low setzen
#define VORNGN_ON PORTD |= (1<<LED_VORNEGN) //Den Portpin auf high setzen
#define VORNGN_OFF PORTD &= ~(1<<LED_VORNEGN) //Den Portpin auf low setzen
#define HINTENGN_ON PORTC |= (1<<LED_HINTENGN) //Den Portpin auf high setzen
#define HINTENGN_OFF PORTC &= ~(1<<LED_HINTENGN) //Den Portpin auf low setzen
#define VORNRT_ON PORTD |= (1<<LED_VORNERT) //Den Portpin auf high setzen
#define VORNRT_OFF PORTD &= ~(1<<LED_VORNERT) //Den Portpin auf low setzen
#define HINTENRT_ON PORTD |= (1<<LED_HINTENRT) //Den Portpin auf high setzen
#define HINTENRT_OFF PORTD &= ~(1<<LED_HINTENRT) //Den Portpin auf low setzen
#define FAST_ALLES_OFF BLITZGN_OFF;BLITZRT_OFF;WEISS_OFF;BLAU_OFF;GELB_OFF;VORNGN_OFF;HINTENGN_OFF;VORNRT_OFF;HINTENRT_OFF;PORT5_OFF;STATUS_ON
#define FAST_ALLES_ON BLITZGN_ON;BLITZRT_ON;WEISS_ON;BLAU_ON;GELB_ON;VORNGN_ON;HINTENGN_ON;VORNRT_ON;HINTENRT_ON;PORT5_ON;STATUS_OFF
#define F_CPU 1000000UL
#ifndef F_CPU
#define F_CPU 1000000
#endif
volatile uint8_t mode = 0;
volatile uint8_t abbruch = 0;
ISR(INT1_vect)
{
// Interrupt Code
if (mode <= 3)
{
mode++;
}
else
{
mode = 0;
}
// STATUS_TOGGLE; ausgeblendet
abbruch = 1;
}
int main(void){
// Pin B |7|6|5|4|3|2|1|0
// Binär:|0|0|0|0|0|1|0|1 (b) => #05 (h)
// Pin B0 und B2 als Ausgänge festlegen
DDRB = 0x05;
// Pin C |7|6|5|4|3|2|1|0
// Binär:|0|0|1|1|1|1|1|0 (b) => #3E (h)
// Pin C1 bis C5 als Ausgänge festlegen
DDRC = 0x3E;
// Pin D |7|6|5|4|3|2|1|0
// Binär:|1|1|1|1|0|0|0|0 (b) => #F0 (h)
DDRD = 0xF0;
//Pullup für PD3 aktivieren
PORTD |= (1 << PD3);
//interrupt konfigurueren
GIMSK = 1<<INT1;
MCUCR = 1<<ISC10;
FAST_ALLES_OFF;
STATUS_OFF;
sleep_ms(3000);
STATUS_ON;
sei(); //interrupts einschalten
while(1){
abbruch = 0;
FAST_ALLES_ON;
sleep_ms(200);
FAST_ALLES_OFF;
sleep_ms(200);
}
}
void sleep_ms(uint16_t ms){
if (abbruch == 0)
{
while(ms)
{
if (abbruch != 0)
{
break;
}
else
{
ms--;
_delay_ms(1);
}
}
}
}