codigo ASm braço mecanico

Desnvolvido
; POR ROBERTO RMS AUTOMAÇÃO DATA 22 DE MARÇO 2011

; E ROBOTICA
; DESCRIÇÃO DO PROJETO
;PROJETO TEM POR OBJETIVO MOSTRAR NO LCD UMA MENSAGEM INICIAL NOME DA EMPRESA
; APOS ALGUNS SEGUNDO ENTRA EM FUNCIONAMENTO FAS LEITURA DE 1 TECLCLA SE TIVER PRESCIONADA ENTRA EM MODO MANUAL
;SE NAO VAI PARA AUTOMATICO EXECULTA ROTINA QUE PREVIAMENTE FOI EXECULTADO NO MANUAL E ESTA SAULVO NA MEMORIA
;ROTINA DE POSIÇAO DE 5 MOTORES DE UM BRAÇO MECANICO CRIANDO MOVIMENTO AUTOMATICO
; DESCRIÇAO PREVIA DO COMANDO:
; MANUAL :LE TECLA 0 SE FOR =1 VAI PARA F(0) LE TCLA1 SE = 1 LIGA MOTOR(0)DIREITA SE =0 DESLIGAMOTOR(0)DIREITA
; LE TECLA 2 SE FOR +1 LIGA MOTR(0)ESQUERDA SE FOR =0 DESLIGA MOTOR(0)ESQUERDA
; CONTA 1, VOLTA VER TECLA 0 SE NOVAMENTE ACIONADA , VAI PARA F(1) E ASSIM ATE F5 ENTAO SAULVA COM TECLA (3)
; PARA SAULVAR DADOS DOS MOTORES FAZ LEITURA DE 5 POTENCIOMENTRO PRESENTE EN CADA EIXO DE MOTORES
; CONVERTE ANALOGICOS DIGITAL COM FUNDO DE ESCALA 255 PRESENTE NO PIC E TEM ESCALA DE SEGURANÇA E DE FUNCIONAMENTO
;AUTOMATICO : LER AD 0 COMPRA C/PRIMEIRA POSIÇAO <=> DECIDE QUANTO DEVE MOVER MOTR (0) PARA REPETIR A FUNÇAO GRAVADO
; ASIM ATÉ O 5 MOTORES RETORNANDO SEMPRE A MONITORAR O BOTAO (0)


; CONFIGURAÇÕES


__CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_ON & _XT_OSC

; DEFINIÇÃO DAS VARIÁVEIS

; VARIÁVEIS INÍCIO DO BANCO 0

CBLOCK 0X20 ; POSIÇÃO INICIAL DA RAM

TEMPO1
TEMPO0 ; CONTADORES P/ DELAY

FILTRO_BOTOES ; FILTRO PARA RUIDOS

FLAG ; FLAG DE USO GERAL
MT_0 ; MEMORIZA BOTAO
MT_0_REFERENCIA ; REFERE A UM CONTADOR DE 3 POSISOES
MONITOR_0 ; DIZ QUE BOTAO 0 ESTA EM EXECUÇAO
MONITOR_1 ;;; ;; 1 ;;;;
ADGARD_0 ;MEMORIA DE LEITURA AD PORTA,0
ACCaHI ;ESCALA MAIOR
ACCaLO ;ESCALA MENOR
DECREMENTA_MENU
ENDC





























#INCLUDE

; * BANCOS DE RAM

#DEFINE BANK1 BSF STATUS,RP0 ; SELECIONA BANK1 DA MEMORIA RAM
#DEFINE BANK0 BCF STATUS,RP0 ; SELECIONA BANK0 DA MEMORIA RAM


; CONSTANTES INTERNAS

; A DEFINIÇÃO DE CONSTANTES FACILITA A PROGRAMAÇÃO E A MANUTENÇÃO.

FILTRO_TECLA EQU .200 ; FILTRO P/ EVITAR RUIDOS DOS BOTÕES


; * DECLARAÇÃO DOS FLAGs DE SOFTWARE

; A DEFINIÇÃO DE FLAGs AJUDA NA PROGRAMAÇÃO E ECONOMIZA MEMÓRIA RAM.

