Fórum témák

» Több friss téma
Fórum » PIC programozás
 
Témaindító: G-Lex, idő: Okt 24, 2005
Lapozás: OK   46 / 66
(#) foxi63 válasza Balagemann2031 hozzászólására (») Nov 1, 2011 /
 
a táblázatodnak így gell kinézni:
adat
addwf pcl,f
dt "ALMA"
dt "KÖRTE"

a call adat hívásakor a W értéke hozzáadódik a programszámláóhoz, és visszatér az adott betűvel.
Tehát értelemszerűen a w most 0-8 közé kell essen.
Figyelni kell, hogy a táblázatod nem léphet át laphatárt a programmemóriában, valamint be kell állítani a pclath regiszter bitjeit is, ha nem a 0. lapon van a táblázat.
Ha az adatok pl 0x180 as címtől kerülnek letárolásra akkor a szubrutin így kezdődik:
bsf pclath,0
addwf pcl,f
....
....
(#) bbalazs_ válasza Balagemann2031 hozzászólására (») Nov 1, 2011 /
 
Ja, az ilyen jellegu kerdest a KIEMELT PIC kezdoknek c. topicba kellene, mert elegge alap.
Te nem szoktal netes peldaprogramokat tanulmanyozni?
Vagy tovabb mennek, szerintem a PIC adatlapban is benne van ez a pelda...
(#) Balagemann2031 válasza bbalazs_ hozzászólására (») Nov 1, 2011 /
 
Huh ez brutál, már táblázatot tudok kezelni, ezeket már tudtam, nem tudom hogyan fogalmazzak, szal az lcd kijelzőnek ahhoz, hogy kiírja pl azt hogy "Teszt" ahhoz az lcd adatvonalaira sorban ki kell küldeni a karakterek ASCII bájtkódjait "T"-betűé (01010010') ezt adatvonalra kiküldeni majd az RS és E vonalakat ki és be kell kapcsolni, ekkor a kijelzőn megjelenik a T betű, utána kis várakozással ki kel küldeni az "e" betű bájtkódját stb stb
Tehát attól hogy szépen DT-ből behívom a W=0, val a DT be írt "T" betűt, még nem lessz magától ez a bájtkombinázió visszatéréskor a W ben, hacsak nem adom meg valahol, hogy A "T" meghívásakor, a fent említett (01010010) kerüljön a W-be, csak éppen ezt nem tudom hogy hogy adjam meg hogy mikor a W=0, val meghívom a "T"-t akkor a W-ben 01010010 legyen... Egyébként köszönöm a az eddigi tanácsokat, és fáradságot
(#) bbalazs_ válasza Balagemann2031 hozzászólására (») Nov 1, 2011 / 1
 
A DT az nem egy rutin!

Az csak annyit csinal, hogy egyszerusiti a dolgodat. Nem kell minden alkalommal betunkent eljatszani, azt, hogy beteszed es visszatersz. Ha visszaforditod a programodat, akkor latod is, amit odatett. Javaslom, de akar forditas kozben is latod vagy a vegen a listat ha megnezed....

Tehat csak egy specialis modon elhelyezi az adott teruletre az adatodat.
Az, hogy te ezzel mihez kezdesz, az mar rajtad mulik.
(#) MPi-c válasza Balagemann2031 hozzászólására (») Nov 1, 2011 / 1
 
Látom nehezen érted meg.
A DT a fordítónak szóló utasítás, direktíva.
Segítségével 8 bites adatok, köztük ASCII szabvány szerint kódolt karakterek és karakterláncok helyezhetők el a mikrovezérlő programmemóriájában úgy, hogy minden 8-bites érték egy-egy RETLW utasításban lesz elhelyezve.
Idézet:
„még nem lessz magától ez a bájtkombinázió visszatéréskor a W ben”

De, benne lesz.
A DT-n kívül vannak még más adat direktívák is. Bővebben: Link
(#) Balagemann2031 válasza MPi-c hozzászólására (») Nov 1, 2011 /
 
Na köszönöm szépen, ezt nem tudtam. Mostmár világos, nem tudtam hogy a fordító alapból tudja a karakterek kódjait.
(#) Atka15 hozzászólása Nov 12, 2011 2 /
 
Sziasztok. Nem tudtam konkrétan melyik témához írjam, de megpróbálom ide. Szóval: van egy nec 78f9177es epromom. Fogalmam sincs arról hogy ez konkrétan AVR vagy PIC. Azt szeretném megtudni, hogy a datasheetjében le vannak írva a lábkiosztások, és engem a RESET lába érdekelne. Tehát elsősorban azt, hogy hogyan lehet leresetelni? és hogy a reset kitörli-e a memóriáját, vagy csak a rajta lévő programot állítja vissza? Ha pedig letörli, akkor pedig milyen programozóval tudom beleégetni a programot?(mert megvan a hozzá tartozó program.) Előre is köszönöm. Másik témához is odaírtam. Elnézést kérek, de nem tudtam hogyan lehetne ide átrakni.
(#) Hp41C válasza Atka15 hozzászólására (») Nov 13, 2011 1 /
 
Az uPD 78f9177 se nem PIC, se nem AVR, hanem egy NEC által gyártott 8 bites mikrokontroller: Adatlap

A RESET nem törli a belső memóriákat, főleg nem a program memóriát. A megadott típusok Flash EEPRom -mal rendelkeznek, amit csak a programozóval lehet törölni vagy módosítani. Sajnos az adatlap nem részletezi a programozás mikéntjét.

A Flashpro III programozót ajánlják hozzá. Adatlap
(#) Atka15 válasza Hp41C hozzászólására (») Nov 13, 2011 /
 
Köszönöm szépen a válaszodat. Akkor már csak egy kérdésem lenne. A lényeg az, hogy nem is akarom, hogy a rajta lévő program megváltozzon, tehát csak le szeretném resetelni. Az a kérdés még: hogy mivel a rajzon láttam, hogy a RESET lába felül van húzva, ezért elbizonytalanodtam, abban,hogy akkor resetelődik le, ha +5V-ot adok rá, vagy pont akkor ha elveszem a rajta lévő fix +5V-ot. Mivel ugye digitális elektronikában a felülhúzás ugye a negálást jelenti, és nem tudom hogy a resethez magas, vagy alacsony jelszint kell.
(#) icserny válasza Atka15 hozzászólására (») Nov 13, 2011 /
 
Azért kell felhúzni, hogy ne maradjon RESET-ben. Akkor resetelődik, amikor lehúzod. A felhúzás többnyire egy 10 kohm nagságrendű ellenállással történik, a lehúzás pedig nyomógombbal a föld felé, vagy nyitott kollektoros/nyitott nyelőelektródás tranzisztorral, stb.
(#) Atka15 válasza icserny hozzászólására (») Nov 13, 2011 /
 
Köszönöm szépen a segítséget. így már értem.
(#) Balagemann2031 hozzászólása Nov 22, 2011 /
 
Sziasztok! Nemrég írtam hogy elkezdtem tervezni, egy saját "különbejáratú" fejlesztő környezetet 16F877A kontrollernek. Nos elkészültem vele, és ha nem követek el szabálytalanságot, feltenném megmutatni, ha esetleg van kritika, vélemény örömmel fogadom. Előre bocsájtanám, hogy az áramkörben a külső epromot és a soros kommunikációt, nem teszteltem, de a potikat,kapcsolókat, ledeket, kijelzőt és a plusz kivezetett portokat igen, tehát kis bátorsággal működőképesnek mondható. A pic alatt található alkatrészek a fotókon nem látszanak, amint látjátok, nem akartam esetleges kontakthibékat okozni, azzal hogy ki-be teszegetem, mellesleg az ICSP programozás is tökéletesen működik, csak ehhez a jumpereket el kell távolítani. Nagyjából ennyi Üdv!
(#) elektrozzolii hozzászólása Dec 16, 2011 /
 
üdv mindenkinek érdeklődnék hogy nekem van 1 pic16f84em és 1 órát szeretnék vele működtetni már 4égeteőt építettem mind a 4 valmien oknál fogva más más hiba üzenetek kirtása után erroert írt ki szóval nem müködött nekm 1 ojan égető kellene ami 1 kész hex formátumot 1 ic prog nevű progival bele tudnám égetnia picbe a válaszokat és a segítcségeket előre is köszönöm
(#) foxi63 válasza elektrozzolii hozzászólására (») Dec 16, 2011 /
 
Szia!
ez egyszerű, és jó!

P16PRO.PDF
    
(#) foxi63 hozzászólása Dec 16, 2011 /
 
ez még lemaradt...
(#) Hp41C válasza foxi63 hozzászólására (») Dec 18, 2011 /
 
A 74(LS)05 nem jó bele! Csak a 74(LS)07 vagy 74(LS)06.
(#) mrobi hozzászólása Dec 28, 2011 /
 
Sziasztok. Még csak most kezdek ismerkedni pic programozással. Assemblyben kezdtem el programozni. Megszakítások meg ilyenek már mennek. Engem az érdekelne (lehet hogy hülye kérdés) de hogyan lehet assemblyben szorozni illetve osztani?
(#) vilmosd válasza mrobi hozzászólására (») Dec 28, 2011 /
 
APiclisten sok mintapeldat talalhatsz, koztuk szorzo rutinokat is.
(#) mrobi válasza vilmosd hozzászólására (») Dec 28, 2011 /
 
Köszi. Megnéztem. Nem rossz. De ezek ha jól látom akkor főleg 18F-esekhez való. Én 16F-eseket használok. Ahhoz is tudsz ilyet?
(#) foxi63 válasza mrobi hozzászólására (») Dec 28, 2011 /
 
mi kellene? 8bit x 8bit, vagy 16 x 8 bit, vagy 16x 16 bit?
ülj le vegyél elő ceruzát, a két számot írd le 2-es számrendszerben, és szorozd össze. Egyből rájössz, hogyan kell leprogramozni. Osztás is hasonló. Ha elakadsz keress meg priviben. üdv. Foxi
(#) mrobi válasza foxi63 hozzászólására (») Dec 28, 2011 /
 
Leírtam papírra. Nagyából értem. De mi van ha túllépem a 8 bi-et? akkor a számot kettő változóban kell tárolnom? Az egyikben az első 8-at a másikban a másik 8 bit-et?
(#) vilmosd válasza mrobi hozzászólására (») Dec 28, 2011 /
 
Nem igen van ott 18F-es program. A java resze 16F-re van irva. Soot meg a 16C54-re is.
(#) Hp41C válasza mrobi hozzászólására (») Dec 28, 2011 /
 
Szia!
Programok a megadott linkről:
- 24 bit / 16 bites osztás:
  1. ;Inputs:
  2. ;   Dividend - AARGB0:AARGB1:AARGB2 (0 - most significant!)
  3. ;   Divisor  - BARGB0:BARGB1
  4. ;Temporary:
  5. ;   Counter  - LOOPCOUNT
  6. ;   Remainder- REMB0:REMB1
  7. ;Output:
  8. ;   Quotient - AARGB0:AARGB1:AARGB2
  9. ;
  10. ; Size: 27
  11. ; Max timing: 4+24*(6+6+4+3+5)-1+3+2=584 cycles (with return)
  12. ; Min timing: 4+24*(6+6+5+5)-1+3+2=536 cycles (with return)
  13. ;
  14. ;25-Sep-2000    Original version
  15. ;20-Oct-2001    Made the loop one instruction shorter, comments
  16. ;               review.
  17.  
  18. FXD2416U:
  19.         CLRF REMB0
  20.         CLRF REMB1
  21.         MOVLW 24
  22.         MOVWF LOOPCOUNT
  23. LOOPU2416
  24.         RLF AARGB2, F           ;shift dividend left to move next bit to remainder
  25.         RLF AARGB1, F           ;and shift in next bit of result
  26.         RLF AARGB0, F           ;
  27.  
  28.         RLF REMB1, F            ;shift carry (next dividend bit) into remainder
  29.         RLF REMB0, F
  30.  
  31.         RLF LOOPCOUNT, F        ;save carry in counter, since remainder
  32.                                 ;can be 17 bit long in some cases (e.g.
  33.                                 ;0x800000/0xFFFF)
  34.          
  35.         MOVF BARGB1, W          ;substract divisor from 16-bit remainder
  36.         SUBWF REMB1, F          ;
  37.         MOVF BARGB0, W          ;
  38.         BTFSS STATUS, C         ;
  39.         INCFSZ BARGB0, W        ;
  40.         SUBWF REMB0, F          ;
  41.  
  42. ;here we also need to take into account the 17th bit of remainder, which
  43. ;is in LOOPCOUNT.0. If we don't have a borrow after subtracting from lower
  44. ;16 bits of remainder, then there is no borrow regardless of 17th bit
  45. ;value. But, if we have the borrow, then that will depend on 17th bit
  46. ;value. If it is 1, then no final borrow will occur. If it is 0, borrow
  47. ;will occur.
  48.  
  49.         SKPNC                   ;if no borrow after 16 bit subtraction
  50.          BSF LOOPCOUNT, 0       ;then no no borrow in result. Overwrite
  51.                                 ;LOOPCOUNT.0 with 1 to indicate no
  52.                                 ;borrow.
  53.                                 ;if borrow did occur, LOOPCOUNT.0 will
  54.                                 ;hold the eventual borrow value (0-borrow,
  55.                                 ;1-no borrow)
  56.  
  57.         BTFSC LOOPCOUNT, 0      ;if no borrow after 17-bit subtraction
  58.          GOTO UOK46LL           ;skip remainder restoration.
  59.  
  60.         ADDWF REMB0, F          ;restore higher byte of remainder. (w
  61.                                 ;contains the value subtracted from it
  62.                                 ;previously)
  63.         MOVF BARGB1, W          ;restore lower byte of remainder
  64.         ADDWF REMB1, F          ;
  65.  
  66. UOK46LL
  67.         CLRC                    ;copy bit LOOPCOUNT.0 to carry
  68.         RRF LOOPCOUNT, F        ;and restore counter
  69.  
  70.         DECFSZ LOOPCOUNT, f     ;decrement counter
  71.          GOTO LOOPU2416         ;and repeat loop if not zero. carry
  72.                                 ;contains next quotient bit (if borrow,
  73.                                 ;it is 0, if not, it is 1).
  74.                
  75.         RLF AARGB2, F           ;shift in last bit of quotient
  76.         RLF AARGB1, F  
  77.         RLF AARGB0, F
  78.         RETURN


- 24 bit * 24 bit (48 bites eredmény)
  1. ;24 x 24 Multiplication
  2. ;Input:
  3. ; Multiplier - 3 bytes (shared with Product)
  4. ; Multiplicand - 3 bytes (not modified)
  5. ;Temporary:
  6. ; Bitcount
  7. ;Output:
  8. ; Product - 6 bytes
  9.  
  10.         CLRF    Product         ; clear destination
  11.         CLRF    Product+1
  12.         CLRF    Product+2
  13.  
  14.        
  15.         MOVLW   D'24'
  16.         MOVWF   BitCount        ; number of bits
  17.  
  18.         RRF     Product+3,F     ; shift out to carry
  19.         RRF     Product+4,F     ; next multiplier bit
  20.         RRF     Product+5,F
  21.  
  22. ADD_LOOP_24x24
  23.  
  24.         BTFSS   STATUS,C        ; if carry is set we must add multipland
  25.                                 ; to the product
  26.           GOTO  SKIP_LOOP_24x24 ; nope, skip this bit
  27.                
  28.         MOVF    Multipland+2,W  ; get LSB of multiplicand
  29.         ADDWF   Product+2,F     ; add it to the lsb of the product
  30.  
  31.         MOVF    Multipland+1,W  ; middle byte
  32.         BTFSC   STATUS,C        ; check carry for overflow
  33.         INCFSZ  Multipland+1,W  ; if carry set we add one to the source
  34.         ADDWF   Product+1,F     ; and add it  (if not zero, in
  35.                                 ; that case mulitpland = 0xff->0x00 )
  36.        
  37.         MOVF    Multipland,W    ; MSB byte
  38.         BTFSC   STATUS,C        ; check carry
  39.         INCFSZ  Multipland,W
  40.         ADDWF   Product,F       ; handle overflow
  41.  
  42. SKIP_LOOP_24x24
  43.         ; note carry contains most significant bit of
  44.         ; addition here
  45.  
  46.         ; shift in carry and shift out
  47.         ; next multiplier bit, starting from less
  48.         ; significant bit
  49.  
  50.         RRF     Product,F
  51.         RRF     Product+1,F
  52.         RRF     Product+2,F
  53.         RRF     Product+3,F
  54.         RRF     Product+4,F
  55.         RRF     Product+5,F
  56.  
  57.         DECFSZ  BitCount,F
  58.         GOTO    ADD_LOOP_24x24
  59.         RETURN


Ezek a programok egyszerűen átalakíthatók más szóhozzúságra ...

Ha még azt is figyelembe vesszük, hogy a 18F, 16F1xxx kontrollereken van addwfc, subwfb utasítás, akkor a rutinok tovább egszerűsíthetők...
(#) tib12 hozzászólása Dec 30, 2011 /
 
Üdv mindenki.
Egy kis segítségre lenne szükségem, egy program átírásában. Lényeg hogy nem külső kvarcot akarok használni egy PIC16F627-esnél hanem a belsőt. Itt a link a kapcsoláshoz ha lényeges. (A program is a linken megtalálható de azért feltöltöm). Köszi előre is a segítséget.

egg_timer.zip
    
(#) Hp41C válasza tib12 hozzászólására (») Jan 2, 2012 /
 
Szia!

Egyszerűbb lenne az óra quartz -ot beletenni, mint a programoz átírni...
(#) tib12 válasza Hp41C hozzászólására (») Jan 2, 2012 /
 
De pont ilyet nem találok, és nem szeretnék rendelni. Van még 4MHz-es ha arra át lehet irni.
(#) kissi válasza tib12 hozzászólására (») Jan 2, 2012 /
 
A kvarcórákban általában ez a kvarc van tapasztalataim alapján, próbálj ki egyet-kettőt, mert átírni azért nem 5 perc még egy gyakorlott programozónak sem ( meg kell érteni az eredeti programot, hogy tudja mihez nyúljon hozzá és nincs is meg a forráskód --> még borzasztóbb :no: ! ).

Steve
(#) kaqkk válasza kissi hozzászólására (») Jan 2, 2012 /
 
Ez a program azért van 32768 .. kavicsra írva ,mert ez a szám a 2 hatványa és így nagyon leegyszerűsödött a program megírása . Az 1 s os időalap egyszerű osztással megoldhatóvá vált a programmal . A 4 Mhz -ből sokkal bonyolultabb modon lehet csak pontos 1Hz -s időalapot kihozni . Én szívem szerint szívesebben írnék új programot minthogy egy kész programot bogarásszak
Egyébként egy kvarc 200ft , menj és vegyél vagy keress a padláson egy régi kvarcórát és vedd ki belőle ......
(#) Hp41C válasza tib12 hozzászólására (») Jan 2, 2012 /
 
Órakvarc
Az átírás legalább egy napot elvenne egy programozótól...
(#) kissi válasza kaqkk hozzászólására (») Jan 2, 2012 /
 
Ezt gondolom nem nekem akartad írni !?
Steve
Következő: »»   46 / 66
Bejelentkezés

Belépés

Hirdetés
XDT.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