forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
Ukladanie stringu z USART

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip
 
Dybbuk
Přispěvatel
Přispěvatel


Založen: 18.3.2016
Příspěvky: 28

PříspěvekZaslal: 03 červen 2016, 18:09    Předmět: Ukladanie stringu z USART Citovat

Ahojte,
na zachytenie znaku co prisiel na Rx pouzivam prerusenie kde znak ulozim do W a nasledne do nejakej premennej (MOVF RCREG,W).
Ako sa postupuje ked chcem zachytit viacero znakov a dalej s nimy pracovat?
Povedzme ze by som chcel riadit chod procesora string prikazmi cez USART.
Pouzitie napr. 20 pracovnych registrov na odchyt 20 znakov mi pride ako divocina a do EEPROM to predpokladam nebude stihat zapisovat (nemam odskusane). Este mi napada moznost vetvit ten program stylom IF prvy znak = 'nieco' then goto niekde kde bude dalsi if druhy znak = 'nieco' then goto atd.. ale to by som po par prikazoch prisiel k zaveru ze som sa zamotal. Nepodarilo sa mi najst na nete (v kratkom case) nejake konkretne ani teoreticke riesenie pre assembler, tak ak ma niekto nejaky tip, tak vopred vdaka.
Moj PIC je 16F690.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Radius
Profesionál
Profesionál


Založen: 22.2.2013
Příspěvky: 461

PříspěvekZaslal: 03 červen 2016, 21:29    Předmět: Citovat

Buď potřebuješ buffer na uložení celého přikazu a případných parametrů, který plníš a po přijetí ukončovacího znaku vyhodnotíš celý naráz a nebo to parsuješ po jednotlivých znacích stylem stavový automat. Ani jedno Ti v PIC assembleru nezávidím (jsem si to sám vyzkoušel). Zkus to v C,kód bude přehlednější. Paměti to má na takovou práci dost.
_________________
x51 , ARM , XILINX
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
 

 
Dybbuk
Přispěvatel
Přispěvatel


Založen: 18.3.2016
Příspěvky: 28

PříspěvekZaslal: 04 červen 2016, 16:26    Předmět: Citovat

Uz dlhsiu dobu premyslam, ze kde cca je ta hranica kedy to vzdat z assemblerom a prejst na C.. Mas nejaky dobry tip kde zacat? S C-ckom mam skusenosti iba pre windows .exe, pre PIC som programy v C nikdy nepisal. Nejaky dobry studijny material? Dik.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Radius
Profesionál
Profesionál


Založen: 22.2.2013
Příspěvky: 461

PříspěvekZaslal: 04 červen 2016, 23:16    Předmět: Citovat

Céčko jako céčko. Pokud umíš napsat konsolovou aplikaci pro win, nastuduješ akorát drobné rozdíly které jsou závislé na platformě pro kterou překládáš a typu kompilátoru který použíješ.
_________________
x51 , ARM , XILINX
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
 

 
JohnBoss
Přispěvatel
Přispěvatel


Založen: 18.1.2016
Příspěvky: 22

PříspěvekZaslal: 05 červen 2016, 19:32    Předmět: Citovat

Moc divočina v asm to není. Pár řádků. Přijímám data s GPS. mám k přerušení od UART zapnutý TMRx a ten hlídá příjem posledního znaku, že pokud po dobu xy ms nic nepřijde, jsou data kompletní. Při přerušení od RCIF dojde k posunu v RAM o 1. Mám PIC 18F46K22. Kdyby jsi chtěl kod, tak ho sem dám.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Dybbuk
Přispěvatel
Přispěvatel


Založen: 18.3.2016
Příspěvky: 28

PříspěvekZaslal: 06 červen 2016, 11:22    Předmět: Citovat

Seruste, vdaka za odpovede.
Posunom v RAM o 1 myslis, ze kazdy jeden prijaty Byte sa ti ulozi do jednej pamatovej pozicie? Takto to mam aj ja momentalne vyriesene a funkcne co mi ale zo zaciatku nesedelo je, ze textovy retazec napr.: 5 znakov zabera 5 Bytov v pamati, ale ked sa nad tym lepsie zamyslim, tak to dava zmysel.
Mozes pls. poslat ten kod, aspon tu cast kde prijimas a spracovavas data, zaujima ma ako si vyriesil ten posun v RAM.
Dik.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
JohnBoss
Přispěvatel
Přispěvatel


Založen: 18.1.2016
Příspěvky: 22

PříspěvekZaslal: 06 červen 2016, 14:35    Předmět: Citovat

kód:
;****************************************************************************
;preruseni od TMR0
;****************************************************************************
IF_TMR0
   banksel   INTCON
   bcf      INTCON,TMR0IF
;   btg      PORTA,2

   movlw   b'10000111'  ;
   movwf   T0CON
   bsf      T0CON,TMR0ON

;   clrf   TMR0L
;   clrf   TMR0H
   banksel   SEGx_FLAG
