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