Hallo iedereen,
Het lukt mij steeds niet om die C18 code om te zetten naar MikroC voor PIC omdat ik deze compiler heb en alles in MikroC programmeer.
Dat is de code die ik heb trachten te vertalen naar MikroC
#pragma code high_vector = 0x0008
void mijn_vector_int(void)
{
_asm
GOTO serieel_ontvangen
_endasm
}
#pragma code
#pragma interrupt serieel_ontvangen
void serieel_ontvangen(void) {
}
// Proberen naar MikroC om te zetten
void interrupt {
if(PIR1.RCIF == 1)
{
PIR1.RCIF = 0;
serieel_ontvangen();
}
}
Wie kan mij daarin helpen dat het juist is voor MikroC
JustME125
Correct me if I'm wrong!
Wat gaat er mis bij het omzetten. Ben niet specifiek bekend met C18 en MikroC. Wel met CodeVision C en ANSI C.
Wat is het doel van de code? Wat ik zo uit kan halen probeer je een seriele poort interrupthandle te maken. Als het goed is heeft de PIC die je gebruikt een interruptvector voor een RX interrupt. Je routine aanroep moet dit vector adres vermelden anders doet ie weinig denk ik.
je eerste regel zal dus iets in de stekking van
void interrupt_VECTOR (void) {moeten zijn. Dan springt de controller naar de seriele poort vector die voor die interrupt aanwezig is, haalt daar het startadres op voor deze routine en springt naar de routine waarna dus je gewenste code gedraaid zal worden.
Let niet op de syntax, die ken ik dus niet voor MikroC
Volgens mij hebben die picjes maar 2 int vector's. High / Low priority.
Maybe even in de MikroC handleiding kijken hoe ze het daar doen met interrupts? Of wachten tot MMsoft langs komt, die weet het vast wel.
Op 17 april 2009 17:32:33 schreef JustME125:
Wat gaat er mis bij het omzetten. Ben niet specifiek bekend met C18 en MikroC. Wel met CodeVision C en ANSI C.
De code is nu een template die is geschreven voor de C18 compiler van Microchip en ik heb de MikroC compiler van Mikroelektronika
Ik weet dat MikroC enkel het gereserveerde woorden:
void interrupt(void);
void interrupt_low(void);
En dit is een codevoorbeeld in de help van MikroC
==================================================
void interrupt() {
if (INTCON.TMR0IF) {
counter++;
TMR0 = 96;
INTCON.TMR0F = 0;
}
else if (INTCON.RBIF) {
counter++;
TMR0 = 96;
INTCON.RBIF = 0;
}
}
[Bericht gewijzigd door Henry S. op (1%)]
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
interupt handler in MikroC:
in dit geval voor een usbinterupt
void interrupt()
{
asm CALL _Hid_InterruptProc
asm nop
}
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
ga eerst eens het pic en adc topic lezen... dit is allemaal nutteloos volgens mij... de hardware trekt op niks en is met software niet te redden.
Elektron,
Ik heb een volledige andere aanpak gekozen en de MUX weggelaten en via een if een selectie laten maken om ofwel de SDO pin ofwel de RX te kiezen en zo de UART of de SPI module uit te zetten of aan te zetten naargelang de situatie.
Dan nog een vraagje is voor mijn labpartner want die zit nog nergens:
Als ik data stuurt van de microcontroller naar zijn laptop en dat zijn bytes, dus raw data, hoe kan hij deze byte inlezen en opslaan. Ik had gedacht met ReadPort als functie en dan opslaan in een array en dan verwerken
Hoe kan hij dan een onderscheid maken wat is verstuurt want hij moet dat in een grafiek zetten die waarden en dat is de verhouding A = 20 * Log(Vin/Vout)
Vin en Vout stuur ik hem door
Want hij is nog geen stap verder logisch want hij raadpleegt geen forums
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
in welke taal programmeert je collega?
je kan inderdaad de poort uitlezen en naar een array schrijven en dan vervolgens een nieuwe array berekenen en die naar een grafiek omzetten(doe zelf de grafiek tekenen of laat je dat doen door 3th party software?)
Hij programmeert in Java maar om poorten aan te sturen in Windows XP is al zeer lastig.
Ik heb hem aangeraden met Labview te werken of in mijn geval met EBASIC want die charts zitten er ingebouwd je hoeft bijna niks meer te doen enkel de punten ingeven x en y en al de rest kan je instellen als parameters dus een raster hoef je al niet meer in te stellen.
Ik probeer nu een letter "A" te sturen naar mijn PIC en als het gelezen karakter de asciicode 0x41 heeft dan laat ik een led branden
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
pak een een taal uit de visual studio.
daar gaat het vrij gemakkelijk mee om poorten aan te spreken
chart bouwen is niet moeilijk bij start up maak je een raster vervolgens maak je met een x/y array gewoon een chart daar doorheen
J# is een java deriviaat en lijkt(volgens windows) op java echter is er geen support meer voor hij is echter nog wel te downloaden maar waarom doet hij dit een webscripttaal?
VB is niet moeilijk en zeker geschikt voor dit werk.
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
Op 26 april 2009 08:56:36 schreef ElectronicsVibes:
Elektron,Ik heb een volledige andere aanpak gekozen en de MUX weggelaten
Dan nog een vraagje is voor mijn labpartner want die zit nog nergens:
voor de uart is die pin ingang. voor de spi is die pin uitgang.
op het moment dat jij dus spi gaat sturen strijk je tegen de haren van de max232 in.. ( die is immers ook uitgang ! )
hoe heb je dat opgelost ? zie ook mijn vorige posts , en post in je ander elvendertig topics.
niet alleen je labpartner zit nergens ....