Bascom avr - configurați porturile μ

BASCOM AVR - configurați porturile MC. Conectăm butonul.

În primul rând, considerăm pe scurt și simplist structura internă a microcontrolerului. Portul are trei părți.

DDR comută modurile de funcționare ale portului - modul INPUT (intrare) sau OUTPUT (ieșire). Efectuează comutarea elementelor în microcontroler.

PORT este un set de 8 taste de ieșire care pot rezista la o sarcină de 50mA. De exemplu, puteți controla LED-ul și alte elemente externe cu o sarcină mică.

PIN-ul este un set de 8 de intrare și porți care pot fi setate ca 1 sau 0. Când este setat la nivel logic „0“, pe piciorul stabilit de tensiune MK de la 0 la aproximativ 0,1 volți când este setat la nivelul logic 1, tensiunea pe picior MK de la 2,5 volți la VCC (tensiunea de alimentare a microcontrolerului, în acest caz este de 5V).

Când executați această linie.

Deoarece PORTB.2 nu este conectat electric în interiorul MK cu circuitul de intrare, acesta poate funcționa numai în modul "ieșire".

Dacă doriți să citiți starea ieșirii portului, acest lucru trebuie făcut din PINB .2, deoarece prin aceasta se citesc datele în MK.

În ciuda faptului că, în CONFIG PORTB .2 = INPUT PORTB ilizibil 0.2, al doilea terminal este în continuare configurat pentru intrare și pot fi citite prin intermediul PIND .2.

Acum, ia în considerare toate cele de mai sus cu exemplul de prelucrare a stării butonului.

Deci, avem un buton și LED-uri (pe modulul experimental pentru MRC 40 toată această fermă este disponibilă). Butonul este conectat la piciorul a două porturi C (PORTC .2), iar LED-ul la piciorul 0 al portului B (PORTB .0). Trebuie să facem ca atunci când butonul să fie apăsat, LED-ul se aprinde.

"citiți starea portului (conectăm butonul)
„Robozone.su

$ regfile = "m32def.dat" "folosit microcontroler ATmega32 (MRC40 cu modul universal)
$ cristal = 16000000 'frecvență de cuart set 16 mHz

Config Portb.0 = Output 'configurarea ieșirii 2 a portului B la OUTPUT - conectați LED-ul la acesta
Config Pinc.2 = Intrare "configurați ieșirea de la 2 port C la INPUT - conectați butonul la acesta

Începeți ciclul programului

Dacă Pinc.2 = 0 Apoi 'CONDITION - dacă există un nivel logic scăzut pe portul 2 al portului C.
Portb.0 = 1 'setat pe picior 0 port B nivel logic ridicat (LED-ul se aprinde)
Altfel altfel.
Portb.0 = 0 'setat pe portul 0 al piciorului la nivelul logic scăzut (LED-ul este stins)
Sfârșit Dacă sfârșitul condiției
buclă
capăt

Pentru viitor, atunci când scrieți programe pentru MK, este foarte convenabil să folosiți comanda de numire ALIAS. Folosindu-l, puteți atribui nume unice variabilelor diferite.

Rescriem programul folosind comanda ALIAS.

"citiți starea portului (conectăm butonul)
„RoboZone.SU

$ regfile = "m32def.dat" "folosit microcontroler ATmega32 (MRC40 cu modul universal)
$ cristal = 16000000 'frecvență de cuart set 16 mHz

Config Portb.0 = Output 'configurarea ieșirii 2 a portului B la OUTPUT - conectați LED-ul la acesta
Config Pinc.2 = Intrare "configurați ieșirea de la 2 port C la INPUT - conectați butonul la acesta

Led Alias ​​Portb.0 'atribuiți numele de ieșire LED 0 port B
Buton Alias ​​Pinc.2 'atribui butonul la ieșirea de la 2 port C

Începeți ciclul programului

Dacă butonul = 0 Apoi 'CONDITION - dacă pe piciorul 2 al portului C este un nivel logic scăzut, atunci.
Led = 1 'setat pe picior 0 port B nivel logic ridicat (LED-ul se aprinde)
Altfel altfel.
Led = 0 'setat la portul 0 al portului B la nivelul logic scăzut (LED-ul este stins)
Sfârșit Dacă este o condiție finală

După cum puteți vedea, vizibilitatea codului programului a crescut, ajută foarte mult la scrierea programelor cu o mulțime de variabile diferite.

Oh! ... am uitat de DDR ...

E timpul să ne ocupăm de această bestie =)

Cu DDR, avem posibilitatea de a configura întregul port într-o singură linie de cod. Așa cum am scris mai sus, funcția DDR comută modurile portului. În interiorul microcontroler pinii portului sunt numerotate în ordine - 76543210. Astfel, putem instala un număr binar starea portului / PIN al portului.

Să examinăm exemplul de mai jos ...