Řešení tohoto problému spočívá v tom, že horních 128 bajtů paměti údajů je dostupných pouze při nepřímé adresaci (tj. použití instrukcí s operandy @R0 a @R1), zatímco dolních 128 bajtů paměti údajů a 128 bajtů se SFR je dostupných při adresaci přímé.
Přesněji by mělo být uvedeno, že spodních 128 bajtů paměti je dostupných jak při přímé, tak při nepřímé adresaci.
Fakt hezkej clanek. Tohle by se mi hodilo dokud sem chodil na stredni a nutili nas programovat 51cky. Sam mam mnohem radsi avrka a nesnasim picaky na kterejch sem zacinal (aspon teda tu 14bitovou radu). Ale nejradsi mam AT91SAM7S – je to prakticky ARM7TDMI s periferiama mikrokontroleru. Trosku slozitejsi na rozjeti ale kodovani v Ccku pro to fakt stoji za to. Zadny kompromisy. Navic jde kod casto lehce portovat pro lepsi SAMy, na kterejch uz i jede linux.
Co je na ctrnactibitovych PICech tak strasneho? Co tak sleduju, tak v amaterskych konstrukcich se dost casto pouzivaji. Je fakt, ze ten assembler je trosku jiny nez Intelackej, ale s pomoci maker si clovek muze nasekat stare dobre podminene skoky :-) nebo presuny mezi registry (s meziuschovou ve W). A mit mikroradic v cene jednoho tranzistoru (±) taky neni k zahozeni…
Pokud se ti nelibi assembler PICa, tak pro nej existuje pekny prekladac C. Hledej MikroC v google a najdes ho. Neni sice zadarmo a je jenom pro woknousy, ale je fakt dobrej. Delal jsem s nim peknych par projektu od naprosto mikro projektu jako automaticke zapinani televize po zapnuti do site (program na 10 radku) az po interface pro ovladani svetel pripojeny pres ethernet a ovladatelny/configurovatelny pres web interface. To mimo jine i ukazuje na neuveritelnou flexibilitu PICu.
Ja som nepisal ze sa mi nepaci assembler PIC. Ale ked uz sme pri prekladacoch, tak to je dalsia vec v neprospech PIC. Zatial co gcc-avr predstavuje aspon v oblasti hobby defacto standard, sdcc a najma jeho pic14 port je minove pole. Komercne prekladace byvaju zvacsa platene alebo obmedzene.
Samozrejme prekladac sa da kupit alebo cracknut a prevadzkovat vo wine, program sa ma napisat tak aby sa do stringov trafil a bez riadenia behu programu modifikaciou zasobnika sa da tiez zaobist. Niekomu to moze vadit viac, niekomu menej. Troll to nazve nářkom.
Váš nářek se dá přirovnat k nářku člověka, jenž si koupil kosu, očekávaje od ní schopnosti sekačky. Jinými slovy – chyba není na straně PICů. PICy mají IMHO výhodu v tom, že se dají použít v místech, kde nahrazují pár (desítek) jednodušších logických obvodů, jejichž funkcionalitu opravdu nahradím pár stovkami instrukcí, na tišťáku mi to zabere plochu pouzdra o 8–16 vývodech, má to zanedbatelnou spotřebu a nároky na další součástky a vyjde to doslova na pár korun (ceny začínají někde na 15 korunách za kus, u AVR cca na 35). Plnohodnotný vývojový software zdarma a technická podpora 24/7 zdarma přímo u výrobce je taky velké plus. Za takových podmínek mi opravdu nemožnost hrabat se v zásobníku nepřipadá jako kardinální. Když se tu v 90. letech objevily PICy, byla to pro mě jedním slovem bomba. Dnes už s nimi sice do styku nepřicházím, ale určitě bych je nevylučoval z okruhu posuzovaných součástek při návrhu nějaké nové konstrukce.
Což mi připomíná, že si uvědomuji, že jsem v životě už měl co do činění taky s kupou různých architektur (6502, 8080, Z80, 6809, 8051, PIC, AVR, HC08, 80×86, 68k, ARM, Z180, ADSP-21) a musím konstatovat, že každá měla nějakou super vlastnost a zároveň nějakou nepříjemnou (snad kromě 6809, u níž si na nic nepříjemného nevzpomínám a dodnes je mi záhadou, proč se této technologii nedalo více prostoru – asi jediný 8bitový procesor, který pohodlně a po všech stránkách strčil do kapsy své tehdejší 16bitové současníky; pro mikrořadič na bázi 6809 by byla opravdu radost programovat). Základem ale je uvědomit si co chci přesně dělat a za jakých podmínek a z toho vycházet – to je polovina úspěchu.
Co jsem zjišťoval, tak se 6809 ve své době moc Motorole nehodila do krámu, protože byla vyvíjena paralelně k 68000 úplně jiným týmem, takže další vývoj tohoto mikroprocesoru nakonec stopli.
Je to škoda, s velkou pravděpodobností to skutečně byl nejlepší osmibitový mikroprocesor (dva zásobníky – Forth :-), dost ortogonální instrukční sada, „zadrátované“ násobení), dokonce prý jeden z posledních mikroprocesorů, které byly ručně navrženy a optimalizovány (žádný mikrokód).
Nakonec Motorola kromě mikroprocesorové řady 68000 začala dělat i mikrořadiče, ale například 68HC11 (asi jejich nejznámější mikrořadič) se spíš podobá původní 6800 než 6809 a celkově má trošku podivnou instrukční sadu.
Tak ja treba chci v mistnim elektru kopit mikrokontroler a programovat. Tady ten cenovej rozdil je 30kc za 12bitovej PICak (s tema nemam co k docineni jeste) nebo 40kc za attiny2313, kterej je vybavou nekde uplne jinde. A co se tyce ostatnich architektur, to je tady bud hodne drahy (z80, MCS 51) nebo to proste neni. Jediny co nakupuju z Prahy je AT91SAM7s protoze to stoji za to. A mimochodem i ten je na tom cenove lip nez spousta PICaku a AVRek :)
No jo, jenže je třeba si uvědomit, že ty součástky se primárně nevyrábějí kvůli hrstce domácích bastlířů. :-) Rozdíl 20 korun u jedné takové součástky může v businessu znamenat rozdíl mezi obchodním úspěchem a neúspěchem. Roli navíc hrají i další parametry, jež bastlíř obvykle příliš neřeší – např. příkon. Jestliže AVRtiny2313 bere nějakých 20 mW, zatímco PIC12F1823 cca 3 mW, je to nejspíš pro kutila úplně jedno. Ale jestli to má být např. součástí nějakého baterií napájeného bloku, kdy se šetří každý miliwatt, resp. nějakého rozsáhlejšího bloku, kdy se počítá každý miliwatt vyzářeného tepla, může to být opět dost rozhodující faktor. Důležitou roli může hrát i to, v jakých pouzdrech je ta která součástka k disposici, v jakém balení (kvůli osazovací mašině) apod.
Zkrátka profík na to musí koukat z trochu jiných úhlů pohledu. Věřím tomu, že Wozniak nebo třeba Jack Tramiel by ve svých počítačích taky bývali raději viděli Z80, než 6502, kterou tam nakonec dali. Jenže pak by se jim do ceny nevešely další komponenty – např. Spectrum za Z80 zaplatilo daň ve formě absence pořádných audio/video chipů. Podobná dilemata řešili i architekti Ondry a jeho plánovaných nástupců, pokud se chtěli dostat pod 3500,– Kčs místo tehdy obvyklých 14000,– Kčs za podobný přístroj. To pak máte korunku ke korunce, watt k wattu, jedno k druhému a je z toho gordický uzel. :-)
S tou energii se celkem nechci hadat, na to bych stejne pouzil neco uplne jinyho. Ale s tim businessem – me je to jedno :D rikam jak to funguje u tohodle ‚domaciho bastlire‘. A mimochodem Z80 i 6502 sem programoval taky, ciste proto ze tu mam C64, Didaktika M, gameboy a jeden klon Z80tky. Sice je to mozna pekny kvuli nostalgii ale ‚bohuzel‘ uz se to nejak levne koupit neda. Asi uz je to spis tak max. do nejakyho ‚revival‘ domaciho pocitace. A nepochopte me spatne, rozhodne nejsem zaujatej proti jakykoliv jiny architekture krome AVR a ARM.
na techto mikrocontrollerech jsou opravdu krasne porty. To ze jsou soucasne vstupy a vystupy (s otevrenym kolektorem, slabym pullupem a tranzistorem, ktery je pritahne nahoru po zmene z L na H), to je hardwaroveho hlediska skvela vec. A to, ze se daji ovladat po bitech, to je skvela vec zase ze softwaroveho hlediska.
8052 a jeho klony jsem mel rad, posledni projekt s nimi jsem delal pred par lety.
Dostal jsem do nej scanner s OCR. Byl to klon 8052 od ST, jmenuje se uPSD3234, delaji ho i ve verzi s USB. Takovy velky projekt se uz samozrejme neda delat v assembleru, delal jsem to v SDCC – open source kompilator C, ale rekneme si to uprimne, ten kompilator neni nic moc. Alespon pred par letama byl dost zabugovany a nepreklada optimalne. Je ovsem pravda, ze 8051 neni processor urceny pro preklad C. V assembleru se s nim pracuje dobre.
Takovy velky projekt se uz samozrejme neda delat v assembleru – v Assembleru se dělaly i tisíckrát větší projekty. ;-) Základem každého assembleristy je naučit se udržovat si přehled a vytvořit si ve svém díle systém. Řekl bych, že existuje jistá bariéra, kterou když člověk při svém potýkání se s Assemblerem překoná, dokáže pak v (makro)Assembleru naprogramovat opravdu cokoli a se srovnatelnou produktivitou, jako v kterémkoli jiném tuctovém imperativním jazyce. Je to věc, která se dá naučit, podobně jako se Javař může naučit udržovat si systém v hierarchii tříd a navrhovat je tak, že ví, že se do toho časem nezamotá. Osobně výhodu „klasických“ vyšších jazyků spatřuji především v jejich přenositelnosti. Dobře napsaný program v Assembleru je totiž určitě čitelnější, než třeba program v C, protože součástí každého dobrého assemblerského kódu je komentář v takovém rozsahu, který není obvyklý u žádného jiného jazyka (tím ovšem nemyslím komentáře typu „načti do registru X hodnotu F0“ za instrukcí typu LDX #F0; když potkám takový komentář, vždycky si vzpomenu na Vrchní, prchni – „že vám do toho kecám, ale ty stěrače, ostřikovače, to snad nemusíte hlásit, to přece vidí“).
ad slabý pullup s tranzisotrem – přiznám se, že tuto vlastnost jsem snad v životě v žádném návrhu nepoužil a ani mě zrovna nenapadá, k čemu by se to použít dalo (aniž by to byla nějaká prasárnička – možná jsem purista, ale směr toku informace by měl být v daný moment vždy jasný). Nechám se podat. :-)
Obecně se tenhle trik používá při arbitráži, kdy mezi sebou rovnocenná zařízení vybírají šéfa, viz třeba
http://www.esacademy.com/en/library/technical-articles-and-documents/miscellaneous/i2c-bus/general-introduction/bus-arbitration.html
Jiný příklad použití byla třeba Plug&Play podpora dodatečně dobastlená do specifikací ISA sběrnice.
Mrkněte i na 1-Wire, to je teprv lahůdka – jeden drát, na kterém probíhá obousměrná komunikace procesoru s periferií, z obou stran otevřené kolektory a někde pull-up odpor (a když na to přijde, tak si z toho bere periferie i potřebné napájení). Viz http://hw.cz/Rozhrani/ART1215-Sbernice-1-Wire.html
Prenositelnost, to je presne ta vec, kvuli ktere to bylo psano v C – ten samy algoritmus byl kvuli ladeni prelozitelny i pro PC, takze kdyz jsem neco precetl a OCR na tom zhavarovalo, stahnul jsem si obrazek do PC a ladil jsem algoritmus OCR az na tomto konkretnim obrazku neudelal chybu. Pak jsem nechal prohnat tim novym OCR sadu testovacich obrazku a pokud vsechno dopadlo dobre, mohl jsem program prelozit pro chip.
S prenositelnosti assembleru 8052 mam jeste jednu historku – prijimac IR, ktery prijata a vydekodovana data poslal po RS485 do PC. V nem, jak jinak 8052. Jeden uart hardwarovy, druhy uart softwarovy. Terminaly poslaly pres IR packet, ten se pres tento prijimac poslal do PC. Pozdeji bylo ovsem potreba udelat i fixni terminal, pripojeny primo po 485. Potiz byla v tom, ze terminal mel Ziloga, IR prijimac 8052. Nezbylo nez v makrech pro assembler ziloga nadefinovat instrukce 8052 a puvodni program z prijimace prelozit temito makry pro Zilog. Podarilo se :-)