Zufallszahlengenerator und sichere Tasterabfrage (Quelle: Roboterclub-Freiburg)

PHP-Code:
//
// uint8_t zufall()
//
// Liefert eine 8Bit Pseudozufallszahl zurück,
// die Zahlenfolge wiederholt sich spätestens nach 65535 Aufrufen
//

uint8_t zufall()
{
    static 
uint16_t startwert=0x0AA;

    
uint16_t temp;
    
uint8_t n;
        
    for(
n=1;n<8;n++)
    {
        
temp startwert;
        
startwert=startwert << 1;
    
        
temp ^= startwert;
        if ( ( 
temp 0x4000 ) == 0x4000 )
        {
            
startwert |= 1;
        }
    }
    
    return (
startwert);
}
//*******************************************************************
// uint8_t KeyPressed(void)
//
// zeigt, ob eine Taste des ASUROs gedrckt ist.
//
// Die Funktion nutzt nicht den AD-Wandler wie die Funktion Pollswitch,
// sondern fragt die Tasten direkt digital ab.
// Grund: Funktion Pollswitch arbeitet nicht zuverlaessig.
//
// 23.5.2007 ch
//
//*******************************************************************
uint8_t KeyPressed(void)
{
    
uint8_t flag;

    
DDRD &= ~SWITCHES// High Impedance ( Input ) 
    
DDRC |= (1<<PC4); // ADC-Switch-Pin to Output 
    
PORTC |= (1<<PC4); // load capacitor / Pull up 
    
Msleep(1);
    
DDRC &= ~(1<<PC4); // Set ACD-Switch to Input 
    
PORTC &= ~(1<<PC4); // High Impedance 

    
Msleep(1);

    if(
PIND&SWITCHESflag=FALSE;
    else 
flag=TRUE;

    return 
flag;