Ich hab mir den C-Compiler SourceBoost heruntergeladen, und auch schon erste Programme geschrieben, die einwandfrei liefen. Da ich schon Assembler programmierte, und ich dort oft Zeitschleifen benötige, wollte ich eine solche Zeitschleife auch für meine C-Programme entwickeln. In meinem Testprogramm sollte ein Taster alle 250ms abgefragt werden, und danach ein LED nach dem Tasterzustand ein oder aus-geschalten werden.

Hier der Code:
Code:
/*****************************************************************************
 Dateiname:	PortTest.c
 Autor:		pointhi
 Datum:  	März 2010
 Version:	1.00

 Letzte Änderung:	keine 
			
******************************************************************************
Funktionsbeschreibung des Programms:

Abfragen des Taster in einem Intervall von 250ms

*///******************************* include **********************************

#include <.\PIC16F630.h>
#include <.\stdio.h>
#include <.\stdlib.h>

//************************ Programmweite Variablen ***************************

//***************************** kofiguration *********************************

#pragma __CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _MCLRE_OFF & _CPD_OFF & _INTRC_OSC_NOCLKOUT 

/*
	CP: Code Protection bit
		ON
	->	OFF
	WDT: Watchdog Timer Enable bit
		ON
	->	OFF
	BODEN: Brown-out Detect Enable bit
	->	ON
		OFF
	PWRTE: Power-up Timer Enable bit
	->	ON
		OFF
	MCLRE: GP3/MCLR pin function select
		ON
	->	OFF
	CPD: Data Code Protection bit
		ON
	->	OFF
	Oscillator Variations:
		LP_OSC   = Low power crystal on GPIO4 and GPIO5 
		XT_OSC   = Crystal/resonator on GPIO4 and GPIO5 
		HS_OSC   = High speed crystal/resonator on GPIO4 and GPIO5 
		EC_OSC   = I/O function on GPIO4 pin, CLKIN on GPIO5 
	->	INTRC_OSC_NOCLKOUT  = I/O function on GPIO4 pin, I/O function on GPIO5 
		INTRC_OSC_CLKOUT  = CLKOUT function on GPIO4 pin, I/O function on GPIO5 
		EXTRC_OSC_NOCLKOUT  = I/O function on GPIO4 pin, RC on GPIO5 
		EXTRC_OSC_CLKOUT    = CLKOUT function on GPIO4 pin, RC on GPIO5

*///############################ Interupt ####################################

void interupt (void)
{

	int status_int;
	status_int = status;	// Rettet den Inhalt von STATUS



	status = status_int;	// Schreibt den Wert von STATUS zurück
	
	asm
		{
		retfie
		}
}
//########################## Unterprogramme ##################################

//--------------------- Zeitschleife 1ms ---------------------

void pause1ms(void)	 
{
int loop;
int i;
int oszilator;
oszilator = 40;		// Verwendeter Oszilator (40 = 4MHz, 80 = 8MHz)
for(i = 0; i >= oszilator; i ++)
	{
	for(loop = 0; loop >= 30; loop ++);
	}
}
//----------------- Zeitschleife einstellbar -----------------

void pause(int loop)
{
int i;
for (i = 0; i >= loop; i ++)
	{
	pause1ms();
	}
}
//############################ Hauptprogramm #################################

void main(void)
{
porta = 0;			// Setzt alle Ports auf Low
portc = 0;
trisa = 0;		// 1 = Eingang, 0 = Ausgang
trisc = 255;
intcon = 0;			// Deaktiviert alle Interupts

while(1)
	{
	if(portc.0 == 1)
		porta = 255;
	else
		porta = 0;
	pause(250);
	}
}


//################################## Ende ####################################
Das Problem ist, dass keinerlei Zeitverzögerung auftritt. Ich kann darum den LED z.b. 8 mal pro Sekunde schalten, obwohl es max. 4 mal sein dürfte.

Findet ihr ein problem?