Olá amigoS
Estou fazendo uma programação, usando o PIC 12F675, pois pretendo usar para uma produção em larga escala e esse pic é o mais barato que encontrei com saídas suficientes pra controlar um motor de passo.
Depois de sofrer um bocado eu cheguei num código que creio estar correto, porém quando coloco na protoboard usando leds, ele só dá certo girando pra um lado, o outro lado não gira nada. Além do que os leds ficam piscando aleatoriamente, creio que se trata de alguma interferencia. Quando eu chego com as mãos perto dos leds eles começam a piscar, e se afasto eles param, parece até coisa do além, nunca vi isso.
Não sei o que pode ser, já estou vesgo de tanto olhar pra tela do computador.
Se alguem puder dar uma olhada no código abaixo e me dar alguma dica, ficaria muito grato.
Obrigado
Gustavo
list p=12f675 ; list directive to define processor
#include <p12f675.inc> ; processor specific variable definitions
;----------------------------------------------------------------------
; Configuração
__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF; & _BODEN_ON
;----------------------------------------------------------------------
;
;----------------------------------------------------------------------
#define BOB4 GPIO,0 ; (o) saída bobina 4
#define BOB3 GPIO,1 ; (o) saída bobina 3
#define BOT_DIR GPIO,2 ; (i) entrada bot_DIR
#define BOT_ESQ GPIO,3 ; (i) entrada bot_ESQ
#define BOB2 GPIO,4 ; (o) saída bobina 2
#define BOB1 GPIO,5 ; (o) saída bobina 1
;----------------------------------------------------------------------
; MEMÓRIA DO SISTEMA
;----------------------------------------------------------------------
CBLOCK 0X20 ;ENDERECO INICIAL DA MEMORIA DO USUARIO
TEMPO_3
TEMPO_2
TEMPO_1
ENDC
;**********************************************************************************
; VETOR DE RESET
;**********************************************************************************
ORG 0X00 ;ENDERECO INICIAL DO PROCESSAMENTO
GOTO INICIO
ORG 0x004 ;INTERRUPÇÃO
RETFIE
INICIO
BSF STATUS,RP0
MOVLW b'00001100' ;ENTRADAS (1) E SAIDAS (0)
MOVWF TRISIO
BCF STATUS,RP0
movlw b'00000000' ;ESTIPULA O NIVEL DO SINAL DE CADA PINO (LEDS EM BAIXA E BOTOES DESLIGADOS)
movwf GPIO
;-----------------------------------------------------------------------------
; LOOPING DO PROGRAMA
;-----------------------------------------------------------------------------
MAIN
; CLRF GPIO ; POSSIVEL CAUSADOR DOS PAUS
TEST1
BTFSS BOT_DIR ;se o botao direita estiver apertado entao chama MOVE_DIR
GOTO TEST2 ; se não estiver apertado, entao chama TEST2
GOTO MOVE_DIR
TEST2
BTFSS BOT_ESQ ;Acho que aqui deveria ser BTFSS
GOTO MAIN
GOTO MOVE_ESQ
MOVE_DIR
BSF BOB1
CALL ROT3
BCF BOB1
CALL TESTA_DIR
BSF BOB2
CALL ROT3
BCF BOB2
CALL TESTA_DIR
BSF BOB3
CALL ROT3
BCF BOB3
CALL TESTA_DIR
BSF BOB4
CALL ROT3
BCF BOB4
CALL TESTA_DIR
GOTO MOVE_DIR
MOVE_ESQ
BSF BOB4
CALL ROT3
BCF BOB4
CALL TESTA_ESQ
BSF BOB3
CALL ROT3
BCF BOB3
CALL TESTA_ESQ
BSF BOB2
CALL ROT3
BCF BOB2
CALL TESTA_ESQ
BSF BOB1
CALL ROT3
BCF BOB1
CALL TESTA_ESQ
GOTO MOVE_ESQ
;-----------------------------------------------------------------------------
;PROCEDIMENTOS
;-----------------------------------------------------------------------------
TESTA_DIR
BTFSS BOT_DIR
GOTO MAIN
RETURN
TESTA_ESQ
BTFSC BOT_ESQ
GOTO MAIN
RETURN
;-----------------------------------------------------------------------------
;ROTINA DE TEMPO
;-----------------------------------------------------------------------------
ROT3
MOVLW .2
MOVWF TEMPO_3
REPETE_3
NOP
CALL ROT2
NOP
DECFSZ TEMPO_3
GOTO REPETE_3
RETURN
ROT2
MOVLW .1
MOVWF TEMPO_2
REPETE_2
CALL ROT1
NOP
DECFSZ TEMPO_2
GOTO REPETE_2
RETURN
GOTO MAIN
ROT1
MOVLW .9
MOVWF TEMPO_1
REPETE
NOP
DECFSZ TEMPO_1
GOTO REPETE
NOP
RETURN
GOTO MAIN
;-----------------------------------------------------------------------------
;FIM DA ROTINA DE TEMPO
;-----------------------------------------------------------------------------
GOTO MAIN
END