2016-01-26 2 views
0

Je suis en train de programmer PIC16F887 et avoir ce problème intéressant. Je m'attends à ce que les LED clignotent une fois et s'arrêtent pour toujours, mais il redémarre et ne s'arrête jamais, bien que le chien de garde soit désactivé. Voici le code. Merci d'avance. J'ai écrit ceci dans MPLAB v8.84 et j'ai programmé en utilisant PICkit2 et le compilateur Hi-Tech C.PIC boucle sans fin

#include <htc.h> 
#include <pic.h> 
#define _XTAL_FREQ 800000 
//__CONFIG(0x3FF5); 

//functions 
void INITgeneral(void); 
void ledshow (void); 

void main(void) { 
INITgeneral(); 
ledshow(); 
return; 
} 

void INITgeneral(void) 
{ 
TRISA = 0; 
TRISB = 0; 
TRISC = 0; 
TRISD = 0; 
TRISE = 0; 
PORTA = 0; 
PORTB = 0; 
PORTC = 0; 
PORTD = 0; 
PORTE = 0; 

} 

void ledshow(void) 
{ 

__delay_ms(400); 
RD0 = 1; 
__delay_ms(400); 
RD0 = 0; 


} 
+0

Avez-vous besoin d'un délai après RD0 est remis à 0 pour faire en sorte que le drapeau est ramassé? – sabbahillel

Répondre

5

Le simulateur intégré est très utile pour trouver des problèmes comme celui-ci, qui mérite d'être étudié.

Sous l'onglet 'View', sélectionnez 'Disassembly Listing'. Notez que l'instruction suivante après le retour de l'appel à ledshow() est l'instruction GOTO 0 qui charge le compteur de programme avec zéro, le vecteur de réinitialisation. C'est pourquoi vous exécutez sans cesse le programme.

Pour arrêter ce comportement remplacer return dans main() avec une boucle sans fin while(1){};

+0

tout simplement (1); est suffisant au lieu de return ou while (1) {}; – sreeyesh