#DEFINE TELA_PRINCIPAL FLAG,0 ; FLAG P/ INDICAR QUE DEVE MOSTRAR
; A TELA PRINCIPAL
; 1-> MOSTRA TELA PRINCIPAL
; 0-> TELA PRINCIPAL JÁ FOI MOSTRADA
;#DEFINE MONITOR_0 FLAG,1 ;FLAG P/INDICAR QUE BOTAO 0 ESTÁ TRAVADO PARA MEU
; 0 LIBERADO PARA AUTOMATICO
; 1 TRAVADO PARA AJUSTE MANUAL

#DEFINE CAD_P0 PORTA,0 ; ENTRADA A/D P/ O POTENCIÔMETRO P0
#DEFINE CAD_P1 PORTA,1 ; ENTRADA A/D P/ O POTENCIÔMETRO P1
#DEFINE CAD_P2 PORTA,2 ; ENTRADA A/D P/ O POTENCIÔMETRO P2
#DEFINE CAD_P3 PORTA,3 ; ENTRADA A/D P/ O POTENCIÔMETRO P3
#DEFINE CAD_P4 PORTA,4 ; ENTRADA A/D P/ O POTENCIÔMETRO P4

; * ENTRADAS *


#DEFINE BOTAO_0 PORTB,0 ; ESTADO DO BOTÃO 0
; 1 -> LIBERADO
; 0 -> PRESSIONADO

#DEFINE BOTAO_1 PORTB,1 ; ESTADO DO BOTÃO 1
; 1 -> LIBERADO
; 0 -> PRESSIONADO

#DEFINE BOTAO_2 PORTB,2 ; ESTADO DO BOTÃO 2
; 1 -> LIBERADO
; 0 -> PRESSIONADO

#DEFINE BOTAO_3 PORTB,3 ; ESTADO DO BOTÃO 3
; 1 -> LIBERADO
; 0 -> PRESSIONADO

; * SAÍDAS *

#DEFINE DISPLAY PORTD ; BARRAMENTO DE DADOS DO DISPLAY

#DEFINE RS PORTE,0 ; INDICA P/ O DISPLAY UM DADO OU COMANDO
; 1 -> DADO
; 0 -> COMANDO

#DEFINE ENABLE PORTE,1 ; SINAL DE ENABLE P/ DISPLAY
; ATIVO NA BORDA DE DESCIDA
#DEFINE LIGA_MOTOR_0A PORTC,0 ;1 LIGA MOTOR_0
;0 DESLIGA MOTOR_0
#DEFINE LIGA_MOTOR_0B PORTC,1 ;1 LIGA MOTOR_0
;0 DESLIGA MOTOR_0



; VETOR DE RESET DO MICROCONTROLADOR

; POSIÇÃO INICIAL PARA EXECUÇÃO DO PROGRAMA

ORG 0X0000 ; ENDEREÇO DO VETOR DE RESET
GOTO CONF ; PULA PARA CONFIG DEVIDO A REGIÃO
; DESTINADA AS ROTINAS SEGUINTES


; ROTINA DE DELAY (DE 1MS ATÉ 256MS)

; ESTA É UMA ROTINA DE DELAY VARIÁVEL, COM DURAÇÃO DE 1MS X O VALOR PASSADO
; EM WORK (W).

DELAY_MS
MOVWF TEMPO1 ; CARREGA TEMPO1 (UNIDADES DE MS)
MOVLW .250
MOVWF TEMPO0 ; CARREGA TEMPO0 (P/ CONTAR 1MS)

CLRWDT ; LIMPA WDT (PERDE TEMPO)
DECFSZ TEMPO0,F ; FIM DE TEMPO0 ?
GOTO $-2 ; NÃO - VOLTA 2 INSTRUÇÕES
; SIM - PASSOU-SE 1MS
DECFSZ TEMPO1,F ; FIM DE TEMPO1 ?
GOTO $-6 ; NÃO - VOLTA 6 INSTRUÇÕES
; SIM
RETURN ; RETORNA


; * ROTINA DE ESCRITA DE UM CARACTER NO DISPLAY

