Hallo,
ich möchte bei einem ATmega8 den Inhalt einer Variable seriell auf einem
I/O Pin rausschiften. Die SPI ist ja schon belegt. Schreibe in C unter
AVR GCC, c programmierung ist aber noch relativ neu für mich.
Habe mehrere Möglichkeiten ausprobiert. Der Code unten funktioniert,
aber ich frage mich ob es noch andere, kürzere Schreibweisen gibt??
Wie würdet ich ein shift auf ein I/O-Pin beschreiben?
1 | unsigned int shift_out(unsigned int *PORT, unsigned int pin , unsigned int shift_reg, unsigned int *portclk, unsigned int clkpin)
|
2 | {
|
3 | static int shift_cnt ;
|
4 |
|
5 | if ((shift_cnt < MAX_length-1) && (*portclk & (1 << clkpin)))
|
6 | {
|
7 | if ( (shift_reg & (1 << shift_cnt)) )
|
8 | *PORT |= (1 << pin) ; // wenn an der Stelle im shiftreg eine 1 dann pin setzen
|
9 | else
|
10 | *PORT &= ~(1 << pin) ; // wenn eine 0 dann pin auf nullsetzen
|
11 |
|
12 | shift_cnt++ ; //counter weiterzählen
|
13 | }
|
14 |
|
15 | if ((shift_cnt >= MAX_length-1) && (*portclk & (1 << clkpin)))
|
16 | {
|
17 | shift_cnt = 0 ;
|
18 | return 0 ;
|
19 | }
|
20 | else
|
21 | return 1 ;
|
22 | }
|
Vielen Dank!
Gruß an alle!