LINGUAGEM DE PROGRAMA O – ASSEMBLY (continua o)

Document Sample
LINGUAGEM DE PROGRAMA  O – ASSEMBLY (continua  o) Powered By Docstoc
					Programação – Daniel Corteletti – Aula 3 – Parte II - MPLAB                Página 1/4

                               Programas exemplo assembly


   Como executar o programa



                          Tarefa prática
Programe a estação PLCPic com os seguintes programas em assembly,
identificando qual o efeito de cada programa abaixo relacionado.

;-------------------------------
; Programa 1 :
; AUTOR : DANIEL CORTELETTI
; julho DE 2009
; C.T. MECATRONICA SENAI
; ========================== cabecalho padrao para PLCPIC
        LIST    p=16F877
        #include "P16F877.INC" ;inclui biblioteca do PIC a ser usado

inicio   bcf      STATUS, RP1       ;desliga bit STATUS,RP1.
         bsf      STATUS, RP0       ;liga bit STATUS,RP0. escolhe bank1
         movlw    0xff              ;carrega FFH (11111111) no acumulador
         movwf    TRISD             ;move acum.p/TRISD (PORTD como entrada)
         movlw    0x00              ;zera todo o acumulador (move zeros)
         movwf    TRISC             ;mov acum.p/TRISC, todo PORTC como saída
         movwf    TRISE             ;mov acum.p/TRISE, todo PORTE como saída
         bcf      STATUS, RP0       ;desliga bit STATUS,RP0 (volta bank0)

; =========================== parte principal

comeco   btfss    PORTD,0           ;testa D0. Se ligado, pula prox linha
         goto     DESLIG            ;desvia para rótulo “DESLIG”
         bsf      PORTE,2           ;liga E2 (buzzer)
         goto     comeco            ;desvia para rótulo “comeco”
DESLIG   bcf      PORTE,2           ;desliga E2 (buzzer)
         goto     comeco            ;desvia para rotulo “comeco”

         END                        ;END




   1) Copie e cole este programa (entre as barras horizontais) no MPLAB.
   2) Salve-o com o nome PROG1.asm em uma pasta que você tenha acesso.
   3) Gere o arquivo HEX (clicando em Project->QuickBuild)
   4) Transfira o programa, e veja o resultado. Este programa usa os pinos D0 (chave na
      estação CUSCOPIC) e E2 (BUZZER na estação PLCPIC).
   5) Tente mudar este programa, de forma que ele funcione com a chave D7 e com a saída
      (led) C0 da bancada PLCPIC.
Programação – Daniel Corteletti – Aula 3 – Parte II - MPLAB               Página 2/4



;   Programa 2 :
;   AUTOR : DANIEL CORTELETTI
;   JULHO DE 2009
;   C.T. MECATRONICA SENAI

         LIST    p=16F877
         #include "P16F877.INC"     ;inclui   biblioteca   do PIC a ser usado
VAR1     equ     0x20               ;define   posição de   memória 20H
VAR2     equ     0x21               ;define   posição de   memória 21H
VAR3     equ     0x22               ;define   posição de   memória 22H
CONT     equ     0x23               ;define   posição de   memória 23H
         org     0
         goto    inicio             ;desvia execução para rótulo INICIO

inicio    bcf      STATUS, RP1      ;desliga bit STATUS,RP1.
          bsf      STATUS, RP0      ;liga bit STATUS,RP0. escolhe bank1
          movlw    0xff             ;carrega FFH (11111111) no acumulador
          movwf    TRISD            ;move acum.p/TRISD (PORTD como entrada)
          movlw    0x00             ;zera todo o acumulador (move zeros)
          movwf    TRISC            ;mov acum.p/TRISC, todo PORTC como saída
          movwf    TRISE            ;mov acum.p/TRISE, todo PORTE como saída
          bcf      STATUS, RP0      ;desliga bit STATUS,RP0 (volta bank0)

comeco    movlw    0x01             ;rotulo comeco.Carrega acum. c/ 00000001
          movwf    PORTC            ;move do acum. para PORTC
          movlw    0x07             ;move 07H para o acum.
          movwf    CONT             ;move do acum. para CONT
volta1    call     tempo            ;chama rotina de tempo
          rlf      PORTC,f          ;rotaciona PORTD esquerda
          decfsz   CONT,f           ;decrem.CONT e pula prox. Linha se zerar
          goto     volta1           ;desvia para rótulo “volta1”
          movlw    0x07             ;carrega acum. Com 07H
          movwf    CONT             ;move do acum. para CONT
volta2    call     tempo            ;chama rotina de tempo
          rrf      PORTC,f          ;rotaciona PORTC para direita
          decfsz   CONT,f           ;decrem.CONT e pula prox. linha se zerar
          goto     volta2           ;desvia para rótulo “volta2”
          goto     comeco           ;desvia para “começo”

tempo     movlw    0x03             ;rotina de tempo. W <- 3
          movwf    VAR1             ;VAR1 <- W
