/* ------------------------------------------------- mpx_2conc.h - Abstraktion der I/O Ports Bsp. dem alle Portpins folgen: PA1_output_init() // initialisiert PA1 als Ausgang PA1_set() // setzt den Portpin PA1 PA1_clr() // loescht den Portpin PA1 PA1_input_init() // initialisiert PA1 als Eingang mit Pull-Up Widerstand is_PA1() // liest den Portpin PA1 ein - Erstellung von Makros, die das Setzen/Loeschen von Multiplexleitungen sowie den einzelnen Segmenten erleichtern: kseg0_init() kseg1_init() a_seginit() a_segset() a_segclr() . . g_seginit() g_segset() g_segclr() 07.02.22 by R. Seelig -------------------------------------------------- */ // Bitmasken // ---------------------------------------------- #define MASK0 ( 1 << 0 ) #define MASK1 ( 1 << 1 ) #define MASK2 ( 1 << 2 ) #define MASK3 ( 1 << 3 ) #define MASK4 ( 1 << 4 ) #define MASK5 ( 1 << 5 ) #define MASK6 ( 1 << 6 ) #define MASK7 ( 1 << 7 ) // PortA // ----------------------------------------------- #define PA0_output_init() ( DDRA |= MASK0 ) #define PA0_set() ( PORTA |= MASK0 ) #define PA0_clr() ( PORTA &= ~MASK0 ) #define PA0_input_init() { DDRA &= ~MASK0; PORTA |= MASK0; } #define is_PA0() ( (PINA & MASK0) >> 0 ) #define PA1_output_init() ( DDRA |= MASK1 ) #define PA1_set() ( PORTA |= MASK1 ) #define PA1_clr() ( PORTA &= ~MASK1 ) #define PA1_input_init() { DDRA &= ~MASK1; PORTA |= MASK1; } #define is_PA1() ( (PINA & MASK1) >> 1 ) #define PA2_output_init() ( DDRA |= MASK2 ) #define PA2_set() ( PORTA |= MASK2 ) #define PA2_clr() ( PORTA &= ~MASK2 ) #define PA2_input_init() { DDRA &= ~MASK2; PORTA |= MASK2; } #define is_PA2() ( (PINA & MASK2) >> 2 ) #define PA3_output_init() ( DDRA |= MASK3 ) #define PA3_set() ( PORTA |= MASK3 ) #define PA3_clr() ( PORTA &= ~MASK3 ) #define PA3_input_init() { DDRA &= ~MASK3; PORTA |= MASK3; } #define is_PA3() ( (PINA & MASK3) >> 3 ) #define PA4_output_init() ( DDRA |= MASK4 ) #define PA4_set() ( PORTA |= MASK4 ) #define PA4_clr() ( PORTA &= ~MASK4 ) #define PA4_input_init() { DDRA &= ~MASK4; PORTA |= MASK4; } #define is_PA4() ( (PINA & MASK4) >> 4 ) #define PA5_output_init() ( DDRA |= MASK5 ) #define PA5_set() ( PORTA |= MASK5 ) #define PA5_clr() ( PORTA &= ~MASK5 ) #define PA5_input_init() { DDRA &= ~MASK5; PORTA |= MASK5; } #define is_PA5() ( (PINA & MASK5) >> 5 ) #define PA6_output_init() ( DDRA |= MASK6 ) #define PA6_set() ( PORTA |= MASK6 ) #define PA6_clr() ( PORTA &= ~MASK6 ) #define PA6_input_init() { DDRA &= ~MASK6; PORTA |= MASK6; } #define is_PA6() ( (PINA & MASK6) >> 6 ) #define PA7_output_init() ( DDRA |= MASK7 ) #define PA7_set() ( PORTA |= MASK7 ) #define PA7_clr() ( PORTA &= ~MASK7 ) #define PA7_input_init() { DDRA &= ~MASK7; PORTA |= MASK7; } #define is_PA7() ( (PINA & MASK7) >> 7 ) // PortB // ----------------------------------------------- #define PB0_output_init() ( DDRB |= MASK0 ) #define PB0_set() ( PORTB |= MASK0 ) #define PB0_clr() ( PORTB &= ~MASK0 ) #define PB0_input_init() { DDRB &= ~MASK0; PORTB |= MASK0; } #define is_PB0() ( (PINB & MASK0) >> 0 ) #define PB1_output_init() ( DDRB |= MASK1 ) #define PB1_set() ( PORTB |= MASK1 ) #define PB1_clr() ( PORTB &= ~MASK1 ) #define PB1_input_init() { DDRB &= ~MASK1; PORTB |= MASK1; } #define is_PB1() ( (PINB & MASK1) >> 1 ) #define PB2_output_init() ( DDRB |= MASK2 ) #define PB2_set() ( PORTB |= MASK2 ) #define PB2_clr() ( PORTB &= ~MASK2 ) #define PB2_input_init() { DDRB &= ~MASK2; PORTB |= MASK2; } #define is_PB2() ( (PINB & MASK2) >> 2 ) #define PB3_output_init() ( DDRB |= MASK3 ) #define PB3_set() ( PORTB |= MASK3 ) #define PB3_clr() ( PORTB &= ~MASK3 ) #define PB3_input_init() { DDRB &= ~MASK3; PORTB |= MASK3; } #define is_PB3() ( (PINB & MASK3) >> 3 ) // ---------------------------------------------------------------- // Praeprozessormacros um 2 Stringtexte zur weiteren Verwendung // innerhalb des Praeprozessors zu verknuepfen // // Bsp.: // #define ionr A // #define ioport CONC(PORT, ionr) // // ioport wird nun als "PORTA" behandelt // ---------------------------------------------------------------- #define CONC2EXP(a,b) a ## b #define CONC(a,b) CONC2EXP(a, b) #define kseg1_init() CONC(P,CONC(kseg1,_output_init())) #define kseg1_set() CONC(P,CONC(kseg1,_set())) #define kseg1_clr() CONC(P,CONC(kseg1,_clr())) #define kseg0_init() CONC(P,CONC(kseg0,_output_init())) #define kseg0_set() CONC(P,CONC(kseg0,_set())) #define kseg0_clr() CONC(P,CONC(kseg0,_clr())) #define a_seginit() CONC(P,CONC(seg_a,_output_init())) #define a_segset() CONC(P,CONC(seg_a,_set())) #define a_segclr() CONC(P,CONC(seg_a,_clr())) #define b_seginit() CONC(P,CONC(seg_b,_output_init())) #define b_segset() CONC(P,CONC(seg_b,_set())) #define b_segclr() CONC(P,CONC(seg_b,_clr())) #define c_seginit() CONC(P,CONC(seg_c,_output_init())) #define c_segset() CONC(P,CONC(seg_c,_set())) #define c_segclr() CONC(P,CONC(seg_c,_clr())) #define d_seginit() CONC(P,CONC(seg_d,_output_init())) #define d_segset() CONC(P,CONC(seg_d,_set())) #define d_segclr() CONC(P,CONC(seg_d,_clr())) #define e_seginit() CONC(P,CONC(seg_e,_output_init())) #define e_segset() CONC(P,CONC(seg_e,_set())) #define e_segclr() CONC(P,CONC(seg_e,_clr())) #define g_seginit() CONC(P,CONC(seg_g,_output_init())) #define g_segset() CONC(P,CONC(seg_g,_set())) #define g_segclr() CONC(P,CONC(seg_g,_clr())) #define f_seginit() CONC(P,CONC(seg_f,_output_init())) #define f_segset() CONC(P,CONC(seg_f,_set())) #define f_segclr() CONC(P,CONC(seg_f,_clr())) #define dp_seginit() CONC(P,CONC(seg_dp,_output_init())) #define dp_segset() CONC(P,CONC(seg_dp,_set())) #define dp_segclr() CONC(P,CONC(seg_dp,_clr()))