Re: AVR - vstupy, vystupy

Pavel Hudeček edizon na seznam.cz
Čtvrtek Červen 16 12:48:22 CEST 2011


Zda je vstupní/výstupní se nastavuje v DDR, to máte správně. Ale děláte to zbytečně krkolomně, nebo používáte hloupý překladač.

Stav nohy procesoru se čte z PIN. Výstup, nebo pull-up se ovládá v PORT.

Příklady:

DDRB=255; // nastaví port B jako výstupní
PORTB.0=1; // bit 0 nastaví na 1
if (PINB.0!=1) .... // error - pin je asi zkratován na GND

PORTB.0=0; // bit 0 nastaví na 0

DDRB.3=0; // nastaví bit 3 jako vstupní
PORTB.3=1; // na bitu 3 zapne pull-up
while (PINB.3==1) cekani();  // čekáme, až někdo stiskne tlačítko, které bit 3 spojí s GND

PORTB.3=0; // na bitu 3 vypne pull-up, od teď je to čistý vstup

PH

> Od: Michal Grunt <michal.grunt na vynet.cz>
> potreboval bych trochu poradit. Ted jsem se do problemu tak zamotal, ze uz ani
> nevim ci jsem :-) Mam trochu zmatek s tim, jak u AVR (WinAVR+GCC) dany port
> (resp. pin napr. PD6) nastavit jako vstupni (a jak z nej cist) nebo jako
> vystupni (a jak na nej zapsat 1 nebo 0)...
> 
> Zapnout PD6 jako vystupni port
> 
> #define PD6_out   DDRD |= (1<<PD6);
> 
> 
> 
> Zapsat log 1
> 
> #define PD6_log1  PORTD &= ~(1<<PD6);
> 
> Zapsat log 0
> 
> #define PD6_log0  PORTD |= (1<<PD6);
> 
> Zapnout PD6 jako vstupni port
> 
> #define PD6_in    DDRD |= (0<<PD6);
> 
> Cteni z PD6
> 
> #define PD6_read  PIND&PD6
> 
> Je to tak, nebo uplne jinak?


Další informace o konferenci Hw-list