Skicka kommando till F877 över RS-232 i C
Skicka kommando till F877 över RS-232 i C
Hej.
Jag behöver lite hjälp med att läsa av datorns comport.
Jag behöver implementera en funktion i min PIC f877. Tanken är att
skicka ett kommando från datorn via hyperterminal (RS232) och beroende
på vilket värde jag skicka med så skall det styra respektive utgång på PICen. Jag tänkte mig att man i terminalfönstret får upp en text >Command:
Efter : skriver man @2 tex, där @ visar att det finns data att hämta och 2 är den utgån jag skall driva (i det här fallet en lysdiod som är kopplad på denna utgång. Jag har gläömt mycket av mina C kunskaper, var ett tag sen sist. Har nyss kommit igång och har inte riktigt koll på vilka filer som behöver inkluderas, just nu har jag bara 15f877.h inkluderad.
Hoppas nån kan hjälpa till
/Tobbe
Jag behöver lite hjälp med att läsa av datorns comport.
Jag behöver implementera en funktion i min PIC f877. Tanken är att
skicka ett kommando från datorn via hyperterminal (RS232) och beroende
på vilket värde jag skicka med så skall det styra respektive utgång på PICen. Jag tänkte mig att man i terminalfönstret får upp en text >Command:
Efter : skriver man @2 tex, där @ visar att det finns data att hämta och 2 är den utgån jag skall driva (i det här fallet en lysdiod som är kopplad på denna utgång. Jag har gläömt mycket av mina C kunskaper, var ett tag sen sist. Har nyss kommit igång och har inte riktigt koll på vilka filer som behöver inkluderas, just nu har jag bara 15f877.h inkluderad.
Hoppas nån kan hjälpa till
/Tobbe
kolla denna sida: http://www.microchipc.com/sourcecode/index.htm#serial
Med HiTecH PICC så inkluderar du bara pic.h och definerar vilken PIC processorer projektet avser så inkluderar den själv rätt filer. Det finns även sample code för avbrottsdriven överföring av seriell data.
Med HiTecH PICC så inkluderar du bara pic.h och definerar vilken PIC processorer projektet avser så inkluderar den själv rätt filer. Det finns även sample code för avbrottsdriven överföring av seriell data.
Hej.
Tack för era svar. Har nu kommit igång lite med min seriella överföring.
Dock har jag lite nya funderingar.
Jag använder PortC för RS-232 överföringen (RC6&RC7). Jag vill kunna använda resterande portar ,dvs RC0-RC5. Problemet är när jag skriver till portC så händer även saker på de sista bitarna som används för rs232 och överföringen funkar inte.
Jag har gjort följande:
set_tris_B(192); RC0-RC5 output, RC6-7 Input
..
..
..
när jag skall skriva till port C använder jag output_C(värde) men här
måste jag få till att inde RC6 och RC7 påverkas.
Tips??
edit:
Jag använder PIc C compiler (30day ev. version) och kommunikationen har jag definerat så här:
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
Kanske inte den bästa, men det var ett exempel jag hitta....
/edit
Tack för era svar. Har nu kommit igång lite med min seriella överföring.
Dock har jag lite nya funderingar.
Jag använder PortC för RS-232 överföringen (RC6&RC7). Jag vill kunna använda resterande portar ,dvs RC0-RC5. Problemet är när jag skriver till portC så händer även saker på de sista bitarna som används för rs232 och överföringen funkar inte.
Jag har gjort följande:
set_tris_B(192); RC0-RC5 output, RC6-7 Input
..
..
..
när jag skall skriva till port C använder jag output_C(värde) men här
måste jag få till att inde RC6 och RC7 påverkas.
Tips??
edit:
Jag använder PIc C compiler (30day ev. version) och kommunikationen har jag definerat så här:
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
Kanske inte den bästa, men det var ett exempel jag hitta....
/edit
> set_tris_B(192);
Inget bra radix om man vill verifiera hur du sätter TRIS.
Använd gärna hex eller (bäst och tydligast) binära värden för TRIS konstanter.
> #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
Låter som en mjukvaru-usart, och då hälper inte *hårdvaran* till att
"skydda" pinnarna från klumpig programmering. Och jag skulle
inte tro att kompilatorn gör det heller. När du gör "output_C(värde)"
så skriver den säkert helt glatt till alla 8 pinnarna, inklusive de som
mjukvaru-usart'en använder...
> och är inte riktigt säker på om jag använder usarten...
Om det *var* hårdvaru usart'en som används, så förstår jag inte
varför man ska ange pin-nummer i "#use rs232()" direktivet !?
Inget bra radix om man vill verifiera hur du sätter TRIS.
Använd gärna hex eller (bäst och tydligast) binära värden för TRIS konstanter.
> #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
Låter som en mjukvaru-usart, och då hälper inte *hårdvaran* till att
"skydda" pinnarna från klumpig programmering. Och jag skulle
inte tro att kompilatorn gör det heller. När du gör "output_C(värde)"
så skriver den säkert helt glatt till alla 8 pinnarna, inklusive de som
mjukvaru-usart'en använder...
> och är inte riktigt säker på om jag använder usarten...
Om det *var* hårdvaru usart'en som används, så förstår jag inte
varför man ska ange pin-nummer i "#use rs232()" direktivet !?
satan vilken fin kompilator du måste ha om den optimerar så fint att du bara behöver ange portar och om du råkar ha valt en PIC med UART och rätt portar är valt så slänger den in kod för att hantera den inbyggda istället för bitbanging
kolla HiTech PICC istället, Lite versionen är gratis och har ingen tidsbegräningen men på en del PIC modeller så kan du inte använda alla minnesbankar men jag har än så länge inte haft något problem med det.
Då kan du dessutom använda den kod jag har länkat till ovan (visst det borde gå att porta den väldigt enkelt men då du bara kan använda din kompilator i 30 dagar så vore det ju nästan bättre att byta till en du kan köra med en längre tid.
kolla HiTech PICC istället, Lite versionen är gratis och har ingen tidsbegräningen men på en del PIC modeller så kan du inte använda alla minnesbankar men jag har än så länge inte haft något problem med det.
Då kan du dessutom använda den kod jag har länkat till ovan (visst det borde gå att porta den väldigt enkelt men då du bara kan använda din kompilator i 30 dagar så vore det ju nästan bättre att byta till en du kan köra med en längre tid.
Senast redigerad av Seven11 20 september 2006, 11:02:13, redigerad totalt 1 gång.