temp1     movlw    0x3F             ;W <- 3Fh (63 em decimal)
          movwf    VAR2             ;VAR2 <- W
temp2     movlw    0Xff             ;W <- FFH (255 em decimal)
          movwf    VAR3             ;VAR3 <- W
          decfsz   VAR3,F           ;decrementa VAR3 pula prox.linha se zerar
          goto     $-1              ;volta uma linha
          decfsz   VAR2,F           ;decrementa VAR2 pula prox.linha se zerar
          goto     temp2            ;volta para “temp2”
          decfsz   VAR1,F           ;decrementa VAR1 pula prox.linha se zerar
          goto     temp1            ;volta para “temp1”
          return                    ;retorna da subrotina p/ onde foi chamada

        END                    ;diretiva de fim do programa
;-------------------------------
Programação – Daniel Corteletti – Aula 3 – Parte II - MPLAB           Página 3/4



; Programa 3 :
; AUTOR : DANIEL CORTELETTI
; JULHO DE 2009
; C.T. MECATRONICA SENAI
        LIST    p=16F877       ; pic usado
        #include "P16F877.INC" ; inclui a biblioteca do MCu utilizado
VAR1    equ     0x20           ;define posição de memória 20H
VAR2    equ     0x21           ;define posição de memória 21H
VAR3    equ     0x22           ;define posição de memória 22H
        org     0              ;define endereço de origem na ROM
        goto    inicio         ;desvia execução para rótulo INICIO
;; =========================== rotina de tempo
tempo   movlw   0x03           ;rotina de tempo. W <- 3
        movwf   VAR1           ;VAR1 <- W
temp1   movlw   0x3F           ;W <- 3Fh (63 em decimal)
        movwf   VAR2           ;VAR2 <- W
temp2   movlw   0xFF           ;W <- FFH (255 em decimal)
        movwf   VAR3           ;VAR3 <- W
        decfsz VAR3,F          ;decrementa VAR3 pula prox.linha se zerar
        goto    $-1            ;volta uma linha
        decfsz VAR2,F          ;decrementa VAR2 pula prox.linha se zerar
        goto    temp2          ;volta para “temp2”
        decfsz VAR1,F          ;decrementa VAR1 pula prox.linha se zerar
        goto    temp1          ;volta para “temp1”
        return                 ;retorna da subrotina p/ onde foi chamada
;;============================ rotina de inicialização (prepara a estação)
inicio bcf      STATUS, RP1    ;desliga bit STATUS,RP1. escolhe bank0.
        bsf     STATUS, RP0    ;liga bit STATUS,RP0. escolhe bank1
        movlw   0xff           ;carrega FFH (11111111) no acumulador
        movwf   TRISD          ;move acum.p/TRISD (PORTD como entrada)
        movlw   0x00           ;zera todo o acumulador (move zeros)
        movwf   TRISC          ;mov acum.p/TRISC, todo PORTC como saída
        movwf   TRISE          ;mov acum.p/TRISE, todo PORTE como saída
        bcf     STATUS, RP0    ;desliga bit STATUS,RP0 (volta bank0)
;; ==================================== parte ciclica
comeco bsf      PORTE,2        ;________________________________________
        movlw   0xff           ;________________________________________
        movwf   PORTC          ;________________________________________
        call    tempo          ;________________________________________

         bcf      PORTE,2           ;________________________________________
         movlw    0x3f              ;________________________________________
         movwf    PORTC             ;________________________________________
         call     tempo             ;________________________________________

         movlw    0x0f              ;________________________________________
         movwf    PORTC             ;________________________________________
         call     tempo             ;________________________________________

         movlw    0x03              ;________________________________________
         movwf    PORTC             ;________________________________________
         call     tempo             ;________________________________________

         goto     comeco            ;________________________________________

        END                    ;________________________________________
;-------------------------------
Programação – Daniel Corteletti – Aula 3 – Parte II - MPLAB                  Página 4/4


Associe os comentários corretamente com as lacunas do programa anterior. Alguns
comentários serão repetidos várias vezes.


   1)    Chama rotina de tempo
   2)    Carrega acumulador com 00000011
   3)    Carrega acumulador com 00001111
   4)    Carrega acumulador com 00111111
   5)    Carrega acumulador com 11111111
   6)    Move acumulador para PORTC
   7)    Desvia para rótulo “comeco”
   8)    Diretiva de FIM DE PROGRAMA
   9)    Ativa pino E2 (buzzer)
   10)   Desativa pino E2 (buzzer)



2) Crie um sequencial de LEDs que siga o seguinte padrão de saída no PORTC




        Para isso, use o programa apresentando anteriormente (programa 3) e utilize a
conversão de binário para hexadecimal para descobrir os valores a serem atribuídos ao PORTC.

				
DOCUMENT INFO
Jun Wang Jun Wang Dr
About Some of Those documents come from internet for research purpose,if you have the copyrights of one of them,tell me by mail vixychina@gmail.com.Thank you!