Portál AbcLinuxu, 30. dubna 2025 18:20
Po jednočipech pošilhávám dobře víc jak rok. Začalo to PICkama, ale ty poměrně drahé programátory mně dost odrazovaly a tulení choroba bránila v bastlení vlastního. Letos jsem objevil Atmely a zjistil že se dají programovat pomocí LPT kabelu...
Tak jsem si zakoupil dvě Megy8L a pustil se do sestrojení kabelu. Asi po týdnu jsem zanechal pokusů o programování s tím že na mojem počítači to prostě takto jednoduše nepůjde.
Už jsem byl rozhodnutý pořídit ponyprog, ale na jedné diskuzi nebo kde jsem zavadil o kontakt na borca který vyrábí USBprog. Ten mi před pár dny přišel a já jsem začal zkoušet programy na ostro.
Psaní programů v céčku je hezké, ale mně nějak víc padl do oka assembler. Bohužel to že je k dispozici "orginál" překladač céčka se projevuje nedostatkem návodů právě na ten assembler. v tomto ohledu se jako užitečné jeví seriály na programujte.com a taky stránky avr-asm-tutorial.net(bohužel anglicky)
Jako první program jsem se pokusil napsat blikač. Je to vlastně zpožďovací podprogram, +úvodní řádky které se starají o správné nastavení výstupů a dva příkazy na změnu stavu bitu na kterém je připojena LEDka.
Určitě se hodí soubor s lidským "pojmenováním" jednotlivých bitů, portů, a registrů. Soubor m8def.inc. Program překládám pomocí avra (určitě najdete v repositáři).
.include "m8def.inc" .def w=r16 rjmp main main: LDI w,$FF out DDRB,w ;učinit celý portB výstupním LDI W,LOW(ramend) ;natáhnout konec ram out SPL,W ;vložit adresu do stackpointeru LDI W,HIGH(ramend) out SPH,W ldi r18,1 ;natáhnout jedničku do r18 sbi portb,0 ;======== start: SBI portb,0 rcall cekej CBI portb,0 rcall cekej rjmp start ;======== cekej: CLR r20 CLR r21 ;nastavit na nulu wait: add r21,r18 ;přičteme 1 nop brcc wait ;skočí je li carry v nule add r20,r18 ;jedničku k béčku brcc wait ret ;návrat z podprogramu ;========
První problém byl že jsem se snažil cpát do příkazů MOV a ADD přímo čísla což nejde.Vůbec nejvíc mně zatopila skutečnost, že podprogram musí být až na konci programu. Na to nějak avra neupozorní chybovým hlášením.
Při interním oscilátoru megy nastaveném na 1MHz ledka bliká s periodou cca půl sekundy.
Je to naprogramované dost prasácky. Hlavně registry by si měl člověk nějak normálně pojmenovat. R20 a R21 se člověk splete ani neví jak. Pracovní registr (R16) je označen jako W po vzoru PICek.
Tiskni
Sdílej:
add r20, r18
, které plýtá registrem, lze použít subi r20,0xff
Vůbec nejvíc mně zatopila skutečnost, že podprogram musí být až na konci programu. Na to nějak avra neupozorní chybovým hlášením.Nemusí. Ale když ho dáš na začátek, musíš ho přeskočit. A osobně nemám rád avra, můj pokus s ním něco přeložit se ještě nikdy nepovedl. Radši používám AvrAssebler pod wine.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.