ESCREVE
MOVWF DISPLAY ; ATUALIZA DISPLAY (PORTD)
NOP ; PERDE 1US PARA ESTABILIZAÇÃO
BSF ENABLE ; ENVIA UM PULSO DE ENABLE AO DISPLAY
GOTO $+1 ; .
BCF ENABLE ; .

MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS
RETURN ; RETORNA


; ROTINA DE ESCRITA DA TELA PRINCIPAL

; ESTA ROTINA ESCREVE A TELA PRINCIPAL DO PROGRAMA, COM AS FRASES:
; LINHA 1 - " ROBERTO RMS "
; LINHA 2 - "ATOMAÇAO ELETRO"

MOSTRA_TELA_PRINCIPAL

BCF TELA_PRINCIPAL ; LIMPA FLAG DE MOSTRAR TELA PRINCIPAL

BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0X01 ; ESCREVE COMANDO PARA
CALL ESCREVE ; LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW 0X82 ; COMANDO PARA POSICIONAR O CURSOR
CALL ESCREVE ; LINHA 0 / COLUNA 2
BSF RS ; SELECIONA O DISPLAY P/ DADOS

; COMANDOS PARA ESCREVER AS

MOVLW 'R'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 'b'
CALL ESCREVE
MOVLW 'e'
CALL ESCREVE
MOVLW 'r'
CALL ESCREVE
MOVLW 't'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW 'R'
CALL ESCREVE
MOVLW 'M'
CALL ESCREVE
MOVLW 'S'
CALL ESCREVE
MOVLW '.'
CALL ESCREVE

BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0XC0 ; COMANDO PARA POSICIONAR O CURSOR
CALL ESCREVE ; LINHA 1 / COLUNA 0
BSF RS ; SELECIONA O DISPLAY P/ DADOS

; COMANDOS PARA ESCREVER

MOVLW 'A'
CALL ESCREVE
MOVLW 'u'
CALL ESCREVE
MOVLW 't'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 'm'
CALL ESCREVE
MOVLW 'a'
CALL ESCREVE
MOVLW 'c'
CALL ESCREVE
MOVLW 'a'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW 'E'
CALL ESCREVE
MOVLW 'l'
CALL ESCREVE
MOVLW 'e'
CALL ESCREVE
MOVLW 't'
CALL ESCREVE
MOVLW 'r'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
RETURN


; HARDWARE E SOFTWARE

; A ROTINA INICIALIZA A MÁQUINA E AGUARDA O ESTOURO DO WDT.

CONF

CLRF PORTA ; GARANTE AS SAÍDAS EM ZERO
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE

BANK1 ; SELECIONA BANCO 1 DA RAM

MOVLW B'11111111'
MOVWF TRISA ; CONFIGURA I/O DO PORTA

MOVLW B'11111111'
MOVWF TRISB ; CONFIGURA I/O DO PORTB

MOVLW B'00000000'
MOVWF TRISC ; CONFIGURA I/O DO PORTC

MOVLW B'00000000'
MOVWF TRISD ; CONFIGURA I/O DO PORTD

MOVLW B'00000100'
MOVWF TRISE ; CONFIGURA I/O DO PORTE

MOVLW B'11011011'
MOVWF OPTION_REG ; CONFIGURA OPTIONS
; PULL-UPs DESABILITADOS
; INTER. NA BORDA DE SUBIDA DO RB0
; TIMER0 INCREM. PELO CICLO DE MÁQUINA
; WDT - 1:128
; TIMER - 1:1

MOVLW B'00000000'
MOVWF INTCON ; CONFIGURA INTERRUPÇÕES
; DESABILITADA TODAS AS INTERRUPÇÕES

MOVLW B'00000100'
MOVWF ADCON1 ; CONFIGURA CONVERSOR A/D
; CONFIGURA PORTA E PORTE COM I/O DIGITAL

BANK0 ; SELECIONA BANCO 0 DA RAM
MOVLW B'01001001'
MOVWF ADCON0 ; CONFIGURA CONVERSOR A/D
; VELOCIDADE -> Fosc/8
; CANAL 1
; MÓDULO LIGADO

; RESET OU POWER-UP

BTFSC STATUS,NOT_TO ; RESET POR ESTOURO DE WATCHDOG TIMER?
GOTO $ ; NÃO - AGUARDA ESTOURO DO WDT
; SIM


