Tema: Re: Nesuprantu AtTiny45 aprasymo...
Autorius: Levas
Data: 2014-09-18 23:48:10
Viskas nusiskaito 1 baitu, t.y. 8 kojos is karto. Jei reikia pakeisti 
asmeniskai, tenka nuskaityti bukle, matematiskai pakeisti ir vel 
grazinti visa baita atgal. Po viena koja nesikeicia nors ta 
paprasciausiai padaro visokie makrosai.

DDR = kryptis, 1- tai isejimas, 0 -iejimas.
irasyti PORT = reiksme at koju. Jei uzprogramuotas isejimas, tai gaunasi 
normalus 0 ar 1, jei uzprogramuotas iejimas, pajungiamas pull-up arba 
rodos nieko.
nuskaityti PORT reiksme, tai gauti paprasciasia kas uzprogramuota ant to 
porto, bet ne jo fizine reiksme.
PIN -nuskaityti kas FIZISKAI yra ant porto.

<< tai paslinkimas bitu per tiek vietu kiek parasyta. Yra makrosas 
_BV(n) kuris atitinka (1<<n).
Makrosai PB1 ar PB4 tai siaip nesamone. Kad paprasti useriai nesipainiotu.
Jei ivaldei matematika, galima rasyti tiesiogiai reiksmes.

Jei i porta reikia irasyti 1 ir 4 bita,tai uztenka irasyti 2^1+2^4 arba 
pasinaudoti makrosais.

Visa sita pornografija supaprastina preprocesoriaus ir neitakojo 
programos ilgiui ir jos veikimo greiciui.


Vienisiems bitams rekomenduoju pasidaryti makrosus:
#define bit_togle	PORTC ^= _BV(5)
#define bit_high	PORTC|= _BV(5)
#define bit_lo		PORTC &= ~_BV(5)

Sie makrosai pasirupina kitu bitu bukle.

On 2014.09.18 22:31, Shadowed wrote:
> Vienu zodziu skaitau datascheeta ir neaisku man toks dalykas:
>
> The following code example shows how to set port B pins 0 and 1 high, 2
> and 3 low, and define the port pins from
> 4 to 5 as input with a pull-up assigned to port pin 4. The resulting pin
> values are read back again, but as previously
> discussed, a nop instruction is included to be able to read back the
> value recently assigned to some of the pins.
>
> unsigned char i;
> ...
> /* Define pull-ups and set outputs high */
> /* Define directions for port pins */
> PORTB = (1<<PB4)|(1<<PB1)|(1<<PB0);
> DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);
> /* Insert nop for synchronization*/
> _NOP();
> /* Read port pins */
> i = PINB;
> ...
>
> Ok, tai PORTB nustato zema arba auksta lygi atitinkamose kojose, bet
> kodel cia raso kad PB0 ir PB1 aukstam, o PB2 ir PB3 zemam lygiuose ? Ar
> neturetu buti portai PB0, PB1 ir PB4 auksti, o PB2, PB3 ir PB5 zemi?
> tada su DataDirectionRegisterB - raso, kad nuo PB4 iki PB5 pinu yra
> inputai, nors man atrodo kad cia inputai turetu buti PB0, PB1, PB2 ir PB3.

-- 
Bye, Levas

--
http://www.vabolis.lt