Fórum témák

» Több friss téma
Fórum » PIC programozás mikroC fejlesztőkörnyezetben
Lapozás: OK   5 / 10
(#) lastewer hozzászólása Ápr 29, 2017 /
 
Sziasztok!

Azt , hogy tudom megoldani , hogy meghívja a pic a következő oldalt automatikusan? : http://oldalam.hu/adat.php


Van erre valami funkció? Http kérést kellene csinálnia,de nem tudom milyen függvényekkel kellene nekikezdeni.
(#) BlackForce hozzászólása Aug 8, 2017 /
 
Üdv mindenkinek!
Nagyon kezdő vagyok még a PIC programozásban,Szabadságon lévén most van több időm játszadozni.MikroC alatt próbálkozom.
Irtam egy kis programot,ami Pic16f88ra állitva a mikroC alapbeállitásban,a program tökéletesen lefut (Build),de ugyanez a program Pic16f628A alat viszont nem (annyit látok hogy az analog rész körül van a bibi,mert amikor azt kiveszem a programból azt a részt,akkor lefut mindkét Pic-el).
Hát ebben kérnék segitséget.
Ime a program:
  1. #define BEMENET1        RA0_bit
  2. #define KIMENET1        RB0_bit
  3. #define BEMENET2        RA1_bit
  4. #define KIMENET2        RB1_bit
  5. #define BEMENET3        RA2_bit
  6. #define KIMENET3        RB2_bit
  7. #define BEMENET4        RA4_bit
  8. #define KIMENET4        RB4_bit
  9. #define KIMENET5        RB3_bit
  10.  
  11.  
  12. int k1 = 0, k2 = 0, k3 = 0, k4 = 0, an3;
  13.  
  14. void Port_init() {
  15.      TRISA  = 0xff;      // A PORT IS INPUT
  16.      TRISB  = 0x00;      // B PORT IS OUTPUT
  17.      PORTA = 0;
  18.      PORTB = 0;
  19.      ANSEL = 0x08;       // an3 is analog
  20.      OSCCON = 0x71;      // Internal 8MHz osc.
  21.      CM0_bit = 0;        // Disable comparators
  22.      CM1_bit = 0;
  23.      CM2_bit = 0;
  24. }
  25.  
  26. void main () {
  27.  
  28.         Port_init();
  29.         ADC_Init();
  30.  
  31.         while(1) {
  32.                         if (BEMENET1 == 1) {
  33.                                 while (BEMENET1 == 1);        // var amig tartod a gombot
  34.                                 if (k1 == 0) {
  35.                                         KIMENET1 = 1;
  36.                                         k1 = 1;
  37.                                 }
  38.                                 else  {
  39.                                         KIMENET1 = 0;
  40.                                         k1 = 0;
  41.                                 }
  42.                         }
  43.                         if (BEMENET2 == 1) {
  44.                                 while (BEMENET2 == 1);        // var amig tartod a gombot
  45.                                 if (k2 == 0) {
  46.                                         KIMENET2 = 1;
  47.                                         k2 = 1;
  48.                                 }
  49.                                 else  {
  50.                                         KIMENET2 = 0;
  51.                                         k2 = 0;
  52.                                 }
  53.                         }
  54.                           if (BEMENET3 == 1) {
  55.                                 while (BEMENET3 == 1);        // var amig tartod a gombot
  56.                                 if (k3 == 0) {
  57.                                         KIMENET3 = 1;
  58.                                         k3 = 1;
  59.                                 }
  60.                                 else  {
  61.                                         KIMENET3 = 0;
  62.                                         k3 = 0;
  63.                                 }
  64.                           }
  65.                           if (BEMENET4 == 1) {
  66.                                 while (BEMENET4 == 1);        // var amig tartod a gombot
  67.                                 if (k4 == 0) {
  68.                                         KIMENET4 = 1;
  69.                                         k4 = 1;
  70.                                 }
  71.                                 else  {
  72.                                         KIMENET4 = 0;
  73.                                         k4 = 0;
  74.                                 }
  75.                           }
  76.                           an3 = ADC_Get_Sample(3);            // analog ertek lekerese
  77.                           if (an3 <= 512) {
  78.                              KIMENET5 = 0;
  79.                           }
  80.                           else  {
  81.                                           KIMENET5 = 1;
  82.                           }
  83.         }
  84. }
(#) mate_x válasza BlackForce hozzászólására (») Aug 8, 2017 /
 
A 628-ban nincs A/D konverter.
(#) BlackForce válasza mate_x hozzászólására (») Aug 8, 2017 /
 
Nagyon szépen köszönöm a gyors válast.
Mostmár ezek után értem a különbséget.
(#) glaci hozzászólása Szept 17, 2017 /
 
Sziasztok!
Szeretnék segítséget kérni azoktól, akik a mikroc és a mikropascal programozásban is otthon vannak.
Sajnos én csak pascal-ban tudok programozni úgy-ahogy. Ezt a részletet szeretném felhasználni mikropascal-ban és szeretnék valaki hozzáértőt megkérni, hogy írja át mikropascalba.

Köszönöm a segítséget!

  1. /********************************************************
  2.   *      Real Time Clock DS1307 Library for 18F4620     *
  3.   *                  (for PIC IC.)                      *
  4.   *                 by Deniz ELMASLI                    *
  5.   * Version 2.0                                         *
  6.   * Creation Date: 28.12.2008   -   10:12 Friday        *
  7.   * Revision Date: 08.06.2008   -   03:42 Saturday      *
  8.   * Ide(s) : Code::Blocks v1.0 (C++ developement)       *
  9.   *          MikroC V7.0                                *
  10.   * Target Platform: PIC                                *
  11.   * MCU : 18F4620                                       *
  12.   * Contact: elmasli@gmail.com                          *
  13.   * Web    : www.dronology.com                          *
  14.   *                                                     *
  15.   *   This code in intended to work with PIC IC. This   *
  16.   * source code contains functions to drive DS1307 real *
  17.   * time clock  . I2C Functions used in ver2.0          *
  18.   *******************************************************
  19.  
  20. */
  21.  
  22.  
  23.     void start1307s();
  24.     void ds1307_init();
  25.     void ds1307_set_date_time(char day,char mth,char year,char dow,char hr,char min, int sec);
  26.     void ds1307_get_time_date(char *day, char *mth, char *year, char *dow, char *hr, char *min, char *sec);
  27.  
  28.  
  29. void ds1307_init(){
  30.     int seconds=0;
  31.  
  32.     I2C_Start();
  33.     I2C_Wr(0xD0);      // WR to RTC
  34.     I2C_Wr(0x00);      // REG 0
  35.     I2C_Start();
  36.     I2C_Wr(0xD1);      // RD from RTC
  37.     seconds = Bcd2Dec(I2C_Rd(0)); // Read current "seconds" in DS1307
  38.     I2C_Stop();
  39.     seconds = (seconds & 0x7F);
  40.  
  41.     Delay_ms(50);
  42.  
  43.     I2C_Start();
  44.     I2C_Wr(0xD0);      // WR to RTC
  45.     I2C_Wr(0x00);      // REG 0
  46.     I2C_Wr(Dec2Bcd(seconds));     // Start oscillator with current "seconds value
  47.     I2C_Start();
  48.     I2C_Wr(0xD0);      // WR to RTC
  49.     I2C_Wr(0x07);      // Control Register
  50.     I2C_Wr(0x80);      // Disable squarewave output pin
  51.     I2C_Stop();
  52. }//~
  53.  
  54.  
  55.  
  56.  
  57. void ds1307_set_date_time(char day,char mth,char year,char dow,char hr,char min, int sec){
  58.     sec =(sec & 0x7F);
  59.     hr =(hr & 0x3F);
  60.  
  61.     I2C_Start();
  62.     I2C_Wr(0xD0);               // I2C write address
  63.     I2C_Wr(0x00);               // Start at REG 0 - Seconds
  64.     I2C_Wr(Dec2Bcd(sec));       // REG 0
  65.     I2C_Wr(Dec2Bcd(min));       // REG 1
  66.     I2C_Wr(Dec2Bcd(hr));        // REG 2
  67.     I2C_Wr(Dec2Bcd(dow));       // REG 3
  68.     I2C_Wr(Dec2Bcd(day));       // REG 4
  69.     I2C_Wr(Dec2Bcd(mth));       // REG 5
  70.     I2C_Wr(Dec2Bcd(year));      // REG 6
  71.     I2C_Wr(0x80);               // REG 7 - Disable squarewave output pin
  72.     I2C_Stop();
  73. }//~
  74.  
  75.  
  76.  
  77.  
  78.  
  79. void ds1307_get_time_date(char *day, char *mth, char *year, char *dow, char *hr, char *min, char *sec){
  80.     I2C_Start();
  81.     I2C_Wr(0xD0);
  82.     I2C_Wr(0x00);                     // Start at REG 3 - Day of week
  83.     I2C_Start();
  84.     I2C_Wr(0xD1);
  85.     *sec=Bcd2Dec(I2C_Rd(1) & 0x7F);
  86.     *min=Bcd2Dec(I2C_Rd(1) & 0x7F);
  87.     *hr=Bcd2Dec(I2C_Rd(1) & 0x3F);
  88.     *dow=Bcd2Dec(I2C_Rd(1) & 0x7F);   // REG 3
  89.     *day=Bcd2Dec(I2C_Rd(1) & 0x3F);   // REG 4
  90.     *mth=Bcd2Dec(I2C_Rd(1) & 0x1F);   // REG 5
  91.     *year=Bcd2Dec(I2C_Rd(0));         // REG 6
  92.     I2C_Stop();
  93. }//~
(#) glaci hozzászólása Okt 3, 2017 /
 
Sziasztok!
Szeretnék segítséget kérni:hogyan lehet char típusú változót floatba konvertálni?
(#) Hp41C válasza glaci hozzászólására (») Okt 4, 2017 /
 
  1. float f;
  2. char c;
  3. f = (float) c;
(#) glaci válasza Hp41C hozzászólására (») Okt 4, 2017 /
 
Köszönöm szépen!
(#) glaci hozzászólása Nov 30, 2017 /
 
Sziasztok!Szeretnék véleménynyt kérni a következő problémára.
Ékezetes és néhány saját karaktert szeretnék megjeleníteni az lcd-n ezek összesen 12 féle. A CGRAM-ba tudomásom szerint 8 saját karakter írható.
Az lcd-n kölönböző információk kerülnek kiírásra, de a 12 saját karakter nem egyszerre kerülnek megjelenítésre. A kérdés most következik. Ha a megjelenítés elött hívom meg az adott karakterre vonatkozó "void CustomChar(char pos_row, char pos_char)..." függvényt és irom be egy adott címre, aztán jelenítem meg az lcd-n, majd egy másik információ megjelenítése előtt ugyanerre a CGRAM címre egy másik karakter megjelenitésére vonatkozó "void CustomChar(char pos_row, char pos_char)..." fügvénnyel beírok egy másik saját karaktert, majd jelenítem meg, akkor ez működik?
Mert ha igen, akkor így bármennyi saját karakter megjeleníthető, bár értelmezésem szerint egyszerre 8 saját karater jeleníthető meg, egy információs egységben.
(#) icserny válasza glaci hozzászólására (») Dec 1, 2017 /
 
Nem lehet így "kijátszani", összesen csak 8 db. felhasználói karakterképpel lehet gazdálkodni. Néhány ékezetes karakter azonban az előre definiált karakterek között is szokott lenni (pl. ö). Bővebben: Link
A hozzászólás módosítva: Dec 1, 2017
(#) kissi válasza glaci hozzászólására (») Dec 1, 2017 /
 
Szia!
Szerintem működik, csak arra vigyázz, hogy ha átírod a mintát, akkor minden, már előzőleg kiírt helyen is átíródik ( azaz egy kiírási képben csak egyféle mintázat lehet az adott kódhoz tartozóan!) .
(#) glaci válasza icserny hozzászólására (») Dec 1, 2017 /
 
Szia!
Az ajánlott cikkben, a "A cikk mintapéldái összecsomagolva (examples.zip)" nem található, igy nem tudom letölteni. Légy szíves segíts a letöltésben!
Köszi.
(#) glaci válasza glaci hozzászólására (») Dec 1, 2017 /
 
Megtaláltam itt
A hozzászólás módosítva: Dec 1, 2017
(#) glaci hozzászólása Dec 1, 2017 /
 
Sziasztok!
Újabb kérdés: hogyan tudom kiíraratni az lcd-re mikroc-ben, a cgrom-ban levő "ü" és "ö" karaktereket, amik a 11110101 ill. 11101111 címeken vannak?
(#) peze válasza glaci hozzászólására (») Dec 2, 2017 /
 
Szia!

Itt elég jól elmagyarázzák: Bővebben: Link
(#) glaci válasza peze hozzászólására (») Dec 2, 2017 /
 
Szia!
Köszönöm, de nem ez volt a kérdés. Ez az egyéni karakterek készítését és megjelenitését magyarázza el. Ezzel nincs is semmi baj, ez világos ilyet már csináltam máskor is még mikropascal-os koromban.
(#) peze válasza glaci hozzászólására (») Dec 2, 2017 /
 
Ja,ja,már értem! Viszont az engem is érdekelne,nyernénk két karaktert
(#) glaci válasza peze hozzászólására (») Dec 6, 2017 /
 
Szia!
Megtaláltam a módját. Az Lcd_Chr(1,2,245) paranccsal ki tudod írítni bármelyik karaktert. A 245 éppen az " ü "betű. A 245 helyére karakter tábla bármely karakterének a címét kell beírni.
A 245 binárisan 1111 0101 ami az ü betű címe.
(#) peze válasza glaci hozzászólására (») Dec 6, 2017 /
 
Szia! Örülök,köszönöm,ezt én is használni fogom ezentúl.
(#) Bakman válasza glaci hozzászólására (») Dec 6, 2017 /
 
Csak egy apró megjegyzés a dologhoz. Nem minden kijelzőben vannak magyar ékezetek. A dolog attól függ, hogy milyen karaktertábla van programozva a vezérlőbe. Lásd itt: Bővebben: Link.
(#) glaci válasza Bakman hozzászólására (») Dec 6, 2017 /
 
Szia!
Persze, de én nyilván arról beszélek amiben van magyar ékezet, és ez az eszköz adatlapjából ill. kódkészletéből, kiderül.
(#) DJozso hozzászólása Dec 10, 2017 /
 
Sziasztok! Meg tudna valaki erősíteni, abban, hogy a következő kódok működhetnek?
1 feladat: Adott két unsigned short változó és egy unsigned int változó. Az int változóba írnám a két short változó tartalmát ezzel a kóddal:
  1. int = (Short_H<<8)+Short_L

Ez így okés?
2. feladat: Az int tartalmát egy start bittől kezdve írjuk vissza egy másik 8bites változóba.:
  1. Short = int >>3;

Vagyis így a int.F3 lesz a Short.F0, int.F4 a Short.F1 és így tovább... a vége int.F10 a Short.F7
Ha a három eltolási számot mondjuk 8-ra cseréljük, akkor, int.F8 lesz Short.F0 és így tovább.
Valaki erősítsen már meg, hogy jól gondolom. Köszönöm szépen.
A hozzászólás módosítva: Dec 10, 2017
(#) freddyke válasza DJozso hozzászólására (») Dec 10, 2017 / 1
 
Szia! Mi ezzel a célod, mit szeretnél megvalósítani? Miért kell két short-ot egy int-be tenni, miért nem maradhat külön? Ha beírod google keresőbe "two shorts into int", van pár hasznos találat. Egyébként miért nem próbálod ki?

A másodikra írtam egy példát:
#include <stdio.h>
main() {
unsigned char Short_;
unsigned int int_=0b1100110011001100;
Short_ = int_ >>3;
printf("Short_=%u\n",Short_);
return 0;
}

Futtatva:
./test
Short_=153

azaz, 10011001. Levágta az alsó 3 bit-et és a felső biteket, amik nem fértek a 8 bit-es változóba.
(#) DJozso válasza freddyke hozzászólására (») Dec 11, 2017 /
 
A célom ezzel az, hogy van egy 5 oszlopból, és 7 sorból álló led-mátrixom, ami egy motorkerékpár fokozat visszajelzője (kiírja hányadikban van a váltó). A számokat szépen megjeleníti a kijelző, de én úgy szeretném, hogy ne csak átlépjen egyikből a másikba, hanem soronként lépjen egyik számból a másikba, ráadásul úgy, hogy ha lefele váltok felfele menjen az előző szám, felfele váltásnál fordítva. Az áramkör úgy működik, hogy a kijelző oszlop meghajtása nagyjából 1ms -ként lépked a következőre oszlopra, közben a PIC másik portja adja az megfelelő oszlophoz tartózó sor meghajtást. Ezen sor információ egy tömbben van tárolva 8 bites változókban (igaziból csak az első 7 bit van használva). Itt jön a képben a 16 bites változó, aminek a felső byte-ba beírnám a kiindulási szám megfelelő sor infóját, az alsó byte-ba a cél szám ugyanazon sor infóját, és elindulnék onnan hogy 16 bites változó >> 8 (Eredmény:Felső byte, kiindulási szám) és csökkenteném az eltolást egy beállított timerrel egész nulláig (Eredmény:Alsó byte, cél szám)ennek az eredménynek csinálnék egy 8-bites változót, amibe az épp megjeleníteni akart adatokat helyezném. És addig, amíg a váltás nem megy végbe addig a folyamatosan változó eredményt jelezném ki, utána visszatérnék a tömb 8 bites kijelzéséhez. Nem tudom így érthető, mit szeretnék. Az általad adott kódot, még "értelmezésre" átnyálazom. A z utolsó 2 sorral még nem találkoztam, de utána nézek, mit is takar. Viszont nálad az int változó értéket kap, úgy nekem is ment(0xFF00), csak a 2 db 8 bites változóból nem kreál olyat, mint amit fent említettem. Addig is nagyon köszi, hogy segítesz.
(#) freddyke válasza DJozso hozzászólására (») Dec 11, 2017 / 1
 
Ez egy általános C kód, Linux-on GCC-vel fordítottam. A bit eltolás és összeadás valószínűleg minden C alatt ugyanaz, a demonstrálásra jó. Az utolsó két sor nem vonakozik a PIC-re. Kiírja a változó értékét és visszatér a main() függvényből 0 értékkel az operációs rendszerhez.

Nem találtam volna ki, hogy ehhez kell. Érthető mit szeretnél, bár nekem kicsit bonyolultnak tűnik ez a kivitelezés. Ha jól értem, az oszlophoz tartozó "sor" függőlegesen értendő. Én lehet, hogy a számokat ennek megfelelően, szekvenciálisan tárolnám le a memóriában (pl. 0. byte legnagyobb szám első oszlopa, ..., 4. byte legnagyobb szám ötödik oszlopa, 5. byte eggyel kisebb szám első oszlopa, stb.). Kell egy mutató. A mutató azt mondja meg, hogy melyik szám melyik sorától (0-7) induljon a kijelzés. Pl. 0 a legnagyobb szám nulladik sora, 7 a legnagyobb szám utáni üres rész (gondolom kell üres vonal a számok közé), 9 az eggyel kisebb szám első sora, 20 a mégeggyel kisebb szám negyedik sora, stb. A kijelzőt kezelő függvény a mutató alapján kiveszi a táblázat megfelelő egy vagy két byte-ját, amiből összeshift-eli és vagyolja a megfelelő biteket, azaz a kijelzendő "sort" (byte-ot). Ha éppen byte határra esik, akkor nem kell shift-elni. Váltásnál, beállítasz egy időzített megszakítást (pl. ha 1s alatt kívánod a számokat áttolni, akkor 1/8s-onként hívódik meg), ami kijelzés kezeléstől függetlenül növeli vagy csökkenti a mutatót, amíg el nem éri a célszámot. Mivel csak 7 sor magas a szám, így lesz egy üres sor a számok között a csúsztatásnál, ami talán direkt jól is jönne. Ha vonalat szeretnél betenni a számok közé, szerintem azt is meg lehet oldani, csak kicsit át kell variálni a kijelzőt kezelő függvényt és az időzített megszakítást is (több lépés lesz). Ez most csak úgy hirtelen az eszembe jutott, nem tudom mennyire kivitelezhető az adott PIC-en. Arra is gondolni kell, hogy mi történjen ha gyorsabban váltasz, mielőtt átfutnak a számok vagy egyszerre többet váltasz, esetleg nem két egymás melletti fokozat között. Ezzel a módszerrel végigfuttathatod a teljes számsort. Ha nem egymás mellettiek a fokozatok (számok), úgy nem működne.
A hozzászólás módosítva: Dec 11, 2017
(#) benjami válasza DJozso hozzászólására (») Dec 12, 2017 / 1
 
Tegyük fel, hogy 5 fokozatod van. Csinálsz egy 8*(7*5) bitmátrixot (ez 35byte). Egy byte egy vízszintes sort takar, amiből csak 5bitet használsz fel, mert ekkora ledmátrixod szélessége. Az első fokozatban az első 7 bájt (0..6) által meghatározott bitmátrixot rajzolod ki. Ha váltottál, szép lassan felgyalogolsz a 7..13 bájtig, ha megint váltottál felfelé, újabb 7 bájtnyit gyalogolsz. Az egészet úgy kell elképzelni, mint ha egy darab kétszínű 8*35 pixel méretű bitmapod lenne, aminek mindig csak az aktuális részét jeleníted meg. Azért célszerű vízszintesen irányba letárolni a karaktereket, mert így a függőleges tologatásnál nem kell a biteket tologatni, csak a tömbben előre-hátra lépkedni.
(#) freddyke válasza benjami hozzászólására (») Dec 12, 2017 /
 
Ugyanezt írtam, csak 90°-al elforgatva. Azt írta oszloponként lépked a kijelző meghajtó áramkör. Kézenfekvő, hogy ehhez lenne célszerű igazítani az adatok (bit-minta) tárolását. Ha az áramkör soronként lépkedne, akkor működne az, amit írsz. Nem kellene bit-eket tologatni.
(#) DJozso válasza freddyke hozzászólására (») Dec 12, 2017 /
 
Igen, freedyke elgondolása jobb számomra a oszlop meghajtások miatt. Lehet, hogy az én elgondolásom "bonyolultabb", a tietek sokkal elegánsabb, de ez a közvetlen memória pakolás, mutató, nekem még sok, ilyennel még nem foglalkoztam. Próbáltam a rendelkezésemre álló tudásomból megoldani a dolgot, de jó dolog, hogy mindenki másképp gondolkodik, másképp old meg problémákat, és így sokszor(mint most is), rávilágít egy másik megoldásra, amely sokszor jobb, gyorsabb, egyszerűbb kódot eredményez. Logikailag értem mit kellene megvalósítani a ti verziótokban, de a gyakorlatban a kód írásnál fogalmam sincs, hogy csináljam. Megpróbálok ennek a témakörnek bővebben utána nézni.
Amúgy sikerült megoldani a dolgot ezzel a 16bites változó bit tologatásával , de tény, vannak a kódban olyan sorok, amihez neki kell ülni, ha értelmezni akarom...
Köszönöm még egyszer a segítséget.
A hozzászólás módosítva: Dec 12, 2017
(#) freddyke válasza DJozso hozzászólására (») Dec 12, 2017 / 1
 
A számok bit-mintáját egyébként is tárolni kell valahogy. Mindketten azt mondjuk, hogy "szőnyegként" érdemes kiteríteni a számokat. Egy ablakon keresztül (a kijelző) megjeleníted a szőnyeg kívánt részét (a mutató mondja meg hol áll az ablak). A bit tologatást meg lehetne spórolni és egész byte-okkal dolgozni, ha az áramkör sorokat hajtana meg (ahogy benjami írta). Ez sokkal egyszerűbb kódot eredményezne. Ha mégis oszlopokat hajt meg, akkor lehet mégsem a fent leírt módon tárolnám a "bit-mintát". A számsort 90°-al balra elforgatva tárolnám, a bal alsó sarok a kiindulópont. A 0. byte a legnagyobb szám (5) nulladik oszlopa, az 1. byte az eggyel kisebb szám (4) nulladik oszlopa, ..., 5. byte a legnagyobb szám (5) első oszlopa, 6. byte az eggyel kisebb szám (4) első oszlopa, stb. A számok (90°-al elforgatva) 8 bit szélesek (ebben benne van egy üres sor a számok között). Ha 5 szám van, 5*8=40 értéket vehet fel a mutató 0-39 között. Az időzítő függvény semmi mást nem csinál, mint mondjuk 1/8 másodpercenként csökkenti/növeli a mutató értékét, amíg el nem éri a célértéket. (A főprogram állítja be az időzítőt, illetve a kezdő és célértéket, valamint az eltolás irányát.) A megjelenítő függvény megjeleníti a bit-mintából azt a részt, ahova a mutató mutat. Pl. a mutató értéke 4, akkor az 5-ös szám alsó három sorát, az üres sort és a 4-es szám felső három sorát. 4/8=0 (ahol 4 a mutató értéke, 8 a 90°-al elforgatott szám magassága + egy üres sor a bit-mintában), 4%8=4 (maradék). Tehát, fogja a 0. (4/8) és 1. byte-okat (mert épp lefelé váltasz, az eltolás iránya lehet egy külön byte-ban), és eltolja 4 (4%8) bit-el jobbra (mert épp lefelé váltasz). A következő oszlopnál hozzáad 5-öt (feltéve, hogy 5 karaktered van) és megismétli, amíg végig nem ér az összes oszlopon. Nem olyan bonyolult ez. Nagyon fapadosan gondolkodom (ASM-ben), talán a C-t kihasználva lehetne tovább egyszerűsíteni.
(#) glaci hozzászólása Dec 12, 2017 /
 
Sziasztok!
Szeretnék lcd-re kiíratni float változót. A pic 18F4520 a kíírandó szám pl:23.5 meg -3.5. A microc beépített FloatToStr badarságokat ír ki. Ha valaki tudna segíteni a feladat programból való megoldásának az jó lenne
Köszönöm!
Következő: »»   5 / 10
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