; INICIALIZAÇÃO DA RAM

; LIMPAZ DA RAM DO BANCO 0, INDO DE 0X20 A 0X7F.


MOVLW 0X20
MOVWF FSR ; APONTA O ENDEREÇAMENTO INDIRETO PARA
; A PRIMEIRA POSIÇÃO DA RAM
LIMPA_RAM
CLRF INDF ; LIMPA A POSIÇÃO
INCF FSR,F ; INCREMENTA O PONTEIRO P/ A PRÓX. POS.
MOVF FSR,W
XORLW 0X80 ; COMPARA O PONTEIRO COM A ÚLT. POS. +1
BTFSS STATUS,Z ; JÁ LIMPOU TODAS AS POSIÇÕES?
GOTO LIMPA_RAM ; NÃO - LIMPA A PRÓXIMA POSIÇÃO
; SIM

BSF TELA_PRINCIPAL ; INICIALIZA MOSTRANDO TELA PRINCIPAL

; DISPLAY

; ESTA ROTINA INICIALIZA O DISPLAY P/ COMUNICAÇÃO DE 8 VIAS, DISPLAY PARA 2
; LINHAS, CURSOR APAGADO E DESLOCAMENTO DO CURSOR À DIREITA.

INICIALIZACAO_DISPLAY

BCF RS ; SELECIONA O DISPLAY P/ COMANDOS

MOVLW 0X30 ; ESCREVE COMANDO 0X30 PARA
CALL ESCREVE ; INICIALIZAÇÃO

MOVLW .3
CALL DELAY_MS ; DELAY DE 3MS (EXIGIDO PELO DISPLAY)

MOVLW 0X30 ; ESCREVE COMANDO 0X30 PARA
CALL ESCREVE ; INICIALIZAÇÃO

MOVLW 0X30 ; ESCREVE COMANDO 0X30 PARA
CALL ESCREVE ; INICIALIZAÇÃO

MOVLW B'00111000' ; ESCREVE COMANDO PARA
CALL ESCREVE ; INTERFACE DE 8 VIAS DE DADOS

MOVLW B'00000001' ; ESCREVE COMANDO PARA
CALL ESCREVE ; LIMPAR TODO O DISPLAY

MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW B'00001100' ; ESCREVE COMANDO PARA
CALL ESCREVE ; LIGAR O DISPLAY SEM CURSOR

MOVLW B'00000110' ; ESCREVE COMANDO PARA INCREM.
CALL ESCREVE ; AUTOMÁTICO À DIREITA

BSF RS ; SELECIONA O DISPLAY P/ DADOS


; VARREDURA DOS BOTÕES LOOP PRINCIPAL

VARRE
CLRWDT ; LIMPA WATCHDOG TIMER

BTFSS BOTAO_0 ; O BOTÃO 0 ESTÁ PRESSIONADO ?
GOTO TRATA_BOTAO_0 ; SIM - P/ TRATA_BOTAO_0
; NÃO


BTFSS BOTAO_1 ; O BOTÃO 1 ESTÁ PRESSIONADO ?
GOTO TRATA_BOTAO_1 ; SIM - PULA P/ TRATA_BOTAO_1
; NÃO

BTFSS BOTAO_2 ; O BOTÃO 2 ESTÁ PRESSIONADO ?
GOTO TRATA_BOTAO_2 ; SIM - PULA P/ TRATA_BOTAO_2
; NÃO

BTFSS BOTAO_3 ; O BOTÃO 3 ESTÁ PRESSIONADO ?
GOTO TRATA_BOTAO_3 ; SIM - PULA P/ TRATA_BOTAO_3
; NÃO

MOVLW FILTRO_TECLA ; CARREGA NO WORK O VALOR DE FILTRO_TECLA
MOVWF FILTRO_BOTOES ; SALVA EM FILTRO_BOTOES
; RECARREGA FILTRO P/ EVITAR RUIDOS

BTFSS TELA_PRINCIPAL ; DEVE MOSTRAR TELA PRINCIPAL ?
GOTO VARRE ; NÃO - VOLTA P/ VARRE
; SIM
CALL MOSTRA_TELA_PRINCIPAL
GOTO VARRE ; VOLTA PARA VARRER TECLADO


