Stap 5: Bedrijfswaarde de code
Als u het stroomdiagram begrepen heb zal dit vrij eenvoudig zijn
De code heeft slechts 2-functie
1) int gameByte (korte int opdracht)
2) ongeldig int_PS2inanalougemode()
int gameByte (korte int opdracht)
{
korte int i; variabele gebruikt als teller
_delay_us(1);
korte int gegevens = 0x00; Schakel gegevensvariabele om Sla instelling lage bits later.
voor (ik = 0; ik < 8; i ++) / / as 8 bytes worden overgedragen ik < 8
{
Als (command & _BV(i)) //each beetje opdracht is ge-and met 1 één voor één, dus de waarde van dat cmnd is als in de voorwaarde
{
SBI (PORTB, PScommand); Als de opdracht is een opdracht pin is ingesteld
}
anders
{
CBI (PORTB, PScommand); anders is opdracht pin nul gemaakt
}
CBI (PORTB, PSclock); KLOK LAAG
_delay_us(1); wachten voor uitvoer naar het stabiliseren
Als ((PINB & _BV(PSdata)))
{
SBI(Data, i); Lees PSdata pin en winkel
}
anders
{
CBI(Data, i);
}
SBI (PORTB, PSclock); KLOK HOGE
}
SBI (PORTB, PScommand);
_delay_us(20); wachten voor ACK geschiedde.
Return(Data);
}
VOID int_PS2inanalougemode()-
deze functie zet de controller in de analoge modus totdat deze waarde 0x73 in 2de byte die dat PS2 controller in de analoge modus ophaalt aangeeft als het geen resultaat de teller aan de stappen geeft en blijft zetten PS2 controller in de analoge modus is
int main(void)
in de hoofdlus poll we gewoon de inbreng van de PS2 controller.
video
volledige code is hier