Panda38:
E je nějaké makro - definice bitu SFR ( nebo jak se u picu jmenují) registru - buď PORT, nebo LAT - (to ví jen autor) - něco jako:
#define E PORTCbits.RC3
to je v C18 - ten XC8 neznám
nevím jak by se toto dalo definovat jako volatile
Navíc v takovém Codevisionu pro AVRka bych si v tomto případě s volatile moc nepomohl - tam to funguje tak, že prefix volatile jenom řekne překladači, aby nepoužil pro proměnnou jeden ze 32 pracovních registrů - aby nedošlo k jeho přepsání během přerušení.Obsahuje ale direktivy, opt+ a opt-, kterými vyloučím z optimalizace části kódu, které potřebuju. Přiznám, že u piců jsem to až tak detailně zatím nezkoumal.C18 nic takového neumí - snad jen vypnout optimalizaci úplně - proto ta nutnost vkládat do “nelogické” posloupnosti příkazů alespoň ten nop .
Stejně bych ale viděl zádrhel v tom, že pokud by měl “logicky” propojené
piny portu a LCD nějak takto:
PB0(LCD1) - D4
PB1(LCD2) - D5
PB2(LCD3) - D6
PB3(LCD4) - D7
tak bude posílat ta jeho funkce ten půlbyte zrcadlově obrácený.