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:
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.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 ####################################
Findet ihr ein problem?







Zitieren
Lesezeichen