Pesquisar este blog

terça-feira, 21 de junho de 2011

tutotial de programação part2

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


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                      cabeçalho do programa
;  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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                     informações para o compilador
 LIST P=16F84a                          ;define processador
  RADIX     DEC                          ;define padrão decimal
  INCLUDE <P16F84a.INC>      ;inclue arquivo com características do 16f84a
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                         configurações de gravaçào
;               aqui definimos nossos bits de configuração
 __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                        paginaçào de memoria
;                                       aqui criamos nomes para nossos bamcos de memorias do pic

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

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

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

;                                        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














                                                   

Nenhum comentário:

Postar um comentário