diff --git a/main.c b/main.c index 77784b3..f234c55 100644 --- a/main.c +++ b/main.c @@ -2,11 +2,49 @@ #include #include "pins.h" +#define USART_BAUDRATE 9600 +#define BAUD_PRESCALE (((16000000UL/(USART_BAUDRATE*16UL)))-1) + +void loop(); + int main(){ + digitalPinMode(6, INPUT); + digitalPinMode(7, INPUT); + digitalPinMode(12, OUTPUT); + + // TODO verstehen und dann in Funktion packen + UCSR0B |= (1<>8; + UBRR0L = BAUD_PRESCALE; + while(1){ - digitalWrite(5, HIGH); - _delay_ms(1000); - digitalWrite(5, LOW); - _delay_ms(1000); + loop(); } } + +void loop(){ + /*if(DDRB&0x10){ + digitalWrite(12, HIGH); + } + else{ + digitalWrite(12, LOW); + }*/ + + // TODO verstehen und dann in Funktion packen + while(!(UCSR0A&(1< 13){ + return; + } + + if(pin < 8){ + if(mode == INPUT){ + DDRD &= ~_BV(DDD0+pin); + } + else{ + DDRD |= _BV(DDD0+pin); + } + } + else{ + pin -= 8; + + if(mode == INPUT){ + DDRB &= ~_BV(DDB0+pin); + } + else{ + DDRB |= _BV(DDB0+pin); + } + } +} + +int digitalRead(unsigned char pin){ + if(pin > 13){ + return 0; + } + + // TODO turn off pwm + + if(pin < 8){ + // pin 0-7 + return PIND&_BV(DDD0+pin); + } + + // pin 8-13 + pin -= 8; + return PINB&_BV(DDB0+pin); +} void digitalWrite(unsigned char pin, unsigned char value){ if(pin > 13){ @@ -13,7 +57,7 @@ void digitalWrite(unsigned char pin, unsigned char value){ if(pin < 8){ // pin 0-7 - DDRD |= _BV(DDD0+pin); +// DDRD |= _BV(DDD0+pin); if(value == HIGH){ PORTD |= _BV(DDD0+pin); @@ -24,7 +68,8 @@ void digitalWrite(unsigned char pin, unsigned char value){ } else{ // pin 8-13 - DDRB |= _BV(DDB0+pin); + pin -= 8; +// DDRB |= _BV(DDB0+pin); if(value == HIGH){ PORTB |= _BV(DDB0+pin); @@ -35,6 +80,27 @@ void digitalWrite(unsigned char pin, unsigned char value){ } } +void analogPinMode(unsigned char pin, unsigned char mode){ + if(pin > 7){ + return; + } + + if(mode == INPUT){ + DDRC &= ~_BV(DDC0+pin); + } + else{ + DDRC |= _BV(DDC0+pin); + } +} + +int analogRead(unsigned char pin){ + if(pin > 7){ + return 0; + } + + return PINC&_BV(DDC0+pin); +} + void analogWrite(unsigned char pin, unsigned char value){ if(pin > 7){ return; diff --git a/pins.h b/pins.h index 4af9988..7187c74 100644 --- a/pins.h +++ b/pins.h @@ -3,8 +3,15 @@ extern const unsigned char LOW; extern const unsigned char HIGH; +extern const unsigned char INPUT; +extern const unsigned char OUTPUT; +void digitalPinMode(unsigned char, unsigned char); +int digitalRead(unsigned char); void digitalWrite(unsigned char, unsigned char); + +void analogPinMode(unsigned char, unsigned char); +int analogRead(unsigned char); void analogWrite(unsigned char, unsigned char); #endif