; ************************* TRATAMENTO DO BOTÃO 0 ***************************

TRATA_BOTAO_0

MOVF FILTRO_BOTOES,F
BTFSC STATUS,Z ; FILTRO JÁ IGUAL A ZERO ?
; (FUNÇÃO JÁ FOI EXECUTADA?)
GOTO VARRE ; SIM - VOLTA P/ VARREDURA DO TECLADO
; NÃO

DECFSZ FILTRO_BOTOES,F ; FIM DO FILTRO ? (RUIDO?)
GOTO VARRE ; NÃO - VOLTA P/ VARRE
; SIM - BOTÃO PRESSIONADO

MOVLW .3
MOVWF MT_0_REFERENCIA ; REFERENCIA PARA BOTAO 0 DEVE FICAR EM 3
MOVLW .0 ; mov 0 paraW mtr_0
MOVWF MT_0 ; coloca w 3 em em mtr_0 BOTAO 0
MOVLW .1
MOVF MONITOR_0 ;COLOCA 1 EM MONITOR_0 INDICANDO QUE A TECLA FOI PRESIONADA
F_0_AGUARDA ; MENU PARA RETONO DE MENSAGEM F

; OS COMANDOS A SEGUIR SÃO PARA ESCREVER A FRASE RELACIONADA AO BOTÃO 0
BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0X01
CALL ESCREVE ; COMANDO P/ LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW 0X80 ; COMANDO PARA POSICIONAR O CURSOR
CALL ESCREVE ; LINHA 0 / COLUNA 0
BSF RS ; SELECIONA O DISPLAY P/ DADOS

; COMANDOS PARA ESCREVER AS
; LETRAS DE "TECLA 0"
MOVLW 'M'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 'v'
CALL ESCREVE
MOVLW 'e'
CALL ESCREVE;
MOVLW ' '
CALL ESCREVE
MOVLW 'M'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 't'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 'r'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW '0'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
CALL DELAY_MS



MOVF MT_0_REFERENCIA,W
XORWF MT_0,W ; RESULTADO DE SUB COMPARACAO DE VARIAVEIS ABAIXO
MOVWF MT_0_REFERENCIA ; ATUALIZA VALOR DA SUBTRAÇAO EM MT_0_REFE.
BTFSS STATUS,Z ; VERIFICA Se esta EM 1 PULA APROXIMA LINHA
CALL TRATA_MT_0 ; VAI TRATAR SITUAÇAO PARA MTR_0
BSF TELA_PRINCIPAL ; SETA FLAG P/ MOSTRAR TELA PRINCIPAL
GOTO VARRE ; VOLTA P/ VARREDURA DOS BOTÕES

; ************************* TRATAMENTO DO BOTÃO 1 ***************************

TRATA_BOTAO_1
MOVF FILTRO_BOTOES,F
BTFSC STATUS,Z ; FILTRO JÁ IGUAL A ZERO ?
; (FUNÇÃO JÁ FOI EXECUTADA?)
GOTO VARRE ; SIM - VOLTA P/ VARREDURA DO TECLADO
; NÃO

DECFSZ FILTRO_BOTOES,F ; FIM DO FILTRO ? (RUIDO?)
GOTO VARRE ; NÃO - VOLTA P/ VARRE
; SIM - BOTÃO PRESSIONADO

; OS COMANDOS A SEGUIR SÃO PARA ESCREVER A FRASE RELACIONADA AO BOTÃO 1

BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0X01
CALL ESCREVE ; COMANDO P/ LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW 0X84 ; COMANDO PARA POSICIONAR O CURSOR
CALL ESCREVE ; LINHA 0 / COLUNA 8
BSF RS ; SELECIONA O DISPLAY P/ DADOS

; COMANDOS PARA ESCREVER AS
; LETRAS DE "TECLA 1"
MOVLW 'M'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 'v'
CALL ESCREVE
MOVLW 'e'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW 'M'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 't'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 'r'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW '1'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE

BSF TELA_PRINCIPAL ; SETA FLAG P/ MOSTRAR TELA PRINCIPAL

