Nahrada AT89S52

preco slovicko “uz”, ved uz nic rychlejsie tam ani nie je -Os je optimalizacia na dlzku kodu, obcas kupodivu vygeneruje i rychlesi kod, ale nemusi to byt pravidlo. A urcite sa da v ASM napisac casto uspornejsi a rychlejsi kod ako ten, co vygenerujge prekladac. O tom niet pochyb. Ved preco by potom program vygenerovany z C bol v konecnom dosledku i 2-3x vacsi a i 2-3x pomalsi ako v cistom ASM (ale len vtedy, ak to niekto naozaj vie, nie nejaky zaciatocnik, ani stredne pokrocily). Ale namaha je i o 5-10x mensia ako v tom ASM. A to uz je dovod, preco treba brat C vazne i na male (nemyslim PIC, tam sa skor divim, ze sa za ten pomer vlastnosti/cena vobec predavaju :slight_smile: ) jednocipy.

Pisat casove slucky v cistom C je naozaj o hubu a nikomu by som to nedoporucoval. Praca s prerusenim moze byt pre zaciatocnika tazko pochopitelna a nezrozumitelna, tomu verim.
Ale ked uz ucite zaciatocnikov

DDRx = 0xff;
for( ; ; ) {
PORTx = 0xff;

{slucka}
PORTx = 0x00;
}

preco ich nenaucit miesto DJNZ/BRNE zapnut casovac, vlozit predvolbu
a testovat v cykle pretecenie toho casovaca, alebo COMPARE MATCH? Je to rovnako zlozite ako cvicit s pinmi , pripadne testovat ich stav. Naco su komu (zaciatocnikovi) v AVR cakacie cykly?

// pre ATmega 644p

#define PREDELICKA 5 // 0 - casovac vypnuty, 1 - CLK, 2 - CLK/8, …, 5 - CLK/1024
#define CASOVA_SLUCKA 20000
#define OCF1A 0x02
#define MOD_CTC 0x08

TCCR1B = MOD_CTC + PREDELICKA;
OCR1A = CASOVA_SLUCKA;

for( ; ; ) {
if (TIFR1 & OCF1A) {
TIFR1 |= OCF1A;

/*

samotna cast BLIKATKO
ak Xtal = 14.7456MHz, potom cast BLIKATKO prebehne 1x za 0.72 sekudy

*/

} 

}

// program som pisal z hlavy, tak ma prosim nekamenujte, ak som spravil preklep, dakujem :slight_smile:

Uplne suhlasim s tym, ze pre pracu v C staci vediet naozaj len zlomok z celeho C a naviac je to len zlomok oproti vedomostiam z ASM. Opat hovorim, znalost ASM nie je na zahodenie, ale ani nahodou nie je nevyhnutna.