Mais 1: 12F629... entra em sleep?!

Ja programo em C e uso o 8051.... como precisei de um mc mais "integrado" parti pro pic12f...
Bom to usando o ccs e depois de apanhar um monte do compilador consegui fazer um codigo sem erros, mas quando simulo no Pic simulador IDE ele roda 46us e depois entra em sleep... já revirei o programa mas não sei oq pode estar errado...
To querendo apertar 1 botão na GP2 e fazer um motor de passo ir pra m lado, apertar em GP3 e ir pro outro... vou usar os pinos GP0,1,4 e 5 como a saída pro driver que controla o motor de passo bipolar.
Sugestões são bem vindas.. estou aprendendo...
[]s
Segue o código...
#include <12F629.h>
#fuses INTRC_IO,NOWDT,NOPROTECT, BROWNOUT, PUT, NOCPD, NOMCLR
#use delay(clock=4000000)
#rom 0x3ff = { 0x34b4 } // ajusta valor clock
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
#BYTE port_a = 6 // pra que serve isso?!
BYTE const PASSOS [4]= {0b101100, // definicao dos passos do motor, ja incluindo
0b001110, // os bits de GP2 e GP3
0b011100,
0b101100};
void main (void)
{
static BYTE passo = 0; // variavel q armazena o ultimo valor do passo dado
port_a_pullups ( false ); // desliga pullups
set_tris_a (0x24); // faz GP2 e GP3 como entradas
#asm
movlw 0x7; // desliga comparador
movwf CMCON
#endasm
disable_interrupts ( GLOBAL ); // desliga todas as ints
while ( !GP3 ) // precionado botao
{
port_a = PASSOS [passo]; // coloca valor passo no port G
delay_ms (200); // aguarda 200 ms
passo++; // incrementa passo
if (passo=5) // volta a sequencia do passo
passo=0;
}
while ( !GP2 )
{
port_a = PASSOS [passo]; // coloca valor passo no port G
delay_ms (200); // aguarda 200 ms
passo--; // decrementa passo anterior
if (passo < 0) // volta a sequencia do passo
passo=4;
}
}
Bom to usando o ccs e depois de apanhar um monte do compilador consegui fazer um codigo sem erros, mas quando simulo no Pic simulador IDE ele roda 46us e depois entra em sleep... já revirei o programa mas não sei oq pode estar errado...
To querendo apertar 1 botão na GP2 e fazer um motor de passo ir pra m lado, apertar em GP3 e ir pro outro... vou usar os pinos GP0,1,4 e 5 como a saída pro driver que controla o motor de passo bipolar.
Sugestões são bem vindas.. estou aprendendo...
[]s
Segue o código...
#include <12F629.h>
#fuses INTRC_IO,NOWDT,NOPROTECT, BROWNOUT, PUT, NOCPD, NOMCLR
#use delay(clock=4000000)
#rom 0x3ff = { 0x34b4 } // ajusta valor clock
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
#BYTE port_a = 6 // pra que serve isso?!
BYTE const PASSOS [4]= {0b101100, // definicao dos passos do motor, ja incluindo
0b001110, // os bits de GP2 e GP3
0b011100,
0b101100};
void main (void)
{
static BYTE passo = 0; // variavel q armazena o ultimo valor do passo dado
port_a_pullups ( false ); // desliga pullups
set_tris_a (0x24); // faz GP2 e GP3 como entradas
#asm
movlw 0x7; // desliga comparador
movwf CMCON
#endasm
disable_interrupts ( GLOBAL ); // desliga todas as ints
while ( !GP3 ) // precionado botao
{
port_a = PASSOS [passo]; // coloca valor passo no port G
delay_ms (200); // aguarda 200 ms
passo++; // incrementa passo
if (passo=5) // volta a sequencia do passo
passo=0;
}
while ( !GP2 )
{
port_a = PASSOS [passo]; // coloca valor passo no port G
delay_ms (200); // aguarda 200 ms
passo--; // decrementa passo anterior
if (passo < 0) // volta a sequencia do passo
passo=4;
}
}