Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   921 / 1203
(#) don_peter válasza kriszrap hozzászólására (») Ápr 9, 2017 /
 
A változókat a főprogramból is tudod módosítani mert globálisnak kell lennie.
Utóbbit az óra beállítására értem.
A hozzászólás módosítva: Ápr 9, 2017
(#) kriszrap válasza don_peter hozzászólására (») Ápr 9, 2017 /
 
De akkor igaz az hogy ha ráfekszek a gombra akkor érdemes egy olyat bevezetni a szamlalo() fügvénybe hogy ha mas1 nagyobb mint 10 akkor kiszámolja a külöbséget nem? Ebben a helyzetben
Remélem nem zagyván írom..
A hozzászólás módosítva: Ápr 9, 2017
(#) don_peter válasza kriszrap hozzászólására (») Ápr 9, 2017 /
 
Én megszakítást kihagynám ebből.
Ezért írtam, hogy globális változókat használsz, tehát azokat főprogramból is tudod módosítani. Megszakítást csak hagyd békén számolni.
A hozzászólás módosítva: Ápr 9, 2017
(#) kriszrap válasza don_peter hozzászólására (») Ápr 9, 2017 /
 
  1. void nyfgy()
  2. {
  3.     if(ebaktiv!=2) //ébresztő aktiv???
  4.     {
  5.        
  6.         if(PORTB.F1== 1)//menu váltás
  7.         {
  8.                 while(PORTB.F1);
  9.                 menu++;
  10.                 kepfrissit=1;
  11.  
  12.         }else if(PORTB.F2== 1 && PORTB.F3== 1 && menu == 0)
  13.         {
  14.                 while(PORTB.F1);
  15.                 if(ebon==0) ebon=1;
  16.                 else ebon=0;
  17.         }else if((PORTB.F2== 1 || PORTB.F3== 1) && menu==0 || (PORTB.F2== 1 || PORTB.F3== 1) && menu==2)// ébresztő beállítás | óra beállítás
  18.         {
  19.                 if(PORTB.F2)
  20.                 {
  21.                         while(PORTB.F2);
  22.                         if(menu == 2)pereb1++;
  23.                         if(menu == 0)perc1++;
  24.                 }else{
  25.                         while(PORTB.F3);
  26.                         if(menu == 2)pereb1++;
  27.                         if(menu == 0)perc1++;
  28.                 }
  29.                 if(menu == 2) ebresztoszamol();
  30.                 if(menu == 0)idoszamol();
  31.                 kepfrissit=1;
  32.                
  33.         }
  34.    } else if(PORTB.F1== 1 || PORTB.F2== 1 || PORTB.F3== 1)ebaktiv=-1;
  35. }

" while(PORTB.F1);" De ezek a részek nem megállítják a fő ciklusomat???
És amig nyomva tartom nem tér rá az idoszamol() fügvényre???
(#) kriszrap hozzászólása Ápr 9, 2017 /
 
Vagy hogy lehetne átalakítani úgy hogy ne szakitsa meg a főprogramot és ne legyen pergés ??
(#) Udvari Zsombor válasza attika hozzászólására (») Ápr 9, 2017 /
 
A kijelző 4 biten menne a D4...D7 lábakat bekötve, és megtaláltam, amit írtál, tehát miért is kellene a mikroc kódból hex fordítás? Csak úgy lehetne kiírni a PICre? És végül: a videók alapján már el tudnék indulni, de egyszerűen írjam át, hogy mi melyik lábon van? Mert akkor szívesen megpróbálnám, legfeljebb meglátjuk, hogy beleférek-e 2k-ba!
(#) lokátoros válasza Udvari Zsombor hozzászólására (») Ápr 9, 2017 /
 
Idézet:
„...tehát miért is kellene a mikroc kódból hex fordítás?”

Na itt kezdődnek a gondok!
Nem akarlak bántani, de szerintem neked a compiler definíciójával érdemes elkezdeni a tanulást:
Bővebben: Link
(#) don_peter válasza kriszrap hozzászólására (») Ápr 9, 2017 /
 
14. sort még mindig nem javítottad.

A while(PORTB.F1);-el csak az F1 gomb elengedését várod.
Ha megnyomsz egy gombot az marha gyorsan teszed, nem fogod vagy tartod fél óráig.
A főprogram és a megszakítás külön szálon fut, tehát nem érdekes, ha főprogramod megszakad gombnyomás ideéig.

Feljebb írtam neked, hogy egy másik while() szerkezetben, ha tartod az egyik gombot figyelheted az összes többit, és azokkal simán beállíthatod az órát.
Nem tudom mennyire világos ez neked, de írok még egy példát:
  1. main(){ // fő program
  2.     while(1){ // fő program while
  3.         if(F1){  // F1 gomb, ha 1 vagy is le van nyomva
  4.             while(F1){ // Ameddig F1 nyomva tartod, lehet ez a SET gomb
  5.                 if(F2){
  6.                      while(F2); // ameddig F2 lenyomva tartod
  7.                     // ide jöhet F2 gombra az óra változó növelése
  8.                 }
  9.                 if(F3){
  10.                     while(F3); // ameddig F3 lenyomva tartod
  11.                      // ide jöhet F3 gombra a perc növelése
  12.                 }
  13.             }
  14.         }
  15.     }
  16. }

Ha F1-et elengeded, akkor a SET (beállításból) kilép, és öröm van.
Ez egy a sok közül amit könnyedén meg lehet valósítani.
Nem érdemes túl bonyolítani ezt.
De ebből adódóan, ha elsőnek F2-őt nyomod le akkor lehet arra is egy ilyen szerkezetet írni, és F3-ra is. A lényeg, hogy figyeld melyik gombra mit teszel és jegyezd meg..
Készíts feljegyzéseket, vagy doksit magadnak is a bonyolultabb beállításokról, tapasztalat.
A hozzászólás módosítva: Ápr 9, 2017
(#) kriszrap válasza don_peter hozzászólására (») Ápr 9, 2017 /
 
Már megírtam az elöbbi példádal Már ellöte csak a már emlitett kódót hoztam föl példáúl
Rendben köszönöm.
(#) don_peter válasza Udvari Zsombor hozzászólására (») Ápr 9, 2017 /
 
Mert csak a ".hex" állományt tudod PIC-re tölteni.
Meg kell értened, hogy minden PIC más, nem vagy csak nagyon minimális esetnél lehet (mondjuk 0.0001%-ban) ugyan azt a programot két különböző típusú PIC-re feltölteni.
Egyszerűen nem fog menni.
Vannak olyan beállítások melyeket el kell végezned a PIC pontos beállításaihoz, nem elég csak a lábakat definiálnod.
A 2kbyte-os limit meg nagyon kevés, elsőnek egy normális fordítót keress, ahol ilyen korlát nincs.
Majd keress egy leírást, amely segít a MicroC programozás alapjaiban, majd ezek után a PIC adatlapját is nézegesd, hogy melyek a kötelező beállítások, gondolom majd ebben itt is kaphatsz felvilágosítást, majd csak ezek után kezdj el foglalkozni a programozással.

Lehet, hogy most csak úgy látod, hogy csak az kell amit ez az indiai srác írt, de ez csak egy alap amelyből el lehet indulni.
Program írás közben az ember vagy 10szer alakítja át vagy módosítja a kezdeti gondolatait, mert kell még ez meg még az is...stb.

Kezd el szerintem egy LED villogtatásával, azzal kiismerheted kicsit a működést.
Csak szépen lassan, türelmesen..
(#) kriszrap hozzászólása Ápr 9, 2017 /
 
Nem akartam két kérdést egyszerre feltenni ezért most meg kérdezem.
pic10f322 állítja elö a pwmet.
Kódja :
  1. void alap(){
  2.  
  3.   TRISA=0;
  4.   PORTA=0;
  5.   TRISA.F0=1;
  6.  
  7.   ANSELA.ANSA0=1;
  8.   PWM2_Init(10000);
  9. }
  10. void main() {
  11.   int ertek=0,fenyero=0;
  12.   alap();
  13.   PWM2_start();
  14.   while(1)
  15.   {
  16.   ertek=ADC_Read(0);
  17.   if(ertek>204)fenyero=255;
  18.   else if(ertek>195)fenyero=220;
  19.   else if(ertek>190)fenyero=200;
  20.   else if(ertek>180)fenyero=160;
  21.   else if(ertek>160)fenyero=120;
  22.   else if(ertek>150)fenyero=80;
  23.   else if(ertek>140)fenyero=40;
  24.   else if(ertek<130)fenyero=20;
  25.   PWM2_Set_Duty(fenyero);
  26.   }
  27. }


és a lábon van egy 1k ellenállás bc337 tranzitor bázisán és a bc377 colectorára(10k felhuzoval) rávan kötve a 74hc595 blink lábaira(5db van belöle)

Amikor az órát átváltom BINeráis ra akkor ha 10 töb led villágit veszitenek sokat a fényeröböl mint ha töbször futna le a a kód.

Teszteltem ugy hogy a bázist felhuztam 5v ra akkor nem csinálta de ha pic10f322 visszaraktam megint elkezte.

Bin kódja(pic16f628):
  1. if(bin==1 && melyik != 7)
  2.       {
  3.             int bin_ertekek[4] = { 0, 0, 0, 0};
  4.             int i1=0;
  5.             while (ertek > 0)
  6.             {
  7.                 bin_ertekek[i1] = ertek % 2;
  8.                 ertek = ertek / 2; //ertek /=2
  9.                 i1++;
  10.             }
  11.            
  12.             for (i = meddig-1; i >= 0; i--)
  13.             {
  14.                  if(i<4)      // if(i>0 && i<5)  bin_ertekek[i-1];
  15.                 {
  16.                       PORTB.RB4=bin_ertekek[i];
  17.                 }else{
  18.                        PORTB.RB4=0;
  19.                 }
  20.                 PORTB.RB6=1; //clock
  21.  
  22.                 PORTB.RB4=0;//data
  23.                 PORTB.RB6=0;//clock
  24.             }
  25.            
  26.            
  27.       }


És nem értem miért csinálja ötlet??
A hozzászólás módosítva: Ápr 9, 2017
(#) don_peter válasza kriszrap hozzászólására (») Ápr 9, 2017 /
 
Esetleg próbáld meg csökkenteni vagy növelni a frissítés sebességét. (bináris kiírásét)
Így hirtelen ez jut eszembe..
A hozzászólás módosítva: Ápr 9, 2017
(#) kriszrap válasza don_peter hozzászólására (») Ápr 9, 2017 /
 
De akkor miért volt jó amikor felhuztam 5v ra a tranyo bázisát??
Akkor nem volt gond.
Amugy másodpercenként frissitem.
(#) Hp41C válasza kriszrap hozzászólására (») Ápr 9, 2017 /
 
Milyen jó is lenne, ha egyben lehetne látni a programot.
Emlékein szerint a timer2 -t beállítottad 10ms periodikus megszakítás kérésre. A kiszolgáló rutinban egy számlálót növelsz, ha eléri a 100 -at, beállítod, hogy növelni kell az időt.
A nyomógomb rutinokat pergésmentesítetted úgy, hogy megvárja a felengedést.
  1. if(PORTB.F1== 1)//menu váltás
  2.         {
  3.                 while(PORTB.F1);
  4. .....
  5.         }


Tekintsük azt a pillanatot, amikor a megszakítási számláló 99 -nél jár. Ekkor lenyomjuk a PORTB.F1 -re csatlakozó nyomógombot és folyamatosan lenyomva tartjuk mondjuk 1100 ms -ig. Mi történik? A while(PORTB.F1); utasításból nem tud kilépni a főprogram. Közben a megszakítás bekövetkezik, a timer2 kiszolgálója növeli a számlálót, az 100 -ra vált, jelzi, hogy az időt növelni kell, a számláló 0 -ra áll. Jönnek a következő kérések 10ms -enként. Ha ismét bejön 100 db (1000ms, a gomb még mindig le van nyomva), a számláló ismét átfordul 100 -ról 0 -ra. Bebillentené a jelzést, hogy növelni kell az időt, de hatása nincs már, mert még mindig 1. Tehát elveszett egy növelés.

Másik módszer:
Minden gombhoz felveszünk egy 8 bites regisztert és egy bites változót. A 10ms timer2 megszakításban jeleznénk a főprogramnak, hogy nézzen rá a gombokra.
A főprogram, ha rá kell néznie a gombokra, sorra beolvassa a gombhoz tartozó bemenetet (legyen a lenyomott gombhoz tartozó érték 0) és értékét belépteti a gombhoz tartozó 8 bites regiszterbe (balra léptet, az új bit a 0 pozícióba kerül), a 8 bites változó 7. bitjét 1 -re állítja. Ha a 8 bites érték 0xC0, beállítja a gombhoz tartozó jelzőbitet 1 -re.
Ha kész az össze gomb kiértékelésével, törli a "rá kell nézni a gombokra" bitet.
Megy tovább a főprogram és már a gombok jelzőbitjeit vizsgálja, ha valamelyik kiértékelésével végzett, 0 állítja a gombhoz tartozó jelzőbitet.


Akármennyi gombot is kell kezelni, a főprogram fut, jelen esetben tudja növelni az időt, ha kell.
A hozzászólás módosítva: Ápr 9, 2017
(#) kriszrap válasza Hp41C hozzászólására (») Ápr 9, 2017 /
 
Valahogy igy gondoltad:
  1. void interrupt(void){
  2.    if(TMR2IF_bit)
  3.    {
  4.      TMR2IF_bit = 0;
  5.      if(PORTB.F1== 1 || PORTB.F2== 1 || PORTB.F3== 1)
  6.      {
  7.         if(PORTB.F1 == 1)jobbgomb=1;
  8.         if(PORTB.F2 == 1)kozepgomb=1;
  9.         if(PORTB.F3 == 1)balgomb=1;
  10.      }else if(jobbgomb== 1 || kozepgomb== 1 || balgomb== 1)gombkukol=1;
  11.      
  12.      if(!--count)
  13.      {
  14.        count=100;
  15.        mas1++;
  16.        kepfrissit=1;
  17.      }
  18.    }
  19. }
  20. while(1)
  21.     {
  22.       if(gombkukol== 1) nyfgy();
  23.       if(kepfrissit == 1)
  24.       {
  25.         kepfrissit=0;
  26.         idoszamol();
  27.         ebresztocheck();
  28.         if(menu !=1 && visszaszamol != 6) visszaszamol=6;
  29.         if(menu >3) menu=0;
  30.         if(menu == 3) idokiir(ora2,ora1,perc2,perc1,mas2,mas1,1);//bin
  31.         if(menu == 2) idokiir(oreb2,oreb1,pereb2,pereb1,-1,-1,0);
  32.         if(menu == 1) homerokiir();// hömérö
  33.         if(menu == 0) idokiir(ora2,ora1,perc2,perc1,mas2,mas1,0);
  34.       }
  35.     }
  36.  
  37. void nyfgy()
  38. {
  39.     gombkukol=0;
  40.     if(ebaktiv!=2) //ébresztő aktiv???
  41.     {
  42.       if(jobbgomb==1)//menu vált
  43.       {
  44.        menu++;
  45.        kepfrissit=1;
  46.       }
  47.       if(balgomb==1 && kozepgomb== 1 && menu==0) // ébresztö on
  48.       {
  49.         kepfrissit=1;
  50.         if(ebon==0) ebon=1;
  51.         else ebon=0;
  52.       }else if(kozepgomb== 1 && balgomb== 1)// ébresztő beállítás | óra beállítás
  53.       {
  54.          kepfrissit=1;
  55.          if(balgomb==1)
  56.          {
  57.              if(menu == 2)oreb1++;
  58.              if(menu == 0)ora1++;
  59.          }
  60.          if(kozepgomb==1)
  61.          {
  62.               if(menu == 2)pereb1++;
  63.               if(menu == 0)perc1++;
  64.          }
  65.          if(menu == 2) ebresztoszamol();
  66.          if(menu == 0 )idoszamol();
  67.       }
  68.     }
  69.     else if(jobbgomb==1 || kozepgomb== 1 || balgomb== 1)ebaktiv=-1;
  70. }

Ha van benne elírás kérlek szólj
Így már jól müködhet?
A hozzászólás módosítva: Ápr 9, 2017
(#) kriszrap hozzászólása Ápr 9, 2017 /
 
Idézet:
„if(jobbgomb== 1 || kozepgomb== 1 || balgomb== 1)gombkukol=1;”

kihagytam.. ellenörizni is kéne hogy a gombokat felengedték e. Jól gondolom?
(#) Hp41C válasza kriszrap hozzászólására (») Ápr 9, 2017 /
 
Nincs benne a pergésmentesítés.
  1. void interrupt(void){
  2.    if(TMR2IF_bit)
  3.    {
  4.      TMR2IF_bit = 0;
  5.      gombkukol=1;
  6.      if(!--count)
  7.      {
  8.        count=100;
  9.        mas1++;
  10.        kepfrissit=1;
  11.      }
  12.    }
  13. }
  14. while(1)
  15.     {
  16.     if (gombkukol)
  17.     {
  18.      jobshift = (jobshift << 1) | PORTB.F1 | 0x80;
  19.      kozepshift = (kozepshift << 1) | PORTB.F2 | 0x80;
  20.      balshift = (balshift << 1) | PORTB.F1 | 0x80;
  21.     }
  22.     if(jobshift == 0xC0 ) jobbgomb=1;
  23.     if(kozepshift == 0xC0) kozepgomb=1;
  24.     if(balshift == 0xC0) balgomb=1;
  25.      gombkukol=0;
  26. ....
  27.  
  28.    if (jobgomb)
  29.    {
  30. ....
  31.       jobgomb = 0;
  32.    }    
  33. .....
(#) kriszrap hozzászólása Ápr 9, 2017 /
 
  1. jobshift = (jobshift << 1) | PORTB.F1 | 0x80;
  2.      kozepshift = (kozepshift << 1) | PORTB.F2 | 0x80;
  3.      balshift = (balshift << 1) | PORTB.F1 | 0x80;

Ez if változatba hogy nézki mert ez kinai igy nekem
(#) Hp41C válasza kriszrap hozzászólására (») Ápr 9, 2017 /
 
jobshift = (jobshift << 1) | PORTB.F1 | 0x80;

  1. jobshift <<= 1;
  2. jobshift |= 0x80;
  3. if (PORTB.F1) jobshift |= 0x01;


  1. bcf STATUS,C
  2. rlcf jobshift,f
  3. bsf jobshift,7
  4. btfsc PORTB,1
  5. bsf jobshift,0
A hozzászólás módosítva: Ápr 9, 2017
(#) kriszrap válasza Hp41C hozzászólására (») Ápr 9, 2017 /
 
Ezt a shiftelgetés soha se értettem ... (
Ezért szerettem volna IF kiváltani a dolgot.

  1. if(PORTB.F1== 1 || PORTB.F2== 1 || PORTB.F3== 1)
  2.     {
  3.         if(PORTB.F1 == 1)jobbgomb=1;
  4.         if(PORTB.F2 == 1)kozepgomb=1;
  5.         if(PORTB.F3 == 1)balgomb=1;
  6.         gombkukol=0;
  7.     }
  8.     if((PORTB.F1== 0 && PORTB.F2== 0 && PORTB.F3== 0) && (jobbgomb==1 || kozepgomb ==1 || balgomb==1))

Igy pergés mentesítve van??
A hozzászólás módosítva: Ápr 9, 2017
(#) Hp41C válasza kriszrap hozzászólására (») Ápr 9, 2017 /
 
jobshift <<= 1; azonos a jobshift += jobshift; utasítással.
Nézd meg itt a példánál (example) a két ábrát:
unsigned char jobshift esetén
a bal oldali a balja léptetés: a jobshift <<= 1 -nek felel meg,
a jobb oldali a jobbra léptetés: a jobshift >>= 1 -nek felel meg.
(#) kriszrap válasza Hp41C hozzászólására (») Ápr 9, 2017 /
 
De mi a külöbség a tied és az enyémhez képest??? Azon kívül hogy neked permentes
(#) kriszrap hozzászólása Ápr 10, 2017 /
 
Vagy inkább ezzel is próbálkozzam???
kapcs
(#) don_peter válasza kriszrap hozzászólására (») Ápr 10, 2017 /
 
Túl variálod már teljesen.
Szerintem kezd el vissza olvasni az egészet amit eddig írtunk és válasz egyet és annak mentén dolgozz.
(#) kriszrap válasza don_peter hozzászólására (») Ápr 10, 2017 /
 
Whilos megoldás azért nem jó mert meg akasztja a fő programot
Hp41C Amit ajánlott azért nem jó számomra bonyolult ez a shift tologatás hát ....
Azt a változatot a shiftologatosat szeretném if változatba meg valósítani.
Csak hogy lehetne megoldani??
(#) don_peter válasza kriszrap hozzászólására (») Ápr 10, 2017 /
 
Most mond el nekem, miért gond, ha egy pillanatra leáll a főprogramod?
(#) kriszrap válasza don_peter hozzászólására (») Ápr 10, 2017 /
 
az idoszamol fügvény ugy müködik hogy a másodpercet két részre bontom (mas2 mas1)
ha mas1 = 9 és akkor nyomom akkor nem fogja átadni a mas2 hogy növelje .

És igy már nem számolna tovább mert if (mas1 == 10) nem teljesül.

  1. void idoszamol(){
  2.         mas1++// interupban növelem egyesével.
  3.  
  4.  
  5.         if (mas1 == 10) // itt túl menne mint 10
  6.         {
  7.             mas1 = 0;
  8.             mas2++;
  9.         }
  10.      
  11.         if (mas2 == 6)
  12.         {
  13.             mas2 = 0;
  14.             perc1++;
  15.         }
  16.         if (perc1 == 10)
  17.         {
  18.             perc1 = 0;
  19.             perc2++;
  20.         }
  21.         if (perc2 == 6)
  22.         {
  23.             perc2 = 0;
  24.             ora1++;
  25.         }
  26.         if ((ora2 < 2 && ora1 == 10) || (ora2 > 1  && ora1 == 4))
  27.         {
  28.             ora1 = 0;
  29.             ora2++;
  30.         }
  31.         if (ora2 == 3) ora2 = 0;
  32.     }

max ha jó gyógymód erre :
if (mas1 => 10)
mas1 -= 10;
mas2++;
(#) don_peter válasza kriszrap hozzászólására (») Ápr 10, 2017 /
 
Tedd az egészet interupt-ba..
Nem értem miért bontod ketté az időszámolást.
Nem kell ehhez még függvény sem.
Megszakításba számold az időt. (óra, perc, másodperc)
Kiíratás meg főprogramon belül.. Ennyi az egész.

Még 16F628-ra írtam anno:
Változók:
  1. unsigned char ora_10  = 0;
  2. unsigned char ora_1   = 0;
  3. unsigned char perc_10 = 0;
  4. unsigned char perc_1  = 0;
  5. unsigned char mp_10       = 0;
  6. unsigned char mp_1    = 0;
  7.  
  8. unsigned short timer_count = 0;
És a megszakítás:
  1. // ---------------------------- //
  2. //  Interrupt service routine   //
  3. // ---------------------------- //
  4. extern interrupt isr(void) {
  5.         timer_count++;
  6.         if(timer_count == 1000){
  7.                         timer_count = 0;
  8.                         if(mp_1<9){                                                     // *1 Másodperc 0-9 közt
  9.                                 mp_1++;                                                 // *1 Másodpercet emeljük 1-el
  10.                         }else{
  11.                                 mp_1 = 0;                                               // *1 Másodpercet lenullázzuk
  12.                                
  13.                                 if(mp_10<5){                                    // *10 Másodperc 1-5 közt
  14.                                         mp_10++;                                        // *10 Másodpercet emeljük 1-el
  15.                                 }else{
  16.                                         mp_10 = 0;                                      // *10 Másodpercet lenullázzuk
  17.                                        
  18.                                         if(perc_1<9){                           // *1 Perc 1-9 közt
  19.                                                 perc_1++;                               // *1 Percet emeljük 1-el
  20.                                         }else{
  21.                                                 perc_1 = 0;                             // *1 Percet lenullázzuk
  22.                                                
  23.                                                 if(perc_10<5){                  // *10 Perc 1-5 közt
  24.                                                         perc_10++;                      // *10 Percet emeljük 1-el
  25.                                                 }else{
  26.                                                         perc_10 = 0;            // *10 Percet lenullázzuk
  27.                                                        
  28.                                                         if(ora_1<9){            // *1 Óra 1-9 közt
  29.                                                                 ora_1++;                // *1 Órát emeljük 1-el
  30.                                                         }else{
  31.                                                                 ora_1 = 0;              // *1 Órát lenullázzuk
  32.                                                                 ora_10++;               // *10 Órát emeljük 1-el
  33.                                                         }
  34.                                                 }
  35.                                         }
  36.                                 }
  37.                         }
  38.                         if(ora_10==2 & ora_1==4){                       // 24:00:00-kor a teljes órát nullázzuk
  39.                                 ora_10  = 0;
  40.                                 ora_1   = 0;
  41.                                 perc_10 = 0;
  42.                                 perc_1  = 0;
  43.                                 mp_10   = 0;
  44.                                 mp_1    = 0;
  45.                         }
  46.         }
  47.         TMR2IF = 0;
  48. }
Most másodpercenkénti megszakításra működik, de tudod ezt már alakítani.
Szerkezet a lényeg.
A hozzászólás módosítva: Ápr 10, 2017
(#) kriszrap hozzászólása Ápr 10, 2017 /
 
Az óra kialakítás miat de akkor berakom interupba
(#) don_peter válasza kriszrap hozzászólására (») Ápr 10, 2017 /
 
Linkelt kóddal megy nekem a mai napig bináris órám.
Szépen fut, nincs vele azóta sem gond.
Videóim közt megtalálod: Bővebben: Link
Következő: »»   921 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem