Sari la conținut
ELFORUM - Forumul electronistilor

Incepator-Initializare Port Digital in C


spinach

Postări Recomandate

Salutam, Incercind sa scriu primul meu cod , am dat peste o problema , respectiv initializarea porturilor digitale si atribuirea unei variabile corespondente pentru fiecare pin . Am scris ce urmeaza , dar nu stiu daca este corect .Ex:// initializare port CUnsigned char a,b,c,d,e,f;// am defifinit tip variabile SFIOR=0b00000100; // am dezactivat pull-up din general //Sau SFIOR.3=1 ??? PORTC=0x11; // am definit registri corespondenti pentru fiecare pin , adica se incepe cu 0x11 si se continua cu 0x12 pt PC0 ,0x13 pt PC1 ,0x14 ptPC2 ,0x15 pt PC3 ,0x16 pt PC4 , 0x17 pt PC5, ox18 pt PC6, 0x19 pt PC7 DDRC=0b00001111; // am definit ca PC0,PC1,PC2 ,PC3 sint de tip output PORTC.0=0b1; // initializam PC0 la valoare 1 PORTC.1=0b1;//initializam PC1 la valoare 1 // PC2,PC3 va ramine la valoare 0 ASSR=0b00000100;//folosim ca functie alternanta pentru pini PC6,PC7 conectare la un cristal Extern intre TOSC1 si TOSC2 pentru asincron Timer/counter2PINC.4=a;//citim PC4PINC.5=b;//citim PC5//initializam variabile c,d,e,f C=0b0 D=0b1 E=0b0 F=0b1PORTC.0=c;//scriem valoare c in pin PC0PORTC.1=d;//scrim valoare d in pin PC1PORTC.2=e;//scrim valoare e in pin PC2PORTC.3=f;//scrim valoare f in pin PC3-functie alternanta cum se defineste ? sa inteleg ca tot ce nu este scris ramine ca default in I/O digita si numai daca atibuim o functie pinul respectiv capata o functie alternanta ???

Link spre comentariu
  • Răspunsuri 5
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • spinach

    3

  • Laci

    2

  • wingless

    1

Zile populare

Top autori în acest subiect

Ce compilator folosesti?Poate trebuie sa deschizi un topic cu technici de programare in limbajul C :)In principiu daca codul iti face ce vrei sa faca, e bine, sunt coduri mai optimizate, mai eficiente, dar in cazul tau este deajunssa aprinzi un led.

Link spre comentariu
  • 3 săptămâni mai târziu...

Salut Iti recmand sa rasfoiesti datasheetul integratului si sa te pui cat d ecat la punct cu arhitecturaUn port are de obicei corespondent 8 pini fizicide ex un port este portul Bpinii fizici sunt PB0 PB1..PB7Fizic pentru fiecare port exista intern 3 registri de 8 biti.Ramanem la exemplul cu BDDRB este registrul care spune daca cei 8 pini fizici sunt intrari sau iesiriImpliocit toti pinii sunt intrari si DDRB=0;Daca vrei sa setezi un pin ca iesire sa zicem pinul 3 trebuie sa scrii DDRB=0b00001000Am zis pinul 3 si nu pinul al treilea atentie numerotarea incepe de la pinul 0Acum cum spune si Laci e mult mai comot sa scrii asa DDRB= 1<<3;ce inseamna 1<<3 inseamna 1 mutat la stanga cu 3 pozitii adica 0b00001000Daca vrei sa pui pinul 2 3 6 iesiri scrii DDRB = 1<<2 | 1<<3 | 1<<6; etc| e operator SAU pe bitiAl doilea registru este PORTx in cazul portului B se numeste PORTB(apropo adresele unde sunt mapati nu le definesti tu PORTB=0x41 etc sunt deja definiti daca incluzi un fisier header vezi in exem,ple)Registrul PORTx este registrul de iesire Daca tu ai configurat un pin ca intrare nu ai treaba cu registrul PORT deoarece acesta este pentru iesire (decat in cazuri speciale cand vrei sa fortezi intreruperi etc)Sa spunem ca vrei sa setezi pinul 3 al portuilui Bfaci asta asaPORTB |= 1<<3;adica PORTB = PORTB | 1<<3 deci fortezi bitul 3 in 1 indiferent de valoarea lui anterioara si lasi ceilalti biti nemodificatiDaca vrei sa il resetezi (adica sa il setezi 0 logic)PORTB &= ~(1<<3)1<<3 inseamna 0b0000 1000~ negare pe biti => 0b1111 0111prin si logic lasi toti bitii neafectatiin afara de bitul 3 ep care il fortezi 0Alt registruregistrul PINx registrul de intrarePentru a vedea valoarea pinul;ui folosesti acest registru unsigned char b;PORTB = 1<<1 | 1<<3;b = PINB; //=> b=0b0000 1010 vrei sa testezi daca pinul 3 e in 1 logicif(PINB & (1<<3)) {}*****Tricksscrierea in registrul PIN de ex PINB=1<<3 face toggle acelui p[in daca era 0 il face 1 daca era 1 il face 0scrierea in PORTx cand pinul respectiv e configurat intrare (0 in DDRx) activeaza un rezistor intern de pullup daca nu ai dezactivat pull-up-urile cu SFIOR=1<

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări