tutotial de programação  part2
Autor: casa do fusca | Publicado: 2011-06-21T10:37:00-07:00

hoje como prometido vou mostrar como seria aquela estrutura comentada na parte 1 do nosso tutorial
vamos começar


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cabeçalho do programa
; &nbsp;neste trecho colocamos informações referente ao codigo como:
; nome da empresa que escreveu o codigo - micro controlador ultilizado - nome do programador - data de ;criação
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; informações para o compilador
&nbsp;LIST P=16F84a &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;define processador
&nbsp; RADIX &nbsp; &nbsp; DEC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;define padrão decimal
&nbsp; INCLUDE &lt;P16F84a.INC&gt; &nbsp; &nbsp; &nbsp;;inclue arquivo com características do 16f84a
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; configurações de gravaçào
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aqui definimos nossos bits de configuração
&nbsp;__CONFIG _CP_OFF &amp; _PWRTE_ON &amp; _WDT_OFF &amp; _XT_OSC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;paginaçào de memoria
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aqui criamos nomes para nossos bamcos de memorias do pic

#DEFINE &nbsp;BANK0 BCF STATUS,RP0
#DEFINE &nbsp;BANK1 BSF STATUS,RP0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; variaveis
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aqui criamos espaços para nossas variavei usadas no sistema
cblock &nbsp;0x0c

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; W_TEMP
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; STATUS_TEMP
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TEMPO0
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TEMPO1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TEMPO2
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CONTROLE
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FLAG
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; F1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; F2
&nbsp;ENDC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flags de controle
; aqui definimos nossos flags que nada mais é do que cada bit que temos dentro de uma determinada variavel
#DEFINE &nbsp;ST_PR1 FLAG,0
#DEFINE &nbsp;SE_PC1 FLAG,1
#DEFINE &nbsp;ST_J1 &nbsp;FLAG,2
#DEFINE &nbsp;ST_J2 &nbsp;FLAG,3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CONSTANTES
;espaços para constantes do sisteme como o proprio nome sugere é um registro que nunca tem seu valor ;alterado
T1 &nbsp;EQU .250 &nbsp; ;FILTRO TC ON E OFF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DEFINIÇÕES
; aqui é onde iremos criar nomes para os pinos do pic
#DEFINE &nbsp;PR1 &nbsp; &nbsp; &nbsp; PORTA,0
#DEFINE &nbsp;PC1 &nbsp; &nbsp; &nbsp; PORTA,1
#DEFINE &nbsp;J1 &nbsp; &nbsp; &nbsp; &nbsp;PORTA,2
#DEFINE &nbsp;J2 &nbsp; &nbsp; &nbsp; &nbsp;PORTA,3
#DEFINE &nbsp;ON &nbsp; &nbsp; &nbsp; &nbsp;PORTB,0
#DEFINE &nbsp;OFF &nbsp; &nbsp; &nbsp; PORTB,1
#DEFINE &nbsp;ABI &nbsp; &nbsp; &nbsp; PORTB,3
#DEFINE &nbsp;SIRENE &nbsp; &nbsp;PORTB,2
#DEFINE &nbsp;ERRO &nbsp; &nbsp; &nbsp;PORTB,4
#DEFINE &nbsp;VIO &nbsp; &nbsp; &nbsp; PORTB,5
#DEFINE &nbsp;AXL &nbsp; &nbsp; &nbsp; PORTB,6
#DEFINE &nbsp;MONITOR &nbsp; PORTB,7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MEMORIA DE PROGRAMA
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;este trecho indica que apartir deste ponto se inicia o programa
&nbsp; &nbsp; &nbsp; &nbsp;ORG &nbsp; &nbsp; &nbsp;0X00 &nbsp; &nbsp; &nbsp;;define nicio do trecho a seguir em 000
&nbsp; &nbsp; &nbsp; &nbsp;GOTO INICIO &nbsp; &nbsp; &nbsp; &nbsp;;desvia para o inicio
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ROTINA DE INTERRUPÇÃO
;é para este trecho que todas asinterrupções do programa sera direcionada
&nbsp; &nbsp; &nbsp; &nbsp;ORG &nbsp; &nbsp; &nbsp;0X04 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp;RETFIE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;volta da interupção
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SUB.ROTINAS
;neste trecho fica posicionado todas as subrotinas &nbsp;lembrando que subrotinas são aquelas que estam fora da ;rotina principal
EMERGENCIA
&nbsp; &nbsp; BCF MONITOR
&nbsp; &nbsp; BSF VIO
&nbsp; &nbsp; NOP
&nbsp; &nbsp; BSF SIRENE
&nbsp; &nbsp; NOP
&nbsp; &nbsp; RETURN
MONITORANDO
&nbsp; &nbsp; BCF AXL
&nbsp; &nbsp; BSF MONITOR
&nbsp; &nbsp; BSF ABI
&nbsp; &nbsp; CLRF CONTROLE
PR_1 
&nbsp; &nbsp; BTFSC PR1
&nbsp; &nbsp; INCF CONTROLE
&nbsp; &nbsp; NOP
PC_1
&nbsp; &nbsp; BTFSC PC1
&nbsp; &nbsp; INCF CONTROLE
&nbsp; &nbsp; NOP
J_1
&nbsp; &nbsp; BTFSC J1
&nbsp; &nbsp; INCF CONTROLE
&nbsp; &nbsp; NOP
J_2
&nbsp; &nbsp; BTFSC J2
&nbsp; &nbsp; INCF CONTROLE
&nbsp; &nbsp; NOP
&nbsp; &nbsp;
&nbsp; &nbsp; RETURN
ALARME_OFF
&nbsp; &nbsp; BCF &nbsp; ABI
&nbsp; &nbsp; BCF &nbsp; VIO
&nbsp; &nbsp; BCF &nbsp; MONITOR
&nbsp; &nbsp; BCF &nbsp; SIRENE
&nbsp; &nbsp; BSF &nbsp; AXL
&nbsp; &nbsp; CLRF &nbsp;CONTROLE
&nbsp; &nbsp; RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;_____________________________________INICIO DO PROGRAMA
; ESTE ENDERECO E' O IMEDIATAMENTE APOS O FIM DA&nbsp;INTERRUPCAO OU QUANDO ;LIGAMOS NOSSO SISTEMA
INICIO:    
;apartir deste ponto começamos a configurar os registradores do pic &nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; BANK1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; SELECIONA BANCO 1 PARA OPTION E TRIS &nbsp;
&nbsp; &nbsp; MOVLW .15 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; W = 15
&nbsp; &nbsp; MOVWF TRISA  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; TRISA = FFH. PORTA TODA ENTRADA
&nbsp; &nbsp; MOVLW .3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; W = 3
&nbsp; &nbsp; MOVWF TRISB  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; TRISB = 0. PORTB TODA SAIDA
&nbsp; &nbsp; MOVLW .129 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; CARREGA W COM ESTE VALOR
&nbsp; &nbsp; MOVWF OPTION_REG  ; REGISTRO OPTION AJUSTA TIMER 0 CLOCK INTERNO
&nbsp; &nbsp; MOVLW .0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; CARREGA W COM ESTE VALOR
&nbsp; &nbsp; MOVWF INTCON
&nbsp; &nbsp; BANK0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; VOLTO AO BANCO 0. PADRAO DO RESET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ROTINA PRINCIPAL
; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aqui é aonde iremos criar o nosso programa para executar o que queremos
MAIN
&nbsp; 
&nbsp; &nbsp;CLRF PORTA
&nbsp; &nbsp;CLRF PORTB
&nbsp; &nbsp;CLRF FLAG
&nbsp; &nbsp;CLRF F1
&nbsp; &nbsp;CLRF F2
&nbsp; &nbsp;CLRF STATUS
TEST_ON
&nbsp; 
&nbsp; &nbsp;BTFSS ON
&nbsp; &nbsp;GOTO TESTE_OFF
&nbsp; &nbsp;CALL MONITORANDO
&nbsp; &nbsp;GOTO TESTE_CONTRO
TESTE_OFF
&nbsp; &nbsp;BTFSS OFF
&nbsp; &nbsp;GOTO TEST_ON
&nbsp; &nbsp;CALL ALARME_OFF
&nbsp; &nbsp;GOTO TEST_ON
TESTE_CONTRO
&nbsp;
&nbsp; &nbsp;MOVLW .4
&nbsp; &nbsp;MOVWF F1
&nbsp; &nbsp;XORWF CONTROLE,F1
&nbsp; &nbsp;SKPZ
&nbsp; &nbsp;CALL &nbsp;EMERGENCIA
&nbsp; &nbsp;CALL &nbsp;MONITORANDO
&nbsp; &nbsp;
&nbsp; &nbsp;GOTO TEST_ON
&nbsp;END

; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FIM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


pode parecer meio confuso no começo mais a pratica leva a perfeiçào
da maneira que esta colocado o programa nesta estrutura fica mito facil encontrar um trecho especifico
para se fazer alguma alteraçào se nescessario
bom é isso ai lembrando que este codigo que esta escrito acima é totalmente funcional
e no nosso proximo tutorial teremos mais informaçòes sobre progamaçào
valeu ate a proxima galera














&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;