Bjarne Hansen wrote:
> Hej NG
> 
> Jeg er lige begyndt at rode lidt med en avr uC, og mangler lige at få 
> knækket en nød. Så jeg håber en af jer kan hjælpe mig.
> 
> Da man ikke kan skrive til et enkelt bit på en port, er jeg ved at lave en 
> workaround på dette ved at skrive til en funktion som så klarer resten.
> 
> Jeg har defineret port og bit for et signal, og vil gerne kunne sende disse 
> til en funktion. Hvilken data type skal jeg angive i "OutPut" funktionen ?
> Efter hvad jeg kan se i "io8515.h" filen er PORTB et alias for en 8 bit 
> register adr. og jeg regnede derfor med at jeg kunne bruge typen char, men 
> den gik ikke.
> 
> Håber i kan hjælpe, elle komme med en smart ide til hvordan man ellers 
> skriver til et enkelt bit af gangen.
> 
> Hilsen
> Bjarne
> 
> 
> Udsnit af koden
> ********************************
> #define LED0_Port   PORTB
> #define LED0_Bit    5
> 
> #define LED1_Port    PORTD
> #define LED1_Bit     2
> 
> void OutPut ( ???? Port, char Bit, char Value )
> {
>     if ( Value == 1 )
>         Port |= ( 0x01 << Bit );
>     else if ( Value == 0 )
>         Port &= ~( 0x01 << Bit );
> }
> 
> int main ( void )
> {
>     Init ();
>     OutPut ( LED0_Port, LED0_Bit, 1 );
> }
> ************************************ 
> 
> 
Du er nødt til at overføre adressen på portens output register. Altså:
void OutPut(char* Port, char Bit, Char Value)
{
      if ( Value )
          *Port |= ( 0x01 << Bit );
      else
          *Port &= ~( 0x01 << Bit );
}
int main(void)
{
     Output(&LED0_Port, LED0_Bit, 1);
}
Men det er da en noget omstændig løsning. Hvorfor ikke bare skrive
     LED0_Port |= (1<<LED0_Bit);
direkte i main()? Derved kan compileren også optimere det ned til en 
enkelt instruktion...
-- 
Med venlig hilsen / Kind regards
Jesper Larsen
               Dansk Forening for Rosport: 
www.roning.dk
                  Aarhus Studenter Roklub: 
www.asr.dk