/* * sr_1000.c * * Created: 02.01.2024 12:07:28 * Author : Osterhase */ #include #define SR_LEN 125 // 125 x 8 => 1000 Bit Schieberegister #define EINGANG 1 // PB0 #define AUSGANG 2 // PB1 uint8_t sr[SR_LEN]; // Platz fuer Schieberegister volatile uint8_t temp, carry; int main(void) { uint8_t n; DDRB |= AUSGANG; for(n = 0; n < SR_LEN; n++) // init temp = sr[n] = 0; while (1) { carry = PINB & EINGANG; // Eingangsbit lesen if(carry) carry = 1; // unabhaengig vom verwendeten PBx else carry = 0; for(n = 0; n < SR_LEN; n++) { // ins Schieberegister schreiben temp = sr[n]; sr[n] = temp + temp + carry; // und restliche Bits verschieben carry = temp & 0x80; // naechster Uebertrag for(temp = 0; temp < 3; temp++); // Laufzeitkorrektur } if(carry) // verzoegerte Ausgabe PORTB |= AUSGANG; else PORTB &= ~AUSGANG; } }