sâmbătă, 9 februarie 2013

Problema L3. Evaluarea unei expresii condiţionate.

      Pagina principala curs            

  Problemă. Să se evalueze expresia pentru a calcula rezultatul în dependență de o condiție. Să se realizeze evaluarea expresiei în o subrutină cu parametri de intrare și ieșire la care valorile de pe portul A și B sunt intrări, iar portul C și D - ieșiri.

     Este dat sistemul de expresii:
daca  A+B < A-7
                       C = A-B+13
                       D = A|B >>2
daca  A+B > A-7
                       C = (A-B)>>1
                       D = (A-B)<<1
daca  A+B = A-7
                       C = B-A
                       D = A


    Se recomanda informarea despre realizările construcţiilor algoritmice de bază: condiţii, selecţie, cicluri.

    Majoritatea problemelor necesare de a fi soluționate cu ajutorul unor circuite electronice presupun careva condiții și ramificări. În caz că acestea nu necesită ramificări, ele pot fi soluționate cu ajutorul electronicii analogice sau a circuitelor digitale combinaționale care vor soluționa problema mult mai rapid. De aceea trebuie să folosim corect posibilitățile microcontrollerului de a executa diferite secvențe de program in dependență de condiții.

    Microcontrollerele AVR au 2 tipuri de instrucțiuni de ramificare conditionata:
                SBxx - ignoră urmatoarea instrucțiune în caz dacă condiția este satisfăcută.
                BRxx - sare la o oarecare etichetă în caz dacă condiția este satisfăcută.

    Echivalentul acestor instrucțiuni în limbajele de nivel înalt este:

            if (condiția){
        ...
     }else{
        ...
     }

Evaluarea expresiei se va evalua într-o subrutină reintrantă. Subrutina reintrantă este o subrutină care nu depinde de variabile globale și în orice moment de timp la apelul cu același parametru vom avea același rezultat.


Schena bloc a programului:

Portul A şi B se vor pune pe intrare şi conectate la rezistenţa de Pull Up pentru colectarea rezultatelor iar C şi D pe ieşire pentru afişarea rezultatelor.
  

Schema bloc a subrutinei de prelucrare

    Unde parametrii de intrare sunt registrii de uz general R16 si R17, în R16 sau pastrat datele de pe portul A iar în R17 de pe portul B. Parametrii de iesire la fel vor fi registrii R16 si R17, in R16 se vor salva rezutlatele care se vor afisa la portul C iar in R17 rezultatele care se vor afisa la portul D.

Rezolvarea unor probleme particulare:

1) În cazul cînd este necesar de calculat asha condiţii ca:17 - B se poate proceda in felul urmator:
neg B; B+17.

2) Schimbarea valorilor a 2 registrii fără al treilea suplimentar: 
      push Rx
      push Ry
      pop Rx
      pop Ry
Astfel mai întîi se va face complementul cu 1 si apoi se aduna cu 17, ceea ce este echivalent cu 17-(-B).

3) Lucrul cu numere negative. Posibil vom avea nevoie de a introduce numere negative. Astfel înainte de a înscrie într-un registru registru de uz general datele de pe PINx se va seta flagul N din SREG prin comanda sen.
Reprezentarea numerelor negative:
Daca bitul N=0 => 0 ... 255
                N=1 => -128 ... +127

    Pagina principala curs