MPLAB IDE v7.21

Marek Pavlu pavlu@hwg.cz
Pondělí Říjen 24 00:34:27 CEST 2005


Zdravim, 


No program vypada v poradku, ale myslim, ze jste zapomněl zminit, jaky typ
procesoru jste pouzil:). Totiž mnohe typy PIC mají na portech ruzne další
funkcni bloky a často jsou implicitne po startu zapnuty, takze digitalni I/O
brana se z nich teprve musí udelat.

Trebas 16F628, 16F627, 12F675, ... 
Tohle je jen par typu, které maji nohy jako analogove komparatory nebo A/D
prevodník. Tak dejste vedet, jaky typ a urcite se něco vymysli:).



//  #define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit)) 
//  static bit button @ PORTBIT(PORTA, 0); 

Tyhle dva radky jsou trosku nebo spis uplne mimo misu ANSI C:). 
Cele je to o tom, jak PICC pracuje s jednotlivym bitem na urovni syntaxe,
pricemz v ANSI C nemá "bit" co pohledavat:). 

Funguje to tak, ze mate nejakou sadu registru a chcete u konkretniho
registru pouzivat paty bit. 

Tak kompiler si vezme adresu toho registru vzhledem k pocatku registru. Coz
je ta magicka formule: 

(unsigned)(&adr) 

v prvnim radku. No ted kdyz to vynásobíte osmi, tak simuzete představit, ze
kompiler jako by chape pole registru jako bitove pole a ten nas registr
zacina nultym bitem prave na pozici udavane cislem:

(unsigned)(&adr) 

Ted když chcete paty bit, tak k tomu prictete tu petku a kompiler jakoby se
posunul v bitove adresovatelne pameti na danou pozici daneho bitu.

Ve skutecnosti to cele je jen konvence a kompiler takto nepracuje, to je jen
"jakasi" nazorna konstrukce v syntaxi PICC, aby tomu bylo lepe rozumet a

 dalo se pouzivat i typ bit. 

Na urovni asm po kompilaci se pracuje primo s požadovaným registrem a zadne
posuny v bitove pameti se nerealizuji. Predpokladam, ze jednim z duvodu
pridani typu bit bylo zlepseni optimalizace kodu.

Kdyz se bitove operace deji primo pomoci operaci and, or, xor, tak ne vzdy
to je pro slozite operace pro kompiler unosne. Treba pitome zapsani nuly
nebo jednicky jeste není velky problem a dobře se optimalizuje, ale pokud
hodlate v jednom kroku udelat několik bitovych operaci, tak se to bude na
jednom radku hemzit logickými funkcemi...

Snad jsem to rekl srozumitelne :). 



S pozdravem, 
                Marek Pavlu 

//  
//  #define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit)) 
//  static bit button @ PORTBIT(PORTA, 0); 
//  #define time 1 
//  main(void) 
//  { 
//  unsigned i; 
//  unsigned char j; 
//  TRISA = 1; /* bit 0 jako vstup */ 
//  TRISB = 0; /* veschno ven */ 
//  j = 0; 
//  for(;;) { 
//      PORTB = 0x00; /* ->0 */ 
//      for(i = time ; --i ;) 
//      continue; 
//      PORTB = j; /* set out ->j */ 
//      for(i = time ; --i ;) 
//      continue; 
//      if(button == 1){ 
//      j++; 
//      } 
//  } 
//  } 
//  
//  Jedine cemu dokonale nerozumim jsou prvni dva radky, ten prvni me nic 
//  nerika ale ten druhy je nejaka definice jednoho bitu na promennou. 
//  Puvodne jeste tam bylo jako prvni prikaz static ale to se me nezdalo a 
//  tak jsem to umazl. Budu rad za kazdou pomoc... 
//  A jeste radky s prikazem for puvodne vypadali takto: for(i = 1600 ; --i 
//  ;) ale pro krokovani jsem to upravil. 
//  
//  Pavel Prochazka.zde.cz 
//  
//  
//  ** 
//  Pavel Prochazka.zde.cz napsal(a): 
//  
//  >Dobry den, 
//  >prave jsem stahnul MPLAB IDE v7.21 a HI-TECH PICC kompiler pro cecko. 
//  >Nějaký příklad jsem už našel abych si mohl vyzkoušet jak to všechno 
//  >funguje. Kod se přeloží, akorát jsem nepřišel na to jak přeložené cecko

//  >do asm zobrazit, jinak než že se podivám na hdd a prohlidnu si 
//  výsledek. 
//  >uvítal bych kdyby se preklad ukazal v MPLABu vedle kodu v cecku abych 
//  >vedel jak co přeložil. 
//  >Po přeložení jsem si chtel  vyškoušet simulaci.  Kod bez problému 
//  >krokuji. Ale nemohu za boha přijít na to jak menit hodnoty na potrech 
//  >IO. Aby program reagoval na podnety. A vubec celkove abych mel přehled 
//  o 
//  >registrech a podobne. 
//  >Poradi nekdo? 
//  > 
//  > 
//  >Pavel Prochazka.zde.cz 
//  > 
//  > 
//  >_______________________________________________ 
//  >HW-list mailing list  -  sponsored by www.HW.cz 
//  >Hw-list@list.hw.cz 
//  >http://list.hw.cz/mailman/listinfo/hw-list 
//  > 
//  > 
//  > 
//  > 
//  > 
//  > 
//  > 
//  _______________________________________________ 
//  HW-list mailing list  -  sponsored by www.HW.cz 
//  Hw-list@list.hw.cz 
//  http://list.hw.cz/mailman/listinfo/hw-list 



  _____  

avast! Antivirus <http://www.avast.com>  : Odchozi zprava cista. 


Virova databaze (VPS): 0542-5, 21.10.2005
Testovano: 24.10.2005 0:34:27
avast! - copyright (c) 2000-2003 ALWIL Software.






Další informace o konferenci Hw-list