Schieberegister (74HC***) an ATMega8

[2008/12/02] Da im Netz nicht viel auf Anhieb zu finden ist hier ein kleiner Code zur Ansteuerung eines – sollte recht portabel sein:

#include <avr/io.h>

#define SHIFT_PORT     PORTB
#define SHIFT_PORT_DDR DDRB
#define SHIFT_DATA     PINB0
#define SHIFT_SCK      PINB1
#define SHIFT_OUT      PINB2

void shift_out(int);

int main(void) {
	SHIFT_PORT_DDR |= (1<<SHIFT_DATA) | (1<<SHIFT_SCK) | (1<<SHIFT_OUT);
	shift_out( 0xAA );

	while (1) {
	}
}

void shift_out (int num) {
	for(int i=1; i<=128; i*=2) {
		if(num & i) {
			SHIFT_PORT |= (1 << SHIFT_DATA);
		} else {
			SHIFT_PORT &= ~(1 << SHIFT_DATA);
		}
		//clock
		SHIFT_PORT |=  (1 << SHIFT_SCK);
		SHIFT_PORT &= ~(1 << SHIFT_SCK);
	}

	//move to the pins
	SHIFT_PORT |=  (1 << SHIFT_OUT);
	SHIFT_PORT &= ~(1 << SHIFT_OUT);
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.