programerings hjälp

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

programerings hjälp

Inlägg av Virr3 »

Kod: Markera allt

#include <avr/io.h>
#include <avr/delay.h>
#include <inttypes.h>

int main()
{
   uint16_t i;

   DDRD = _BV(PD0);

   return 1; 
}
det räcker väll för att sätta pd0 hög och som utgång?

sedan undrar jag om man behöver sätta pd0 som ingång eller är den de autmatsikt?

sedan skulle jag vilja veta hur jag ska skriva om hm.. om pb0 är hög ska pb1 vara hög och den inte är hög skal den givet vis vara låg..
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

När du startar AVR:en så nollställs PORTD och DDRD. Dvs det blir att PD0 blir ingång och högohmig.

För att sätta PD0 som hög utgång:
DDRD = _BV(PD0);
PORTD = _BV(PD0);

Det sista du pratar om åstakommer du väl enklast genom att ettställa båda bitarna samtidigt och nollställa båda samtidigt.

PORTD |= _BV(PD0)|_BV(PD1); // ettställer båda

PORTB &= ~(_BV(PD0)|_BV(PD1)); // nollställer båda
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

vet inte om du fattade riktigt.. eller så är det jag som inte förstår dig :roll:

det jag skal ha det till är en irmotagare.. så om den är hög så vill jag att en annan port ska vara hög och om den är låg så skal den vara låg med,,

alltså den varierar..
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Om PD0 är ingång och kopplad till Ir-mottagaren och om PD1 är utgång:

Kod: Markera allt

if (PIND & _BV(PD0)) // om PD0 är hög
    PORTD |= _BV(PD1); //sätt PD1 hög
else
    PORTD &= ~_BV(PD1); //sätt PD1 låg
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

la märke till att du skrev PIND

vad är de för skilnad på PORTD och PIND?

Tack föresten..
Användarvisningsbild
PaNiC
Inlägg: 2565
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

PORTx är utgående och PINx är inkommande register.

Dvs, du har en lysdiod på PORTB, 3 som du vill tända, då använder man i assembler sbi (set bit in IO register).

Exempel sbi PORTB, 3.

Om man har en knapp på PORTD, 7 så använder man i assembler sbis eller sbic (skip if bit in IO register is set respektive cleared).

Exempel sbis PIND, 7

Nu kör du ju visserligen inte assembler men jag visste inte hur jag skulle förklara det bättre :). Hoppas du förstod vad jag menade.
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

okej.. tack så mycket

ang assambler:
jag vet faktiskt inte hur jag skal göra.. jag är inte speciellt erfaren i något språk.. har funderat att byta till asmbler men ångrat mig ett flertag gånger..

vill givet vis ha det mäst effektiva språket men även det "lättaste"

viket är "bäst" av c och assambler?
när man kollar och jämför så värkar assambler lättare.. men det är kanske bara är jag?
danei
EF Sponsor
Inlägg: 26423
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Inlägg av danei »

Det beror på vad du ska göra. I vissa lägen funkar det bäst att blanda.
Användarvisningsbild
PaNiC
Inlägg: 2565
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Jag förstår inte ett jota C. Men assembler kan jag hyfsat.
Assembler är den lägsta nivå på språk som finns. Du måste själv genomföra varenda operation som ska göras.

gör det
ok
gör det
ok
gör det
ok
gör det
ok

osv.

Det har givetvis både för och nackdelar. Fördelarna är att du vet precis vad som händer i varenda klockcykel och kan därmed ha koll på exakt hur många klockcykler en operation tar.

Nackdelen är att koden kan bli ganska komplex och krånglig. Detta kan man givetvis underlätta med att nyttja subrutiner, men på det hela taget blir det ganska krångligt ändå. Ibland måste man göra tvärt om för att det ska bli rätt.

C är väl ganska effektivt. Men inget som jag iallafall skulle få för mig att programmera mikrokontrollers i. Jag har ingen aning egentligen men har fått uppfattningen att det är ganska enkelt att lära sig. Det beror helt på hur man tänker vilket som är "bäst".

Kortfattat kan man väl säga att assembler är "bättre". Man kommer närmare hårdvaran. Men C är effektivare att använda och underhålla.
Skriv svar