GOTO VARRE ; VOLTA P/ VARREDURA DOS BOTÕES

; ************************* TRATAMENTO DO BOTÃO 2 ***************************

TRATA_BOTAO_2
MOVF FILTRO_BOTOES,F
BTFSC STATUS,Z ; FILTRO JÁ IGUAL A ZERO ?
; (FUNÇÃO JA FOI EXECUTADA?)
GOTO VARRE ; SIM - VOLTA P/ VARREDURA DO TECLADO
; NÃO

DECFSZ FILTRO_BOTOES,F ; FIM DO FILTRO ? (RUIDO?)
GOTO VARRE ; NÃO - VOLTA P/ VARRE
; SIM - BOTÃO PRESSIONADO

; OS COMANDOS A SEGUIR SÃO PARA ESCREVER A FRASE RELACIONADA AO BOTÃO 2

BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0X01
CALL ESCREVE ; COMANDO P/ LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW 0XC0 ; COMANDO PARA POSICIONAR O CURSOR
CALL ESCREVE ; LINHA 1 / COLUNA 0
BSF RS ; SELECIONA O DISPLAY P/ DADOS

; COMANDOS PARA ESCREVER AS
; LETRAS DE "TECLA 2"
MOVLW 'M'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 'v'
CALL ESCREVE
MOVLW 'e'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW 'M'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 't'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 'r'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW '2'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE

BSF TELA_PRINCIPAL ; SETA FLAG P/ MOSTRAR TELA PRINCIPAL

GOTO VARRE ; VOLTA P/ VARREDURA DOS BOTÕES

; ************************* TRATAMENTO DO BOTÃO 3 ***************************

TRATA_BOTAO_3
MOVF FILTRO_BOTOES,F
BTFSC STATUS,Z ; FILTRO JÁ IGUAL A ZERO ?
; (FUNÇÃO JA FOI EXECUTADA?)
GOTO VARRE ; SIM - VOLTA P/ VARREDURA DO TECLADO
; NÃO

DECFSZ FILTRO_BOTOES,F ; FIM DO FILTRO ? (RUIDO?)
GOTO VARRE ; NÃO - VOLTA P/ VARRE
; SIM - BOTÃO PRESSIONADO

; OS COMANDOS A SEGUIR SÃO PARA ESCREVER A FRASE RELACIONADA AO BOTÃO 3

BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0X01
CALL ESCREVE ; COMANDO P/ LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW 0XC4 ; COMANDO PARA POSICIONAR O CURSOR
CALL ESCREVE ; LINHA 1 / COLUNA 8
BSF RS ; SELECIONA O DISPLAY P/ DADOS

; COMANDOS PARA ESCREVER AS
; LETRAS DE "TECLA 3"
MOVLW 'M'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 'v'
CALL ESCREVE
MOVLW 'e'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW 'M'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 't'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 'r'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW '3'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE

BSF TELA_PRINCIPAL ; SETA FLAG P/ MOSTRAR TELA PRINCIPAL

GOTO VARRE ; VOLTA P/ VARREDURA DOS BOTÕES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



TRATA_MT_0

CALL DELAY_MS ; DELAY DE 1MS
BTFSS MONITOR_0,W ; MONITOR 0 ESTÁ EM 1 ?
CALL MENSAGE_A ;VOCE CONSEGUIU
BTFSS BOTAO_0
GOTO VARRE ; SIM -

LOP DECF MT_0_REFERENCIA,W ;DEREMENTA 1
MOVWF MT_0_REFERENCIA ;SAUVA DECREMENTO
XORWF MT_0,W ; COMPARA MT_O COM ; UM CONTADOR DE 3 POSISOES
BTFSS STATUS,Z ; VERIFICA Se MT_0 ESTA 1 PULA APROXIMA LINHA CALL CONDÇAO
CALL SISTEMA_MENU
; GOTO LOP
BTFSC MT_0_REFERENCIA,W
MOVLW .0 ;MOVE (0)PARA
MOVF MONITOR_0 ;MONITOR_0
GOTO VARRE ; VOLTA P/ VARREDURA DOS BOTÕES
CONDÇAO1

BTFSS BOTAO_1 ; O BOTÃO 1 ESTÁ PRESSIONADO LE A PROXIMA; NAO PULA ?
CALL LEITURA
BSF LIGA_MOTOR_0A; LIGA MOTOR 0 PARA DIREITA
BTFSC BOTAO_1 ;TESTA SE SE TECLA 1 ESTÁ PRESIONADA NAO LE A PROXIMA
BCF LIGA_MOTOR_0A ; DELIGA MOTOR 0 PARA DIREITA
BTFSC BOTAO_1 ;TESTA SE SE TECLA 1 ESTÁ PRESIONADA NAO LE A PROXIMA
GOTO $-6 ; NÃO - VOLTA 5 INSTRUÇÕES
BTFSS BOTAO_2 ; O BOTÃO 1 ESTÁ PRESSIONADO LE A PROXIMA; NAO PULA ?
CALL LEITURA
BSF LIGA_MOTOR_0B ; LIGA MOTOR 0 PARA ESQUERDA
BTFSC BOTAO_2 ;TESTA SE SE TECLA 1 ESTÁ PRESIONADA NAO LE A PROXIMA
BCF LIGA_MOTOR_0B ; DELIGA MOTOR 0 PARA ESQUERDA
BTFSC BOTAO_2 ;TESTA SE SE TECLA 1 ESTÁ PRESIONADA NAO LE A PROXIMA
GOTO $-6 ; NÃO - VOLTA 5 INSTRUÇÕES

RETURN


TRATA_SITUAÇAO1
MOVLW .1
MOVWF MONITOR_1 ; COLOCA 1 EMM MONITOR


; MOVF MONITOR_1,W ;COPIA PARA W
; MOVWF PORTC,2 ;ENVIA PARA PORTC
LEITURA ;DE AD ANALOGICO
BSF ADCON0,GO ; INICIA CONVERSÃO A/D
BTFSC ADCON0,GO ; FIM DA CONVERSÃO ?
GOTO $-1 ; NÃO - VOLTA 1 INSTRUÇÃO
; SIM

MOVLW .250
MOVWF ACCaHI ; CARREGA ACCHI COM 250(PARA SEGURANÇA DO MOTOR
MOVLW .10
MOVWF ACCaLO ;CARREGA ACCaLO COM 10 PARA SEGURANÇA DO MOTOR
MOVF ADGARD_0,W
ADDLW 0X30 ; CONVERTE BCD DA UNIDADE EM ASCII
CALL ESCREVE ; ENVIA AO LCD

RETURN

; OS COMANDOS A SEGUIR SÃO PARA ESCREVER A FRASE RELACIONADA AO BOTÃO 3
MENSAGE_A
BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0X01
CALL ESCREVE ; COMANDO P/ LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW 0XC2 ; COMANDO PARA POSICIONAR O CURSOR
CALL ESCREVE ; LINHA 1 / COLUNA 2
BSF RS ; SELECIONA O DISPLAY P/ DADOS

; COMANDOS PARA ESCREVER AS
; LETRAS DE "TECLA 3"
MOVLW 'V'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 'c'
CALL ESCREVE
MOVLW 'e'
CALL ESCREVE
MOVLW ' '
CALL ESCREVE
MOVLW 'c'
CALL ESCREVE
MOVLW 'o'
CALL ESCREVE
MOVLW 'n'
CALL ESCREVE
MOVLW 's'
CALL ESCREVE
MOVLW 'e'
CALL ESCREVE
MOVLW 'g'
CALL ESCREVE
MOVLW 'u'
CALL ESCREVE
MOVLW 'i'
CALL ESCREVE
MOVLW 'U'
CALL ESCREVE
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;---------------------------------------------------
SISTEMA_MENU
MOVLW .3
MOVWF DECREMENTA_MENU
MOVF MT_0_REFERENCIA,W
XORWF DECREMENTA_MENU,W ; RESULTADO DE SUB COMPARACAO DE VARIAVEIS ABAIXO
BTFSS STATUS,Z ; VERIFICA Se esta EM 1 PULA APROXIMA LINHA
CALL MENSAGE_A_F0 ; VAI TRATAR MENSAGEM
CALL CONDÇAO1

MOVLW .2
MOVWF DECREMENTA_MENU
MOVF MT_0_REFERENCIA,W
XORWF DECREMENTA_MENU,W ; RESULTADO DE SUB COMPARACAO DE VARIAVEIS ABAIXO
BTFSS STATUS,Z ; VERIFICA Se esta EM 1 PULA APROXIMA LINHA
CALL MENSAGE_A_F1 ; VAI TRATAR MENSAGEM
CALL CONDÇAO1

MOVLW .1
MOVWF DECREMENTA_MENU
MOVF MT_0_REFERENCIA,W
XORWF DECREMENTA_MENU,W ; RESULTADO DE SUB COMPARACAO DE VARIAVEIS ABAIXO
BTFSS STATUS,Z ; VERIFICA Se esta EM 1 PULA APROXIMA LINHA
CALL MENSAGE_A_F3 ; VAI TRATAR MENSAGEM
CALL CONDÇAO1

MOVLW .0
MOVWF DECREMENTA_MENU
MOVF MT_0_REFERENCIA,W
XORWF DECREMENTA_MENU,W ; RESULTADO DE SUB COMPARACAO DE VARIAVEIS ABAIXO
BTFSS STATUS,Z ; VERIFICA Se esta EM 1 PULA APROXIMA LINHA
CALL MENSAGE_A_F3 ; VAI TRATAR MENSAGEM
CALL CONDÇAO1
RETURN

MENSAGE_A_F0
CALL DELAY_MS
BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0X01
CALL ESCREVE ; COMANDO P/ LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW 0XC5 ; COMANDO PARA POSICIONAR O CURSOR
CALL ESCREVE ; LINHA 1 / COLUNA 8
BSF RS ; SELECIONA O DISPLAY P/ DADOS

; COMANDOS PARA ESCREVER AS
; LETRAS DE "TECLA 3"
MOVLW 'F'
CALL ESCREVE
MOVLW '>'
CALL ESCREVE
MOVLW '>'
CALL ESCREVE
MOVLW '0'
CALL ESCREVE
RETURN
MENSAGE_A_F1
CALL DELAY_MS
BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0X01
CALL ESCREVE ; COMANDO P/ LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW 0XC5 ; COMANDO PARA POSICIONAR O CURSOR
CALL ESCREVE ; LINHA 1 / COLUNA 8
BSF RS ; SELECIONA O DISPLAY P/ DADOS

MOVLW 'F'
CALL ESCREVE
MOVLW '>'
CALL ESCREVE
MOVLW '>'
CALL ESCREVE
MOVLW '1'
CALL ESCREVE
RETURN
MENSAGE_A_F2
CALL DELAY_MS
BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0X01
CALL ESCREVE ; COMANDO P/ LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW 0XC5 ; COMANDO PARA POSICIONAR O CURSOR
CALL ESCREVE ; LINHA 1 / COLUNA 8
BSF RS ; SELECIONA O DISPLAY P/ DADOS

MOVLW 'F'
CALL ESCREVE
MOVLW '>'
CALL ESCREVE
MOVLW '>'
CALL ESCREVE
MOVLW '2'
CALL ESCREVE
RETURN
MENSAGE_A_F3
CALL DELAY_MS
BCF RS ; SELECIONA O DISPLAY P/ COMANDOS
MOVLW 0X01
CALL ESCREVE ; COMANDO P/ LIMPAR A TELA
MOVLW .1
CALL DELAY_MS ; DELAY DE 1MS

MOVLW 0XC5 ; COMANDO PARA POSICIONAR O CURSOR
CALL ESCREVE ; LINHA 1 / COLUNA 8
BSF RS ; SELECIONA O DISPLAY P/ DADOS

MOVLW 'F'
CALL ESCREVE
MOVLW '>'
CALL ESCREVE
MOVLW '>'
CALL ESCREVE
MOVLW '3'
CALL ESCREVE
RETURN
Este programa nao está concluido pois é só
; FIM DO PROGRAMA


END ; FIM DO PROGRAMA

Comentários

Postagens mais visitadas deste blog

contador 9999 com pic 16f628

CNC fotos cordenadas x y z dicas

codigo assembler braço mecanico para 5 motores