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   49 / 66
(#) kissi válasza vilmosd hozzászólására (») Ápr 25, 2012 /
 


Steve
(#) titi11 hozzászólása Máj 13, 2012 /
 
Sziasztok szeretném megkérdezni tudna e valaki nekem segíteni egy program átirásában egy óra programja lenne? Ha igen légy szíves írj rám a a részletekkel kapcsolatban. A segítséget köszönöm !!
(#) l0rika hozzászólása Jún 22, 2012 /
 
Sziasztok!

Egy PIC18f4620-val szeretnék egy lcd-t működtetni. Sajnos mivel nagyon kezdő vagyok, nem sikerült még egy olyan programot írni ami azt csinálná amit szeretnék. Nem küldene valaki egy szimpla MPlabban, c nyelven írt forráskódot, ami legalább egy karaktert kiír a kijelzőre? Esetleg egy kis bekötési rajzzal mellékelve...de a programon van a lényeg.

Előre is köszönöm...
(#) watt válasza l0rika hozzászólására (») Jún 22, 2012 /
 
Szétnéztél már a cikkek között?
(#) l0rika válasza watt hozzászólására (») Jún 22, 2012 /
 
Persze, hogy szétnéztem, de sajnos vagy külön programot kaptam bekötés nélkül, vagy bekötést program nélkül. Még nem vagyok annyira profi szinten, hogy egy programból a bekötést ki tudjam szűrni.
Magamtól is próbáltam írni programot. Szintaktikailag helyes is volt, de nem írt ki egy karaktert sem a kijelzőre. A fenti kérdést már csak elkeseredettségemből írtam ki, mivel már több napja ezen kínlódok. Na meg persze reménykedtem abban, hogy egy rutinosabb PIC programozónak hányódik egy ilyen lcd-s projekt, amit nem sajnál elküldeni. Esetleg 10 perc alatt összedob egyet.
(#) ChrisLarion válasza l0rika hozzászólására (») Jún 22, 2012 /
 
Üdv!

http://esca.atomki.hu/PIC24/lcd.html

Itt egy jó kis összefoglaló az LCD vezérlésről c-ben. Nagyon fontos,h az LCD-ket programban inicializálni kell (pl. megadni,h hány bites üzemmódban használod, törölni a képernyőt a végén stb.)és csak azután tudsz bármit is kiíratni rá, de mindezt elég jól leírják ezen az oldalon: http://esca.atomki.hu/PIC24/lcd.html (leírás+ kapcsirajz+példaprogram)
Nekem ezen leírás alapján sikerült írnom HITECH C-ben is egy vezérlő progit. Én spec egy dologgal szívtam igaz nem sokáig, de azért figyelj rá te is, h én kiraktam a kontraszt lábot ugye egy osztóra potival és belőttem középállásba, majd megírtam a programot és istennek se írt ki semmit, majd kb. 1 óra szarakodás után rájöttem,h talán tekernem kéne kicsit a potin és lám, rögtön ott volt a szöveg.(nagyon le volt véve a kontraszt)
(#) kissi válasza ChrisLarion hozzászólására (») Jún 22, 2012 /
 
Szia!

Ezért kezdődnek úgy a jótanácsok, hogy a kontraszt potit úgy állítjuk, hogy lássuk a kockákat , ill. ha jó az inicializálás, akkor látjuk, hogy átáll többsoros üzemmódba ( már ha azt állítjuk be! ) !

Steve
(#) watt válasza l0rika hozzászólására (») Jún 22, 2012 /
 
Nem nagyon szoktam kész kódokkal dobálózni, mert nem tanultok belőle semmit, csak beültök a készbe, de legyen.
Ez egy soros porton keresztül vezérelhető LCD kijelző meghajtó 16F628A-val, programból állítható kontraszttal és háttérvilágítással. Bekapcsoláskor kiírja a verziószámát, így ellenőrizheted, hogy jól működik-e. A többit nem nehéz kitalálni a program megjegyzéseiből.
Készíteni kell neki egy Hi-Tech C projectet, felvenni a *.h fájlokat és a c forrást is a project fájl ablakba. Ha lefordul, lehet használni, módosítani, ahogy neked kell.
(#) l0rika válasza watt hozzászólására (») Jún 22, 2012 /
 
Köszönöm szépen.

Talán igazad van, de mint írtam, végső elkeseredettségemben vettem rá magam, hogy ilyent kérjek. Már pár napja csak ezt böngészem, kutatom, próbálom, de egyszerűen nem jött össze. Mindegy...nem magyarázkodom tovább. Örök hálám.
(#) icserny válasza l0rika hozzászólására (») Jún 22, 2012 /
 
Idézet:
„Egy PIC18f4620-val szeretnék egy lcd-t működtetni.
Nem küldene valaki egy szimpla MPlabban, c nyelven írt forráskódot, ami legalább egy karaktert kiír a kijelzőre?”
PIC4520-ra van több példa is. Gondolom a 4520->4620 átírás könnyen megoldható. Arra ügyelj, hogy nálam történelmi okokból 20 MHz-es kvarccal megy a PIC18 oszcillátora (ehhez kell viszonyítani a késletetési ciklusokat).
(#) l0rika válasza icserny hozzászólására (») Jún 22, 2012 /
 
Köszönöm szépen. El sem tudod hinni, hogy most mennyire jól jött ez az oldal.
(#) l0rika válasza ChrisLarion hozzászólására (») Jún 22, 2012 /
 
Köszönöm neked is. Tényleg nagyon jól leír mindent.
(#) Damian666 hozzászólása Szept 20, 2012 /
 
Hali mindenkinek! a következő problémával zaklatnálak titeket. Adott egy automata akkutöltő, aminek a vezérlése pic 16c71-el van megoldva. sajnos a az egyik ilyen vezérlőből kihalt a pic. a működőből kiolvastam a programot, szerencsémre nem volt levédve. Willeprom-om van, elvileg az is tudja progizni ezt a típust, de valamiért nem működik felprogramozás után. Kellene 1 pic programozó, valami specifikusabb, az ár "nem számít" 40-60 ezer között, nézegettem neten, de nekem nem mond semmit, az az információ, mivel eddig én nem foglalkoztam pic-el.

A pic 20Mhz-es külső kristályról jár. programozáskor mire kell figyelni, mit kell beállítani? Mert lehetséges hogy egyrészt ezért nem működik a felprogramozott pic. Ill használható helyette pic 16c711? vagy valami f-es széria? mert így egy tucat megy ki a kukába :S
(#) bbatka válasza Damian666 hozzászólására (») Szept 20, 2012 / 1
 
Szia!
Úgy sejtem le volt védve. Amit kiolvastatsz az csak a program egy része. Régen foglalkoztam már ezzel, de így rémlik.
Ne költs tízezreket feleslegesen új égetőre. Sokáig egy Propic2 égetővel égettem. Olcsó. Kapcsolást találsz a neten. Az Icprog szoftverrel tudod használni.
A pic kiváltásához vesd össze az adatlapjaikat a regiszter kiosztás szempontjából.
(#) Damian666 válasza bbatka hozzászólására (») Szept 20, 2012 /
 
Ha le volt védve, van rá mód hogy valahogy mégis kiolvassam a teljes programot? A pic programozó céges érdek, tehát mindenképp vételre kerül sor, nem építésre, ezért fontos tudnom milyen típust érdemes venni. 40-60 ezer forintos keret van rá. Köszönöm az eddigi infót.
(#) icserny válasza Damian666 hozzászólására (») Szept 20, 2012 /
 
Idézet:
„Ha le volt védve, van rá mód hogy valahogy mégis kiolvassam a teljes programot?”
Az általad említett költségkeret nagyságrendjében nem lehetséges. Azért védelem...
(#) Damian666 válasza icserny hozzászólására (») Szept 20, 2012 /
 
Aktivált kódvédelem mellett csak a programmemória első 64 szava, és utolsó szava olvasható ki sikeresen, a többi memóriahely olvasása nulla értéket ad vissza. ezt olvastam, tehát tényleg!.


az említett pic memóriamérete 1k. a kiolvasott hex fájl-t megnyitva, gy látom, hogy megvan az egész program, tehát nem csak az elsó 64 szó, hanem minden mellékletben csatolom.

Ha úgy látjátok ti is hogy tényleg megvan a teljes program, kérnék egy kis segítséget, mire kell odafigyelnem progizásnál, mit kell beállítanom.
(#) _vl_ válasza Damian666 hozzászólására (») Szept 20, 2012 /
 
Idézet:
„Aktivált kódvédelem mellett csak a programmemória első 64 szava, és utolsó szava olvasható ki sikeresen, a többi memóriahely olvasása nulla értéket ad vissza. ezt olvastam, tehát tényleg!.”

Biztos volt olyan PIC is, ami így működött, de amit én olvastam, annál meg minden kódszó kiolvasható volt, de az alsó és felső bitjeik össze voltak XOR-ozva egymással, azaz láttál "valamit", de az használhatatlan volt programként.
(#) bbatka válasza Damian666 hozzászólására (») Szept 20, 2012 / 1
 
A 16c71 adatlapja azt írja hogy a kódvédelmét vagy teljesen ki lehet kapcsolni vagy a teljes tartalmat ki lehet olvasni(67old.). Ez nekem azt sugallja hogy nem volt levédve
A 16C711 jó lehet helyette, esélyes, de olvasd végig az adatlapját. Aztán ott van még 16F716 is.

Időközben az ICproggal disassembláltam a HEX-t.
Nem tudom a 16F84 utasításai a 16c71-el mennyiben vannak pariban.
Az eredmény csatolva.
A hozzászólás módosítva: Szept 20, 2012

akku.txt
    
(#) Hp41C válasza bbatka hozzászólására (») Szept 20, 2012 / 1
 
Szia!

Az utasításkészlet egyezik, de jobb, ha 16C71 -ként fordítod vissza. A PICDisasm képes rá.
Érdemes egy kicsit átdolgozni a programot a 16F716 -ra (240 Ft + Áfa a ChipCad -nál), az egy PICKit2 -vel programozható. Sajnos a C típusok (a 16C84 és 16C83 kivételével) a programozáskor nagyobb áramot fogyasztanak, mint amit a PICKit2 elő tud állítani.
Több apró eltérés van: A 16F716 -ban a ram 0x20 -tól kezdődik, a 16C71 -ben 0x0c -től, Az ADIF bit a PIR1 -ben a 6. biten, a 16C71 -ben a ADCON 1. bitje volt. stb. A program igen rövid, így néhány óra alatt át lehet alakítani... Nem érdemes a 16C7xx -et programozni képes égetőre sokat költeni.
A hozzászólás módosítva: Szept 20, 2012
(#) bbatka válasza Hp41C hozzászólására (») Szept 20, 2012 / 1
 
Konvertáltam PICDisasm-el.
(#) Kovabe hozzászólása Szept 26, 2012 1 /
 
Sziasztok
Keresek egy olyan személyt aki irna nekem egy programot********
Az apróban hirdess, a fórumban tilos- moderator
A hozzászólás módosítva: Szept 26, 2012
(#) Zolg hozzászólása Nov 21, 2012 /
 
Sziasztok! Egy érdekes problémával fordulnék hozzátok. Egyszerűen nem tudok rajta túljutni. Adott egy PIC16F877 és egy PC. A kettő közt soros kommunikáció folyik ami rendben is van RCREG-be megérkezik az adat rendesen. Megszakításban szeretném lekezelni azt hogy mi történjen, adott paracsra adott kimenetek kapcsoljanak be. A problémám az hogy MPLAB-ban figyelve azt látom hogy RCREG-be megjön az adat PIR1,RCIF be is billen, de nem történik semmi a megszakításban. Semmi nem változik, mintha egyszerűen csak kilépne. Mellékelt kódban minden látszik, ha nem voltam egyértelmű akkor sorry, kérdésre pontosítok.
  1. LIST            p=16F877
  2. #include        "P16f877.inc"
  3.                 __config        0x39B9
  4.                 org             0x0000
  5.        
  6.        
  7.         cblock  0x20
  8.                 bflag
  9.                 WREG_TEMP
  10.                 STATUS_TEMP
  11.                 PCLATH_TEMP
  12.                 DATAIN
  13.                 DATAOUT
  14.                 RX_TEMP
  15.                 RDOUT
  16.         endc
  17.  
  18.  
  19. Bank0           MACRO
  20.                         bcf             STATUS,RP0
  21.                         bcf             STATUS,RP1
  22.                         ENDM
  23.  
  24. Bank1           MACRO
  25.                         bsf             STATUS,RP0
  26.                         bcf             STATUS,RP1
  27.                         ENDM
  28.  
  29. Bank2           MACRO
  30.                         bcf             STATUS,RP0
  31.                         bsf             STATUS,RP1
  32.                         ENDM
  33.  
  34. Bank3           MACRO
  35.                         bsf             STATUS,RP0
  36.                         bsf             STATUS,RP1
  37.                         ENDM
  38.  
  39.                                
  40.                        
  41.                        
  42.                 org             0x0000
  43.                 goto    main
  44.  
  45.  
  46.                 org             0x0004                                  ; Megszakítás szubrutin
  47.                 goto    reqstart
  48.  
  49. reqstart
  50.  
  51.         movwf           WREG_TEMP                       ;
  52.         movf            STATUS,W                        ;Regiszterek kimentése hogy
  53.         movwf           STATUS_TEMP                     ;a szubrutin által okozott
  54.         movf            PCLATH,W                        ;változások ne legyenek hatással
  55.         movwf           PCLATH_TEMP                     ;a fő program futására!!
  56.         clrf            PCLATH                          ;
  57.  
  58. ;---------------------------------------------------------------Soros adas-vétel kiválasztó-------------------!!tesztelni kell!!-------------------------
  59. reqteszt                                                        ;ki okozta a megszakítást??
  60.  
  61.  
  62. fogad_teszt
  63.         bank0                                                   ;váltás bank 0-ra
  64.         btfss           PIR1,RCIF                       ;RCREG(vétel) okozta a megszakítást?
  65.         goto            adas_teszt
  66.         call            rxdata
  67.  
  68. adas_teszt
  69.         bank0                                                   ;Váltás bank0-ra
  70.         btfss           PIR1,TXIF                       ;TXREG okozta a megszakítást?  ha TXIF=1 akkor buffer empty ha 0 akkor full
  71.         call            txdata
  72.         goto            reqend
  73. ;--------------------------------------------Soros adás-vétel kiválasztó vége---------------------------------------------------------------
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86. ;----------------------kiolvasás--------!!!!!!!!!hibakezelés még nincs kész!!!!!!------------------
  87. rxdata
  88.        
  89.                 bank0                                                                           ;váltás bank0-ra                                                      ;DATAIN-be
  90.                 movlw           h'030'                                                  ;Indirekt címzés!!!!
  91.                 movwf           FSR                                                             ;H 0x30-ra címezem az első byte-ot
  92.  
  93.         kiolvas
  94.                 movf            RCREG,w                                                 ;RCREG-et beletesszük a 0x30-as RAM-ba
  95.                 movwf           INDF                                                    ;mert FSR adja a címet amire INDF-el hivatkozok
  96.                 nop                                                                                     ;nop hogy RCIF billenni tudjon
  97.                 nop                                                                                     ;
  98.                 btfss           PIR1,RCIF                                               ;RCIF==1, vagyis van még adat a pufferben?
  99.                 return                                                                          ;ha nem akkor visszatérés szubrutinból
  100.                 incf            FSR                                                             ;ha van akkor növelem FSR-t
  101.                 goto            kiolvas                                                 ;és újra beolvasom a növelt címre
  102.  
  103.  
  104.  
  105.  
  106.  
  107. ;--------------------------------küldés-------------------!!!!!tx led!!!!!-----------------------------------
  108.  
  109. txdata
  110.                 bank0
  111.                 btfss   PIR1,TXIF                       ;megnézi hogy üres-e a TXREG
  112.                 goto    tx_wait                         ;ha nem üres(TXIF=0) vár
  113.                 goto    tx_go                           ;ha üres(TXIF=1) beír
  114.  
  115.                         tx_wait                                 ;még nem írható TXREG
  116.                                 nop                                     ;
  117.                                 nop                                     ;úgyhogy várakozás van
  118.                                 goto    txdata          ;újratesztel
  119.                
  120.                         tx_go
  121.                                 movf    dataout,w                       ;adat bemozgatása
  122.                                 movwf   TXREG                           ;TXREG-be
  123.                
  124.                                         kesz
  125.                                                 bank1
  126.                                                 btfss   TXSTA,TRMT      ;ki lett shiftelve TX pin-en??
  127.                                                 goto    kesz            ;nem mert TRMT=0, újratesztel=>vár
  128.                                                 return                          ;igen, kilépés a szubrutinból.
  129.  
  130.  
  131.  
  132. ;-----------------------------------------------PARANCSSZÓ DEKÓDOLÁS ÉS VEZÉRLÉS----------!!!hozzáigazítani az indirekthez!!------------------------------------------------
  133.  
  134. vez
  135.                 bank0                                                                                                   ;váltás bank0-ra
  136.                 clrf    bflag                                                                                   ;bflag nullázása
  137.                 clrf    portc                                                                                   ;hibaüzenetek nullázása
  138.                 movf    INDF,w                                                                                  ;beérkező adat mozgatása w-be                               
  139.                 andlw   b'00001111'                                                                             ;levágni az elejét mert nem kell
  140.                 movwf   bflag                                                                                   ;azt bemozgatni bflagbe
  141.  
  142.  
  143.  
  144. ;------------------------------------Parancs vizsgálat----!!!!hibakezelés!!!!------------------------------------------
  145.  
  146. Vizsg
  147.                 movf    bflag,w                                                                                 ;Beleteszi bflag-et w-be és
  148.                 xorlw   b'00000000'                                                                             ;összehasonlítja a '0000' értékkel
  149.                 btfsc   STATUS,Z                                                                                ;ha egyenlő akkor hibás parancs mert '0000'
  150.                 goto    hiba_0000                                                                               ;nem lehet
  151.  
  152.                 movf    bflag,w                                                                                 ;Beleteszi bflag-et w-be és
  153.                 xorlw   b'00000001'                                                                             ;összehasonlítja a '0001' értékkel
  154.                 btfsc   STATUS,Z                                                                                ;ha egyenlő akkor '0001' parancs
  155.                 goto    com_0001                                                                                ;meghívja com_0001 kimenetvezérlő szubrutint
  156.  
  157.                 movf    bflag,w                                                                                 ;Beleteszi bflag-et w-be és
  158.                 xorlw   b'00000010'                                                                             ;összehasonlítja a '0010' értékkel
  159.                 btfsc   STATUS,Z                                                                                ;ha egyenlő akkor '0010' parancs
  160.                 goto    com_0010                                                                                ;meghívja com_0010 kimenetvezérlő szubrutint
  161.  
  162.                 movf    bflag,w                                                                                 ;Beleteszi bflag-et w-be és
  163.                 xorlw   b'00000011'                                                                             ;összehasonlítja a '0011' értékkel
  164.                 btfsc   STATUS,Z                                                                                ;ha egyenlő akkor '0011' parancs
  165.                 goto    com_0011                                                                                ;meghívja com_0011 kimenetvezérlő szubrutint
  166.  
  167.                 movf    bflag,w                                                                                 ;Beleteszi bflag-et w-be és
  168.                 xorlw   b'00000100'                                                                             ;összehasonlítja a '0100' értékkel
  169.                 btfsc   STATUS,Z                                                                                ;ha egyenlő akkor '0100' parancs
  170.                 goto    com_0100                                                                                ;meghívja com_0100 kimenetvezérlő szubrutint
  171.  
  172.                 movf    bflag,w                                                                                 ;Beleteszi bflag-et w-be és
  173.                 xorlw   b'00000101'                                                                             ;összehasonlítja a '0101' értékkel
  174.                 btfsc   STATUS,Z                                                                                ;ha egyenlő akkor '0101' parancs
  175.                 goto    com_0101                                                                                ;meghívja com_0101 kimenetvezérlő szubrutint
  176.  
  177.                 movf    bflag,w                                                                                 ;Beleteszi bflag-et w-be és
  178.                 xorlw   b'00000110'                                                                             ;összehasonlítja a '0110' értékkel
  179.                 btfsc   STATUS,Z                                                                                ;ha egyenlő akkor '0110' parancs
  180.                 goto    com_0110                                                                                ;meghívja com_0110 kimenetvezérlő szubrutint
  181.  
  182.                 movf    bflag,w                                                                                 ;Beleteszi bflag-et w-be és
  183.                 xorlw   b'00000111'                                                                             ;összehasonlítja a '0111' értékkel
  184.                 btfsc   STATUS,Z                                                                                ;ha egyenlő akkor '0111' parancs
  185.                 goto    com_0111                                                                                ;meghívja com_0111 kimenetvezérlő szubrutint
  186.  
  187.                 movf    bflag,w                                                                                 ;Beleteszi bflag-et w-be és
  188.                 xorlw   b'00001000'                                                                             ;összehasonlítja a '1000' értékkel
  189.                 btfsc   STATUS,Z                                                                                ;ha egyenlő akkor '1000' parancs
  190.                 goto    com_1000                                                                                ;meghívja com_1000 kimenetvezérlő szubrutint
  191.  
  192.                 movf    bflag,w                                                                                 ;Beleteszi bflag-et w-be és
  193.                 xorlw   b'00001001'                                                                             ;összehasonlítja a '1001' értékkel
  194.                 btfsc   STATUS,Z                                                                                ;ha egyenlő akkor '1001' parancs
  195.                 goto    com_1001                                                                                ;meghívja com_1001 kimenetvezérlő szubrutint
  196.  
  197. ;-----------------------------------------Parancs vizsgálat vége!!---------------------------------------
  198.  
  199.  
  200. ;--------------------------------Kimenet vezérlő szubrutinok-----------------------------
  201.  
  202. hiba_0000
  203.                 bsf             portc,4                                                                                 ;0000-ás hiba beáll
  204.                 goto    reqend                                                                                  ;vége a megszakításnak
  205.  
  206. com_0001
  207.                 bsf             portd,1                                                                                 ;beállítások kódtábla szerint
  208.                 goto    reqend                                                                                  ;vége a megszakításnak
  209.  
  210. com_0010
  211.                 bcf             portd,0                                                                                 ;beállítások kódtábla szerint
  212.                 bcf             portd,1        
  213.                 goto    reqend                                                                                  ;vége a megszakításnak
  214.  
  215. com_0011
  216.                 bsf             portd,0                                                                                 ;beállítások kódtábla szerint
  217.                 bsf             portd,1        
  218.                 goto    reqend                                                                                  ;vége a megszakításnak
  219.  
  220. com_0100
  221.                 bcf             portd,2                                                                                 ;beállítások kódtábla szerint
  222.                 bcf             portd,3
  223.                 bcf             portd,4        
  224.                 goto    reqend                                                                                  ;vége a megszakításnak
  225.  
  226. com_0101
  227.                 bsf             portd,2                                                                                 ;beállítások kódtábla szerint
  228.                 bsf             portd,3
  229.                 bcf             portd,4        
  230.                 goto    reqend                                                                                  ;vége a megszakításnak
  231.  
  232. com_0110
  233.                 bsf             portd,2                                                                                 ;beállítások kódtábla szerint
  234.                 bcf             portd,3
  235.                 bsf             portd,4        
  236.                 goto    reqend                                                                                  ;vége a megszakításnak
  237.  
  238. com_0111
  239.                 bcf             portd,7                                                                                 ;beállítások kódtábla szerint
  240.                 bcf             portd,6
  241.                 bcf             portd,5        
  242.                 goto    reqend                                                                                  ;vége a megszakításnak
  243.  
  244. com_1000
  245.                 bcf             portd,7                                                                                 ;beállítások kódtábla szerint
  246.                 bsf             portd,6
  247.                 bsf             portd,5        
  248.                 goto    reqend                                                                                  ;vége a megszakításnak
  249.  
  250. com_1001
  251.                 bsf             portd,7                                                                                 ;beállítások kódtábla szerint
  252.                 bcf             portd,6
  253.                 bsf             portd,5        
  254.                 goto    reqend                                                                                  ;vége a megszakításnak
  255.  
  256.  
  257.  
  258.                        
  259.                                        
  260.                                                                                                
  261.                                                                
  262.                 reqend
  263.        
  264.                                 fsr_vizsg
  265.                                                 movlw   h'030'                                                  ;utolsó lépés:
  266.                                                 xorwf   FSR,w                                                   ;megnézi hogy az fsr a kezdő címen van-e
  267.                                                 btfsc   STATUS,Z                                                ;ha igen akkor
  268.                                                 goto    vege                                                    ;!!!!!Itt a VÉGE a Vez-nek!!!!
  269.  
  270.                                                         fsr_nagy
  271.                                                                         decf    FSR                                     ;ha nem akkor egyel csökkenti az fsr-t
  272.                                                                         goto    vez                                     ;és újra kódolás
  273.                 vege                   
  274.        
  275.                         movf    portd,w                                                                 ;nyugtaként visszaküldeni
  276.                         movwf   dataout                                                                 ;Zsoltinak
  277.                         call    txdata                                                                  ;feltétel nékül.
  278.  
  279.                
  280.                                 bank0                                                                                   ;bankváltás bank0-ra
  281.                                 clrf            STATUS                                                          ;
  282.                                 movf            PCLATH_TEMP,W                                           ;Regiszterek visszaállítása amit az
  283.                                 movwf           PCLATH                                                          ;elején kimentettünk. A végén azért
  284.                                 movf            STATUS_TEMP,W                                           ;swapf mert az nincs hatással a
  285.                                 movwf           STATUS                                                          ;Zero bitre.
  286.                                 swapf           WREG_TEMP,F                                                     ;
  287.                                 swapf           WREG_TEMP,W                                                     ;
  288.                                 retfie                                                                                  ;vissszatérés megszakításból
  289.  
  290.  
  291. ;------------------------------------------PARANCSSZÓ KÓDOLÁS ÉS VEZÉRLÉS VÉGE-----------------------------------------------------------------
  292.  
  293. main
  294.                 bank0
  295.                 movlw   b'11011111'                     ;T0CKI porta bemenet
  296.                 movwf   OPTION_REG
  297.                 movlw   b'11000000'                     ;GIE,PIE RB7-RB4 ON
  298.                 movwf   INTCON                          ;többi megszakítása OFF
  299.                 movlw   b'00110000'                     ;RX,TX megszakítás ON többi OFF
  300.                 movwf   PIE1                            ;
  301.                 call    init_comport            ;comport beállítása
  302.                 call    init_IOports            ;I/O portok beállítása              
  303.                 call    loop                            ;ciklus
  304.  
  305. init_comport
  306.                 bank1
  307.                 movlw   b'00100100'                     ;TXSTA beállítása:8bit mode,transmit enable,async mode,BRGH=1(high)
  308.                 movwf   TXSTA
  309.                 movlw   d'25'                           ;táblázat szerint baudrate:9615 bps=> hiba=0,16%
  310.                 movwf   SPBRG                           ;
  311.                 bank0
  312.                 movlw   b'10010000'                     ;RCSTA beállítása:soros port enabled,8bit mode, folyamatos mód, nincs cím figyelés,
  313.                 movwf   RCSTA                           ;
  314.                 return
  315.  
  316. init_IOports
  317.                 bank1
  318.                 movlw   b'11110000'                     ;Portb7-4 bemenet,
  319.                 movwf   trisb
  320.                 movlw   b'00000000'                     ;Portd kimenet mind, ez megy izzó
  321.                 movwf   trisd                           ;vezérlésekre
  322.                 movlw   b'11000000'                     ;portc,7,6 RX;TX
  323.                 movwf   trisc                           ;portc is
  324.                 bank0
  325.                 clrf    portd
  326.                 return
  327.  
  328.  
  329.  
  330. loop
  331.                 goto    loop
  332.                        
  333.  
  334. end


Kérlek vegyétek figyelembe hogy ez még csak egy félkész program ,lehetnek még benne egyéb hibák is, de eddig sajnos még csak eddig jutottam el a hibakeresésben...itt elakadtam. Köszönöm az ötleteket előre is!
(#) Zolg hozzászólása Nov 21, 2012 /
 
Furán tördelte...tisztább átláthatóság érdekében csatolom az ASM-et
(#) vilmosd válasza Zolg hozzászólására (») Nov 21, 2012 / 1
 
Ugy induloban 1.: az IT lekezelesenel a belepeskor mented a regisztereket, de a kilepesnel neñ allitod vissza. 2.: A Option a bank1-ben van. 3.: ITben nem varakozunk, mint nalad a TX rutinban.
Ugy hirtelen ennyi.
(#) Zolg válasza vilmosd hozzászólására (») Nov 21, 2012 /
 
Köszönöm a segítséget! Ott a pont, a probléma a bankváltásoknál volt. Igaz az hogy az option a bank1-ben van ebből a szempontból nem okoz galibát, de a PIE1 is és az már igen! Hihetetlen hogy még mindig képes vagyok ilyen hibákat véteni...
Annyiban megvédeném magam, hogy a mentett regisztereket visszatöltöm a reqend címke alatt... Viszont azt nem tudtam hogy ITben nem várakozunk és köszönöm az infót, korrigálom. Erről jut eszembe...nem tudna valaki adni egy linket vagy bármit ahol megtalálom az ilyen programozási "aranyszabályokat" mint pl ez. Kerestem már neten de eddig még nem találtam.
(#) vilmosd válasza Zolg hozzászólására (») Nov 21, 2012 /
 
T es T Meg valami. A cblock jobb helyen lenne a 0x70 cimtol, mert ezt mindenhonnan latod. Foleg a mento regisztereknel fontos, mert nem kell a bankvaltasra figyelni.
A hozzászólás módosítva: Nov 21, 2012
(#) vilmosd válasza Zolg hozzászólására (») Nov 21, 2012 /
 
Idézet:
„Viszont azt nem tudtam hogy ITben nem várakozunk”
Ez vegulis az IT feladatanak ellentmond. Az IT feladata az idoben ritkan elofordulo esemenyek lekezelese. Viszont ha Te lefoglalod egy esemennyel az IT-t, nem tud masik esemenyre reagalni, igy ott elofordulhat adatvesztes, egyebb problema. Pl az USART vetelnel jelenthet problemat, hogy ugye a RX buffer betelik, mert nem olvastad ki. Ettol bebillen az overrun bit, es leall a vetel. Maris ott a problema azert mert a vetelnel nem jutottal idoben a lekezelesre.
(#) vilmosd válasza Zolg hozzászólására (») Nov 21, 2012 /
 
Meg egy hiba: Fontos!!!!! IT-bol Retfie utasitassal lepunk ki nem Retun-al.
A hozzászólás módosítva: Nov 21, 2012
(#) Zolg válasza vilmosd hozzászólására (») Nov 21, 2012 /
 
Huh! Köszönöm a tanácsokat, úgy érzem lesz mit korrigálni... Viszont ezek fényében csöppet át kell rendeznem a dolgokat... Viszont még egy kérdésem lenne:
Mplab-ban szeretném debugolni a soros vételt. Tudom hogy valós időben nem képes rá,de nekem teljesen elég látni hogy az RCREG-ből kimentett cuccok mik. A probléma az hogy elküldöm a soros adatot, és rá két másodpercre kapcsolom ki a debugger "Run" funkcióját és azt látom hogy ez a szegény PIC még mindig az IT-ban vesztegel holott azt már leredukáltam csupán ennyire:
  1. interrupt      
  2.                 banksel         RCREG
  3.                 movf            RCREG,w
  4.                 movwf           datain

Adatot elküldtem többször is RCREG üres, DATAIN üres, RCIF=0, mégis megszakításban?? Nem értem...összes többi megszakítás letiltva. Megint én rontottam el valamit, vagy csupán az MPlab járatja velem a bolondját? Van ilyen tapasztalat valakinek? Köze lehet a PGD, PGC lábaknek ehhez? Abból gondolom hogy ugye PORTB 4-7,ig meg tud szakítani, bár jelenleg ez is ki van kapcsolva. Mellékelem a komplett ASM-et is hogy tiszta legyen.

egy.asm
    
Következő: »»   49 / 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