segunda-feira, 17 de novembro de 2008

Algorítimo PIC aperfeiçoado

Aproveitando para estudar PIC resolví fazer um algorítimo mais rebuscado. (Código comentado em breve)

Implementações:

-Esperar 5s sempre que o sensor for interrompido para a esteira voltar ao funcionamento.

-LED vermelho piscando enquanto esteira pausa 5s.

Video:



Aí segue o novo código do PIC:

#include

__CONFIG _WDT_OFF & _INTRC_
OSC_NOCLKOUT & _MCLRE_OFF & _LVP_OFF

CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE USUÁRIO
TEMPO
ENDC

#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0
#DEFINE LED PORTA,0
#DEFINE MOTOR PORTA,2
#DEFINE INFRA PORTA,1
#DEFINE LEDV PORTA,3
ORG 0x00
GOTO INICIO

ORG 0x04
GOTO TRATA_TIMER

INICIO

CLRF PORTA
BANK1
MOVLW B'00000111'; bit do 0 ao 2, configuração
de Preescale - 111 = 1:256 Timmer0; bit 8, habilita uso de periféricos.
MOVWF OPTION_REG ; Move o byte de configuração do Work para o registrador OPTION_REG
MOVLW B'11110010'
MOVWF TRISA
BANK0
MOVLW b'00001111'
MOVWF CMCON
MOVLW .20 ; Atribui 5 para W
MOVWF TEMPO ; Atribui valor de W
para TEMPO

MAIN
BTFSS INFRA
CALL PARA
BTFSC INFRA
CALL LIGADO
GOTO MAIN

LIGADO
BSF LEDV
BCF LED
BSF MOTOR
RETURN

PARA
BCF LEDV
BSF LED

BCF MOTOR
MOVLW .20
MOVWF TEMPO
MOVLW B'10100000'; BIT: 7-INTERRUPÇÃO, 5-TIMMER, 2-Flag Timmer
MOVWF INTCON ; Move o byte de configuração do Work para o registrador INTCON
LOOP
GOTO LOOP
RETURN

TRATA_TIMER ; Trata a interrupção gerada pelo Timmer0
BCF INTCON, T0IF ; Desabilita flag de Timmer0
BCF INTCON, GIE ; Habilita Interrupção Geral
BTFSS INFRA
GOTO MAIN
DECFSZ TEMPO ; Decrementa Variavel TEMPO2 e testa se TEMPO2 = 0 pula a proxima linha.
GOTO TESTALED
GOTO MAIN


TESTALED
BTFSC LED
GOTO ASCENDE
BTFSS LED
GOTO APAGA

ASCENDE
BCF LED
RETFIE

APAGA
BSF LED
RETFIE

END

Nenhum comentário: