Fórum témák

» Több friss téma
Fórum » PIC programozás assemblyben
 
Témaindító: sonajkniz, idő: Máj 30, 2015
Témakörök:
Lapozás: OK   11 / 33
(#) Hp41C válasza Halász Z. hozzászólására (») Dec 1, 2015 /
 
Idézet:
„Tehát a BSR beállításával kiválasztom a mem lapot
BCF BSR,0 ; (BCF STATUS,0)
BCF BSR,1 ;(BSF STATUS,1)”

Ez így teljesen felesleges, helyette itt a rövidebb megoldás
  1. movlb 1
  2. bcf TRISC,1 ; valóban a TRISC regiszter 1. bitjét törli

De ennél egyszerűbb, olvashatóbb megoldás is van:
  1. banksel TRISC
  2. bcf TRISC,1 ; valóban a TRISC regiszter 1. bitjét törli

Idézet:
„vagy be kell tölteni a reg címét?
MOVLW Ox08E
MOVWF ?
z.”

Ezt nem is értem.
Mintapélda pl. az adatlapban az AD beállítása: Example 16-1.
A hozzászólás módosítva: Dec 1, 2015
(#) Halász Z. hozzászólása Dec 1, 2015 /
 
Köszi!
(#) Pali79 hozzászólása Dec 3, 2015 /
 
Sziasztok!
16 bites számot szeretnék karakteres LCD-n megjeleníteni. Innen válogattam rutinokat, de nem igazán értem és nem is akarnak működni. Van valakinek ötlete?
(#) sonajkniz válasza Pali79 hozzászólására (») Dec 3, 2015 /
 
Nem egészen értem a problémádat. A 16 bites szám karakterekre bontásával, vagy a kijelző meghajtásával van gondod?
(#) Pali79 válasza sonajkniz hozzászólására (») Dec 3, 2015 /
 
Tulajdonképpen igen. Gondom nem biztos, hogy lenne vele, csak gyorsan túl akartam lenni rajta.
(#) sonajkniz válasza Pali79 hozzászólására (») Dec 3, 2015 /
 
Ezt Hp41C tette fel a kérésemre:Bővebben: Link
A kijelző meghajtására pedig ezt ajánlom:Bővebben: Link
De ha sürgős, holnap küldök mintapéldát.
A hozzászólás módosítva: Dec 4, 2015
(#) foxi63 válasza Pali79 hozzászólására (») Dec 3, 2015 /
 
Megírhatod magad is. 16 bit max 65535 értéket tárolhat unsigned esetén.
10.000
1.000
100
10
ezeket a számokat kell szép sorban kivonogatni az eredeti szánból, és hamar összáll az 5 digit.
megnézed, hányszor kell kivonogatni a 10.000-et amíg lehet. a maradékból 1000-et stb.
Az elkészült 5 digithez hozzáadsz 48-at és megvan az LCD-re az öt szám.
(#) Pali79 válasza sonajkniz hozzászólására (») Dec 3, 2015 /
 
Szerintem az első linket elrontottad
(#) sonajkniz válasza Pali79 hozzászólására (») Dec 3, 2015 /
 
Bocsi!
Nem cserélte le a telefonom a vágólap tartalmát, én meg nem ellenőríztem.
Remélem, most jó lessz.
Bővebben: Link
A hozzászólás módosítva: Dec 4, 2015
(#) sonajkniz válasza sonajkniz hozzászólására (») Dec 3, 2015 /
 
Ez borzasztó! Talán így.
Ezen topic 9. Oldal, 4. Hozzászólás.
(#) Hp41C válasza Pali79 hozzászólására (») Dec 3, 2015 /
 
Hol jönnek a gondok?
(#) Pali79 válasza Hp41C hozzászólására (») Dec 3, 2015 /
 
A 16 bites bináris, ASCII kóddá alakításánál.
(#) ktamas66 válasza Pali79 hozzászólására (») Dec 3, 2015 /
 
Én először BCD-re alakítom, aztán ASCII-vá. Pl.:
  1. ; 16 bites átalakítás BCDre
  2. BCDvalL         equ     0x126   ; (Bank2!!)
  3. BCDvalM         equ     0x127
  4. BCDvalH         equ     0x128
  5. MCount2         equ     0x129
  6. NumbLo          equ     0x12A
  7. NumbHi          equ     0x12B
  8. BCDtemp         equ     0x12C
  9. COUNT           equ     0x12D
  10.  
  11. ;varakozo hurkok regiszterei
  12. wtreg1          equ     0x12E          
  13. wtreg0          equ     0x12F
  14. wtreg2          equ     0x130
  15. ;atmeneti regiszterek
  16. temp0           equ     0x131
  17. temp1           equ     0x132
  18. temp2           equ     0x133
  19. PWML            equ     0x134
  20. PWMH            equ     0x135
  21.  
  22. ;--------------- PWM kijelzés 
  23.         MOVFW   PWML
  24.         MOVWF   NumbLo
  25.         MOVFW   PWMH
  26.         MOVWF   NumbHi
  27.         CALL    HexBCD
  28.        
  29.         movlw   0x20            ;+ egy space
  30.         movwf   DATA_I2C
  31.         call    I2C_ARRAY_DATA
  32.         movfw   BCDvalM         ;csak valami hexa adat
  33.         call    BINASCII        ;átalakítom ASCII-ra
  34.         movf    temp1,w         ;nagyobbik helyi értéket
  35.         movwf   DATA_I2C
  36.         call    I2C_ARRAY_DATA
  37.         movf    temp2,w         ;kisebik helyi értéket
  38.         movwf   DATA_I2C
  39.         call    I2C_ARRAY_DATA
  40.         movfw   BCDvalL         ;csak valami hexa adat
  41.         call    BINASCII        ;átalakítom ASCII-ra
  42.         movf    temp1,w         ;nagyobbik helyi értéket
  43.         movwf   DATA_I2C
  44.         call    I2C_ARRAY_DATA
  45.         movf    temp2,w         ;kisebik helyi értéket
  46.         movwf   DATA_I2C
  47.         call    I2C_ARRAY_DATA
  48.  
  49. ;====================================================================
  50. ; Binary to BCD conversion routine
  51. ; 16 bit number to convert is in NumbHi, NumbLo
  52. ; result is set in BCDval HML
  53. ;
  54. HexBCD    
  55.    movlw d'16'
  56.    movwf MCount2
  57.    movlw d'1'
  58.    movwf FSR0H
  59.    clrf BCDvalH
  60.    clrf BCDvalM
  61.    clrf BCDvalL
  62.    bcf STATUS,C
  63.  
  64. loop16    rlf NumbLo,F
  65.    rlf NumbHi,F
  66.    rlf BCDvalL,F
  67.    rlf BCDvalM,F
  68.    rlf BCDvalH,F
  69.  
  70.    decf MCount2,F
  71.    btfsc STATUS,Z
  72.    return
  73.  
  74. adjDEC    movlw BCDvalL
  75.    movwf FSR0L
  76.    call adjBCD
  77.    movlw BCDvalM
  78.    movwf FSR0L
  79.    call adjBCD
  80.    movlw BCDvalH
  81.    movwf FSR0L
  82.    call adjBCD
  83.    goto loop16
  84.  
  85. adjBCD   movlw d'3'
  86.    addwf INDF0,W
  87.    movwf BCDtemp
  88.    btfsc BCDtemp,3
  89.    movwf INDF0
  90.    movlw 30h
  91.    addwf INDF0,W
  92.    movwf BCDtemp
  93.    btfsc BCDtemp,7
  94.    movwf INDF0
  95.    return
  96.  
  97. ;-------[ CONVERT rutin ]--------------------------------------------
  98. ;       A W-ben lev? hexa számot (fél-by te-ot} átalakítja a megfelel?
  99. ;       ASCII karakterkóddá, hogy ki lehessen íratni.
  100. CONVERT
  101.         addlw   0x30
  102.         movwf   temp0
  103.         sublw   0x39
  104.         skpnc
  105.         goto    CNV1
  106.         movf    temp0,w
  107.         addlw   7
  108.         movwf   temp0
  109. CNV1    movf    temp0,w
  110.         return
  111.  
  112. ;-------[ BINASCII rutin ]-------------------------------------------
  113. ;       A W-ben kapott értéket kétdigites ASCII-vá alakítja,
  114. ;       hogy ki lehessen jelezni. templ-temp2-ben adja vissza. (HI-Lo)
  115. BINASCII
  116.         movwf   temp1           ;bejöv? adat még kelleni fog
  117.         andlw   0x0f            ;alsó nibble maszkolás
  118.         call    CONVERT         ;ASCII-vá alakítom
  119.         movwf   temp2           ;egyel?re elteszem, alsó nibble
  120.         swapf   temp1,w         ;fels? nibble
  121.         andlw   0x0f            ;maszkolás
  122.         call    CONVERT         ;ASCII-vá alakít
  123.         movwf   temp1
  124.         return
(Itt csak négy jegyet iratok ki ezért nem használom BCDvalH-t)
(#) Pali79 hozzászólása Dec 17, 2015 /
 
Egy gyöngyszem a PIC kezdőknek témából PWM-mel kapcsolatban:
Idézet:
„Arra azért vigyázz, hogy mindkét CCP alapból a TMR2-t használja, vagyis ha eltérő frekvenciát állítasz be, nem fog rendesen menni. Az utoljára beállított lesz az igaz mindegyikre.
A függvény meg csak a TMR2-t kapcsolgatja mindegyiknél akkor is, ha a CCPTMRS0-t átállítod.
(6.0-ás mikroc-nél így van. Lehet, hogy már kijavították, de még nem néztem meg.)”

(#) Halász Z. hozzászólása Feb 11, 2016 /
 
Hali !
Segítségeteket kérem!
A pic16f1828 adatlapjában a c port init a köv. van megírva. :
  1. BANKSEL PORTC ;
  2. CLRF PORTC ;Init PORTC
  3. BANKSEL LATC ;Data Latch
  4. CLRF LATC ;
  5. BANKSEL ANSELC
  6. CLRF ANSELC ;Make RC<5:0> digital
  7. BANKSEL TRISB ;
  8. MOVLW B’00000000’; all outputs
  9. MOVWF TRISC ;


így nem csinál semmit.
Ha az első két sort utoljára írom, viszont működik.
Valamint a ledek szekvenciális lefutása csak először jó, másodszorra és onnan tovább mindig a második után visszaugrik az elsőre.
A c port 3-4-5 ön van 3db led amit villogtatnék.
Csatolom a fájlt.
Előre is köszönöm.

megegy2.zip
    
(#) Pali79 válasza Halász Z. hozzászólására (») Feb 11, 2016 /
 
Még nézem, de az első amit kiszúrtam, hogy a PORTx regisztert nem írjuk! Az árnyékregiszterét kell írni vagyis a LATx-et.

Szerk: teljesen jól van az init megírva, annyi a gond, hogy itt ez után a rész után a TRISx regiszternek megfelelő bankban van amikor rátérsz a főprogramra. Tehát ha beírod:
  1. banksel LATC

Akkor működni fog.

Még egy: nem tudom, hogy elírás-e és nem is feltétlen hiba, mert akár még működhet is, de ez így nem korrekt:
  1. BANKSEL TRISB ;
  2. MOVLW B’00000000’; all outputs
  3. MOVWF TRISC ;


Meg még egy: a szekvencia azért nem jó, mert nem mindig ugyan annyi időt hagysz. Egyszer IDO szubrutin, máskor csak egy NOP.
A hozzászólás módosítva: Feb 11, 2016
(#) Pali79 válasza Halász Z. hozzászólására (») Feb 11, 2016 /
 
Kicsit kipofoztam, de kipróbálni nem tudom.

megegy2.asm
    
(#) Halász Z. válasza Pali79 hozzászólására (») Feb 11, 2016 /
 
HI!
Igaz olvastam is a latx regről csak valahogy elfelejtődött.
Az elírás a gyári pdf-ben van, de egy bankon belűl.
A szekvenciánál úgy gondoltam,hogy mikor törlöm a 3-ast egyszerre írom a 4-est.
De a progi a 4-es kivillantása után újra a 3- ast villantja fel, onnantól egy kör elejéig jó.
Nem tudom érthetően írtam-e.
Próbálom amit küldtél.
-
Hát ez nem tiszta.
Nem csinál semmit. Ha a
  1. BANKSEL PORTC ;
  2. CLRF    PORTC ;Init PORTC

utoljára írom az initben akkor villog.
Az 5-ös kimenet után gyorsan vált a 3-asra ezért a 3-as elé beszúrtam CALL IDO-t és egyszerűen kihagyja az 5-ös kimenet bekapcsolását, felváltva villog a 3-4 ?
Üdv : Z.
A hozzászólás módosítva: Feb 11, 2016
(#) Pali79 válasza Halász Z. hozzászólására (») Feb 11, 2016 /
 
Nem igazán értem. Szimulátorban rendesen megy.
Esetleg így.

megegy2.asm
    
(#) Halász Z. válasza Pali79 hozzászólására (») Feb 11, 2016 /
 
Érdekes, most megy (villog) de ugyanúgy visszaugrik a 4-ről a 3-ra. mint először.
A sim-be mit kell beállítani, hogy változzanak a regiszterek?
Mert a PC-n kívül nem változik semmi.
Kösz Z.
(#) Pali79 válasza Halász Z. hozzászólására (») Feb 11, 2016 /
 
A fordításnál debug módot kell beállítani és absolut módban kell fordítani.
Mivel programozol?
A hozzászólás módosítva: Feb 11, 2016
(#) Halász Z. válasza Pali79 hozzászólására (») Feb 11, 2016 /
 
Pickit2 clone.
(#) Pali79 válasza Halász Z. hozzászólására (») Feb 11, 2016 /
 
Kár. PK3-mal tudnád realtime debuggolni.
(#) Halász Z. válasza Pali79 hozzászólására (») Feb 12, 2016 /
 
Szimulátorral minden ok.
Megvan a hiba. Configra gyanakodtam. WDT be volt kapcsolva!
Bocs.
Ez a hét erre ment rá.
Asszem megjegyeztem.
Most jól működik.
Köszönöm a segítséget. Z.
(#) Pali79 válasza Halász Z. hozzászólására (») Feb 12, 2016 /
 
Na azt én nem is néztem....Én 99%ban kikapcsolom, fel sem merült bennem, hogy az is gond lehet...
(#) Halász Z. válasza Pali79 hozzászólására (») Feb 12, 2016 /
 
Elvileg én is ,nem gondoltam,hogy be van kapcsolva. Z.
(#) sonajkniz hozzászólása Feb 24, 2016 /
 
Kedves fórumtársak!

Egy PIC18F26K22-esel akadt gondom.
A PWM-hez használható timerjei a 2-es, 4-es, 6-os.
Működik is a PWM, csakhogy egyik timer sem reagál az előosztóra. Azaz nem tudom a PWM jelet lelassítani megfelelő mértékben.
Külön lepróbáltam a timereket flag bit figyelésre is, így kiderült hogy az utóosztók sem működnek.
Ha valaki ismeri az adott PIC-et, kérem, segítsen.
(#) bbalazs_ válasza sonajkniz hozzászólására (») Feb 24, 2016 /
 
Csak igy elso blikkre: jo bankban allitod a regisztereket?
(#) Hp41C válasza bbalazs_ hozzászólására (») Feb 24, 2016 /
 
Az 0xF60 alatti SFR -ek a bank15 kiválasztásával vagy indirekten vagy movff utasítással érhetők el.
(#) sonajkniz válasza bbalazs_ hozzászólására (») Feb 24, 2016 /
 
Igen. Timer2-őt a movlb 0-án, timer4-et movlb 0F-en banked módban. A hozzájuk tartozó PRx-et tudom állítani. Csak az osztókat nem.
Még egy furcsaság. Az adatlap szerint a PRx bekapcsoláskori értékének 255-ön kellene lennie. De ha még a timer bekapcsolása előtt nem töltöm fel PRx-et értékkel, akkor el sem indul a timer, és utólag már hiába adok neki értéket.
Következő: »»   11 / 33
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