;   bcf      TECKA1
;   bsf      PORTA,2
   bsf      GPS_OK

   lfsr   0,GPS1

   banksel   GPS_POCET_H_TEMP
   movf   GPS_POCET_H_TEMP,w
   banksel   FSR0H
   addwf   FSR0H,f

   banksel   GPS_POCET_L_TEMP
   movf   GPS_POCET_L_TEMP,w
   banksel   FSR0L
   addwf   FSR0L,f
   clrf   WREG
   addwfc   FSR0H

   movlw   0xFF
   movwf   INDF0

   banksel   GPS_POCET_L
   movff   GPS_POCET_L_TEMP,GPS_POCET_L
   movff   GPS_POCET_H_TEMP,GPS_POCET_H

   clrf   GPS_POCET_L_TEMP
   clrf   GPS_POCET_H_TEMP

   movff   GPS_POCET_VET_TEMP,GPS_POCET_VET

   clrf   GPS_POCET_VET_TEMP


IF_TMR0_END
#if (TEST)
   call   SEND_DATA
   movlw   .7
   movwf   GPS_POCET_VET
#else

#endif   
;   call   TMRx_GPS_DEKOD
   bra      INT_END

;****************************************************************************
;preruseni od RS232
;****************************************************************************
IF_RS232

   banksel   RCREG
   movf   RCREG,w            ; precist RCREG
   banksel   PIR1            ; jinak nejde vymazat priznak
   bcf      PIR1,RCIF         ; vymazat priznak preruseni
   banksel   GPS_TEMP
   movwf   GPS_TEMP         ; RCREG ulozit do TEMP

   banksel   TMR0L
   movlw   b'10000000'  ;
   movwf   T0CON
   movlw   .200
   movwf   TMR0H
   clrf   TMR0L
   bsf      T0CON,TMR0ON

   banksel   GPS_TEMP
   bcf      GPS_OK            ; vynulovat ze NEjsou data komplet
;   bsf      TECKA1

;   movff   GPS_FSR0_H,FSR0H
;   movff   GPS_FSR0_L,FSR0L

;   movff   GPS_TEMP,POSTINC0

   lfsr   0,GPS1
   
   banksel   GPS_POCET_H_TEMP
   movf   GPS_POCET_H_TEMP,w
   banksel   FSR0H
   addwf   FSR0H,f

   banksel   GPS_POCET_L_TEMP
   movf   GPS_POCET_L_TEMP,w
   banksel   FSR0L
   addwf   FSR0L,f
   clrf   WREG
   addwfc   FSR0H

   banksel   GPS_TEMP
   movf   GPS_TEMP,w
   movwf   INDF0



   banksel   GPS_POCET_L_TEMP
   incf   GPS_POCET_L_TEMP
   CLRF   WREG   
   addwfc   GPS_POCET_H_TEMP


   banksel   GPS_TEMP
   movf   GPS_TEMP,w
   xorlw   '$'
   btfss   STATUS,Z
   bra      IF_RS232_END

   incf   GPS_POCET_VET_TEMP


IF_RS232_END

;   bsf      PORTA,2
;   bcf      PORTA,2

   bra      INT_END   


Snad se v tom vyznáš. Pokud 1.7ms nic nepřijde na UART, vykoná se preruseni od TMR0 a bere se to že data s GPS jsou komplet. Pak se řeší co se vlastně uložilo.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Mahoney
Profesionál
Profesionál


Založen: 26.12.2013
Příspěvky: 101

PříspěvekZaslal: 06 červen 2016, 18:54    Předmět: Citovat

Kruhový buffer v ASM je v příkladech Chipona2, stačí si to jen najít a použít, je to pěkně napsáno (i když drobné chybky by se našly, ale kdo nikdy nechyboval ať hodí kamenem).

http://pic16fxx.sweb.cz/programovani/chipon2/index.html

Kruhový buffer v C je popsán na Algoritmy.net

https://www.algoritmy.net/article/32/Kruhovy-buffer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
JohnBoss
Přispěvatel
Přispěvatel


Založen: 18.1.2016
Příspěvky: 22

PříspěvekZaslal: 13 červen 2016, 7:42    Předmět: Citovat

Ty stránky co poslal Mahoney jsou dobrý, ale použití maker není moc dobrá věc. Přestal jsem to požívat, protože makro se opakuje jako celý kus kodu. Pokud je makro moc dlouhé a opakuje se často, pěkně to sežere pamět v PIC.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Mahoney
Profesionál
Profesionál


Založen: 26.12.2013
Příspěvky: 101

PříspěvekZaslal: 13 červen 2016, 20:48    Předmět: Citovat

To je pravda, první co jsem udělal bylo, že jsem ty makra zrušil. Jinak ten druhej odkaz co jsem dal je Java, nikoliv C, za což se omlouvám (editovat to nebudu). Kruhový buffer v C např. zde:
http://embedjournal.com/implementing-circular-buffer-embedded-c/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
theenggprojects
Nováček
Nováček


Založen: 23.8.2016
Příspěvky: 6

PříspěvekZaslal: 29 září 2016, 3:20    Předmět: Citovat

You should also check The Engineering Projects because they have posted a lot of Arduino Projects and PIC Microcontroller Projects and have also designed many new Proteus Tutorials and C# Tutorial. I hope you guys are gonna like them.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)