Gast
#1255994
Hallo,
also ich habe einige Zeitschleifen geschrieben, nur passiert nichts wenn
sie aufgerufen werden... also nie wieder.
Hab ich da irgentwie eine Endlosschleife gebaut?
Oder Funktioniert das mit dem _asm ... _endasm so nicht?
Ich verstehe nicht warum es so nicht funktioniert.
Ich benutze MPLAB mit dem C18 Compiler.
Hier die 3 Verzögerungen, vom Takt her habe ich 4MHz das erstmal fest
gelegt, da es zur Zeit nur diesen Aufbau gibt.
void DelayUs(unsigned int x);
void DelayMs(unsigned int x);
void DelayS(unsigned int x);
void DelayUs(unsigned int x)
{
// 4MHz -> 1 Zyklus = 1us!
while(x>0)
{
x--;
_asm NOP _endasm
}
}
void DelayMs(unsigned int x)
{
int i,j;
for(i=0;i<x;i++)
{
for(j=0;j<4;j++)
DelayUs(250);
}
}
void DelayS(unsigned int x)
{
int i,j;
for(i=0;i<x;i++)
{
for(j=0;j<4;j++)
DelayMs(250);
}
}
Dann habe ich noch ein kleines Testprogramm, das eine LED an Port-A
blinken lassen soll.
#include <p18f458.h>
#pragma config OSC=EC, PWRT=ON, WDT=OFF
// Hier stehen die Zeitfunktionen von oben zwischen.
void main(void)
{
TRISA = 0;
while(1)
{
PORTAbits.RA0 = 1;
DelayS(1);
PORTAbits.RA0 = 0;
DelayS(1);
}
}