Ik programmeer PICs altijd in ASM, maar nu ik meer met grote getalen bezig ben is dat bijna niet meer te doen met ASM.
Vandaar dat ik C wil leren.
C-compiler: 'CCS'
Ik heb dit gemaakt, maar dat werkt niet goed.
De LED gaat 1x aan, en blijft dan uit.
Ik dacht dat de main routine automatische herhaalde.
#include <16F876A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay (clock=4000000)
#define LEDV PIN_B6
#define LEDR PIN_B1
#define LED_ON output_high
#define LED_OFF output_low
void main(void) {
LED_ON(LEDR);
Delay_ms(500);
LED_OFF(LEDR);
Delay_ms(500);
}Wie kan hier iets over vertellen ?
Geen idee hoe CCS dat doet, maar in C is het niet gebruikelijk.
Normaal is het einde van je main een 'return to OS', bij gebrek aan een OS doorgaans een jump naar -2 (of whatever de size van die jump is)...
[Bericht gewijzigd door Marco69 op ]
Appiers50
Tja......
Je hebt een while() lus nodig die begint steeds weer overnieuw. Zoiets:
void main(void) {
while(1)
{
LED_ON(LEDR);
Delay_ms(500);
LED_OFF(LEDR);
Delay_ms(500);
}
}
Dit werkt:
#include <16F876A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay (clock=4000000)
#define LEDV PIN_B6
#define LEDR PIN_B1
#define LED_ON output_high
#define LED_OFF output_low
void main(void) {
while(1)
{
LED_ON(LEDR);
Delay_ms(500);
LED_OFF(LEDR);
Delay_ms(500);
}
}
Wat staat hier precies: while(1)
Hoe kan er met variabele worden gewerkt:
Declareren, Optellen en vergelijken ?
Basiscursusje C? 
Feitelijk is het gewoon engles: zolang wat tussen de haken van de while staat !=0 is, blijft-ie in die loop hangen. '1' is (en blijft) redelijk !=0, dus...
...Basiscursusje C?...
Tja, daar had ik al naar gekeken.
Of het is Engels, of het is gebaseerd op een PC programma.
Omdat het voor een PIC toch een beetje specifiek is, lijkt het mij niet overdreven om hier een tropic voor te openen 
Feitelijk is het gewoon engles: zolang wat tussen de haken van de while staat !=0 is, blijft-ie in die loop hangen. '1' is (en blijft) redelijk !=0, dus...
Dus als ik zeg: while(A=1), en A wordt 1 dan stopt de lus ?
Hoe kan er met variabele worden gewerkt:
Declareren, Optellen en vergelijken ?
[Bericht gewijzigd door MMSoft op ]
Appiers50
Tja......
Daar heb ik ook gekeken, en daar ga ik ook steeds meer in zoeken, maar als je nog geen begin hebt, is dat lastig..
Voorbeeld, zoek eens naar 'fuses'
[Bericht gewijzigd door MMSoft op ]
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Een goed handboek over C is wel een must, als je hiermee wil doorgaan. Je kan toch moeilijk verlangen, dat iemand hier een c-programmeercursus gaat intikken?
Declareren
iets als:
int i; char j; etc
staat waarschijnlijk erg veel over in de help
Optellen
iets als
int i=0;
int j=2;
i = i +1;
j = i +j;
Vergelijken
iets als
i == 0;
i != 0; // i is niet 0
i == 0; || i == 5; //i is 0 of 5
i > 0; i groter dan 0
i >= 0; i groter of gelijk aan 0
i <= 0; i kleiner of gelijk aan 0
Al dit soort informatie zal waarschijnlijk in de help functie staan.
Gelukt, nog enkele vragen over een routine:
-Hoe kan ik een routine oproepen ?
-Hoe ziet een routine opbouw eruit ?
-Hoe sluit ik deze routine af ?
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Ga eerst maar eens een beginnerscursus C voor op de PC
doen. Want dit zijn dermate elementaire vragen. Op het
web zijn er vast wel een hoop te vinden.
Op 30 september 2006 10:00:48 schreef MMSoft:
[...]Tja, daar had ik al naar gekeken.
Of het is Engels...
Goede documentatie is bijna per definitie in het Engels. Get used to it! 
[...]Dus als ik zeg: while(A=1), en A wordt 1 dan stopt de lus ?
Ja, hij loopt er precies oneindig keer door. Want A=1 maakt A 1 en levert dan ook 1 als result op.
a=0;
while (0==a) //On purpose. The compiler will complain if you write '0=a', omitting one '='.
{
if (something)
{
a=1; //Now we will stop
}
}Op 30 september 2006 10:34:37 schreef pros:
[...]i++; j += i;
Niet alle compilers accepteren i++ of j +=i; De meeste wel.
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Een compiler die geen standaard c-broncode accepteert? In een grote bocht omheenlopen, zou ik zeggen.
Op 30 september 2006 14:43:50 schreef MMSoft:
Hoe werkt een interrupt in C ?
Goed.
Meer ies er moeilijk over te zeggen, daar zoiets hardware en compiler afhankelijk is. RTFM.
Op 30 september 2006 10:00:48 schreef MMSoft:
[...]
Dus als ik zeg: while(A=1), en A wordt 1 dan stopt de lus ?
[...]
Doe de volgende keer while(A==1), dan schrijf je niet meteen 1 in je variabele!
A==1 A is gelijk aan (vergelijking) 1
A=1 A wordt gelijk aan (toewijzing) 1
Je heb gelijk, dat wist ik toen nog niet.
Nu zal ik die fout niet meer maken 
[Bericht gewijzigd door MMSoft op ]
Ik heb intussen veel gelezen over C.
Ook heb ik al het een en ander aan de gang.
Maar hoe ik een tijd gestuurd interrupt maak kan ik niet gevonden krijgen.
Wie heeft hier ervaring mee in CCS ?
Op 30 september 2006 10:56:35 schreef JoWi:
Ga eerst maar eens een beginnerscursus C voor op de PC
doen. Want dit zijn dermate elementaire vragen.
Op het web zijn er vast wel een hoop te vinden.
Heb ik intussen allemaal gedaan 
Maar hoe prog ik nu een tijd gestuurde interrupt ?
[Bericht gewijzigd door MMSoft op ]
Op 2 oktober 2006 17:25:33 schreef MMSoft:
[...]
Heb ik intussen allemaal gedaan
Maar hoe prog ik nu een tijd gestuurde interrupt ?
Dat is dus niet een beginnersvraagje.
Je heb net leren op schaatsen te staan en nu wil je een dubbele rietberger springen.....
Het is per compiler verschillend, en met name bij die embedded dingen. Zelfs voor dezelfde processor.
Dit moet je uit het CCS manual halen, ik heb hier alleen de Hi-Tech en Microchip compilers en geen idee hoedat het bij CCS werkt.