Bitový přístup na piny portu

Dobrý dne

Nevíte jakým způsobem zapsat bitovou hodnotu na určitý pin portu v jazyku C.
Zkoušel jsem : PC=1;
PORTC=1;

obě možnosti vyhazovaly chybu. Měl jsem použity knihovny
#include <avr/io.h>
#include <avr/iom8.h>

Následující kód funguje bez problému. Definiční soubor iom8.h je zbytečný, nečte se z avr\io.h. Spíš se podívej jesli máš správně natavený typ procesoru v projektu (Project->Configuration options). Kdybys pak chtěl používat knihovny s delay(), je nutné tam mít i nastavenou frekvenci.
Aby se ti hodnota dostala na piny potru, je nutné ho nastavit jako výstupní.

[code]#include <avr\io.h>
int main(void)
{
PORTC = 1;
for(;:wink:
{

}
return 0;

}[/code]

Omlouvám se za chybu, kterou jsem napsal na začátku a to, že jsem zkoušel příkazy :stuck_out_tongue:C1=1;
PORTC1=1;
tedy přístup přímo k jednotlivým pinům portu. Jinými slovy chci zapsat hodnotu 1 na pin číslo 0 portu C, ale ne pomocí příkazu PORTC=1. Protože nechci používat v případě např. pinu 3 příkaz PORTC=8 , ale příkaz PC3=1 který mi však nefunguje.

pomocí asm
sbi portc,3;nahodí
cbi portc,3;shodí

jinak pomocí C se to dá zapsat takto
#define SETBIT(ADRESS,BIT) (ADRESS |= (1<<BIT) )
#define CLEARBIT(ADRESS,BIT) (ADRESS &= ~(1<<BIT) )

Takhle to v C nejde, nelze pracovat s jednotlivými bity přímo. Je nutné použít nejmenší adresovatelnou jednotku ve které se bit nachází a pak pomocí logických operací bit změnit.
Pro bit č.3 portu C (=4. bit) to vypadá takto:
PORTC |= 1<<PC3; // nastavení do 1
PORTC &= ~(1<<PC3); // nastavení do 0

Nebo si můžeš definovat makra jak psal caven.
Použití pak je:
SETBIT(PORTC,3);

Cau, nemam zadny skusenosti s vasema kompilatorama C pro AVR, ale u me de pracovat primo s jednotlivymy bity (Pic , CCS), de s nim pak pracovat jakkoliv, tak u vas by to mohlo bejt taky ne , nak podobne , pokud opravdu ne tak ne no, ale je to divny

[code]
void main()
{
#bit C=0x3.0
C=0;
WHILE(TRUE)
{
if(C==0)
C=1;
if(C==1)
C=0;

}

}[/code]

Ano u kompilatoru pre PIC napr C18 to krasne ide…ale u avr zial nie…ale pouzitim makra sa to da riesit.

Tak jelikoz kompilator prelozi PORTC |= 1<<PC3; na ono sbi portc,3;
tak si myslim ze je to jedno.
Jestli se nepletu tak v Codevision se to take necha psat nejak “lepe”, u avrgcc jde jeste zapis stylem _BV() nongnu.org/avr-libc/user-manual/FAQ.html#faq_use_bv nebo to makro, ale me osobne prijde PORTC |= 1<<PC3; dostatecne citelne a prehledne a tak vubec :slight_smile: