aula 2- assembly-exercícios

4
Programação Luis AranseguiAula 2 Parte II - MPLAB Página 1/4 Programas exemplo assembly Como executar o programa Tarefa prática Programe a estação Proteus ou kit PIC com os seguintes programas em assembly, identificando qual o efeito de cada programa abaixo relacionado. ;------------------------------- ; Programa 1 : ; AUTOR : LUIS ARANSEGUI ; FEVEREIRO DE 2010 ; Programação Assembly ; ========================== cabecalho padrao LIST p=16F877 #include "P16F877.INC" ;inclui biblioteca do PIC a ser usado inicio bcf STATUS, RP0 ;desliga bit STATUS,RP0. bcf STATUS, RP1 ;desliga bit STATUS,RP1. escolhe bank0. clrf PORTA ;zera todo o PORTA (A0, A1, A2, ...) bsf STATUS, RP0 ;liga bit STATUS,RP0. escolhe bank1 movlw 0x06 ;carrega 06H (00000110) no acumulador movwf ADCON1 ;move do acum.p/ADCON1 (desl.analogicas) movlw 0xff ;carrega FFH (11111111) no acumulador movwf TRISA ;move acum.p/TRISA (PORTA como entrada) movlw 0x00 ;zera todo o acumulador (move zeros) movwf TRISD ;mov acum.p/PORTD, todo PORTD como saída bcf TRISB,3 ;desliga TRISB,3 (define B3 como saída) bcf STATUS, RP0 ;desliga bit STATUS,RP0 (volta bank0) ; =========================== parte principal comeco btfss PORTA,1 ;testa A1. Se ligado, pula prox linha goto DESLIG ;desvia para rótulo “DESLIG” bsf PORTB,3 ;liga B3 (buzzer) goto comeco ;desvia para rótulo “comeco” DESLIG bcf PORTB,3 ;desliga B3 (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 A1 e B3.. 5) Tente mudar este programa, de forma que ele funcione com a chave A2 e com a saída (led) D0.

Upload: alexraupp

Post on 21-Jan-2016

21 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Aula 2- Assembly-Exercícios

Programação – Luis Aransegui– Aula 2 – Parte II - MPLAB Página 1/4

Programas exemplo assembly

Como executar o programa

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

;-------------------------------

; Programa 1 :

; AUTOR : LUIS ARANSEGUI

; FEVEREIRO DE 2010

; Programação Assembly

; ========================== cabecalho padrao

LIST p=16F877

#include "P16F877.INC" ;inclui biblioteca do PIC a ser usado

inicio bcf STATUS, RP0 ;desliga bit STATUS,RP0.

bcf STATUS, RP1 ;desliga bit STATUS,RP1. escolhe bank0.

clrf PORTA ;zera todo o PORTA (A0, A1, A2, ...)

bsf STATUS, RP0 ;liga bit STATUS,RP0. escolhe bank1

movlw 0x06 ;carrega 06H (00000110) no acumulador

movwf ADCON1 ;move do acum.p/ADCON1 (desl.analogicas)

movlw 0xff ;carrega FFH (11111111) no acumulador

movwf TRISA ;move acum.p/TRISA (PORTA como entrada)

movlw 0x00 ;zera todo o acumulador (move zeros)

movwf TRISD ;mov acum.p/PORTD, todo PORTD como saída

bcf TRISB,3 ;desliga TRISB,3 (define B3 como saída)

bcf STATUS, RP0 ;desliga bit STATUS,RP0 (volta bank0)

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

comeco btfss PORTA,1 ;testa A1. Se ligado, pula prox linha

goto DESLIG ;desvia para rótulo “DESLIG”

bsf PORTB,3 ;liga B3 (buzzer)

goto comeco ;desvia para rótulo “comeco”

DESLIG bcf PORTB,3 ;desliga B3 (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 A1 e B3..

5) Tente mudar este programa, de forma que ele funcione com a chave A2 e com a saída

(led) D0.

Page 2: Aula 2- Assembly-Exercícios

Programação – Luis Aransegui– Aula 2 – Parte II - MPLAB Página 2/4

; Programa 2 :

; AUTOR : Luis Aransegui

; Março DE 2010

; Programação Assembly

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, RP0 ;desliga bit STATUS,RP0.

bcf STATUS, RP1 ;desliga bit STATUS,RP1. escolhe bank0.

clrf PORTA ;zera todo o PORTA (A0, A1, A2, ...)

bsf STATUS, RP0 ;liga bit STATUS,RP0. escolhe bank1

movlw 0x06 ;carrega 06H (00000110) no acumulador

movwf ADCON1 ;move do acum.p/ADCON1 (desl.analogicas)

movlw 0xff ;carrega FFH (11111111) no acumulador

movwf TRISA ;move acum.p/TRISA (PORTA como entrada)

movlw 0x00 ;zera todo o acumulador (move zeros)

movwf TRISD ;mov acum.p/PORTD, todo PORTD como saída

bcf STATUS, RP0 ;desliga bit STATUS,RP0 (volta bank0)

comeco movlw 0x01 ;rotulo comeco.Carrega acum. c/ 00000001

movwf PORTD ;move do acum. para PORTD

movlw 0x07 ;move 07H para o acum.

movwf CONT ;move do acum. para CONT

volta1 call tempo ;chama rotina de tempo

rlf PORTD,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 PORTD,f ;rotaciona PORTD para direita

decfsz CONT,f ;decrem.CONT e pula prox. linha se zerar

goto volta2 ;desvia para rótulo “volta2”

goto começo ;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

;-------------------------------

Page 3: Aula 2- Assembly-Exercícios

Programação – Luis Aransegui– Aula 2 – Parte II - MPLAB Página 3/4

; Programa 3 :

; AUTOR : Luis Aransegui

; FEVEREIro DE 2010

; Programação Assembly

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, RP0 ;desliga bit STATUS,RP0.

bcf STATUS, RP1 ;desliga bit STATUS,RP1. escolhe bank0.

clrf PORTA ;zera todo o PORTA (A0, A1, A2, ...)

bsf STATUS, RP0 ;liga bit STATUS,RP0. escolhe bank1

movlw 0x06 ;carrega 06H (00000110) no acumulador

movwf ADCON1 ;move do acum.p/ADCON1 (desl.analogicas)

movlw 0xff ;carrega FFH (11111111) no acumulador

movwf TRISA ;move acum.p/TRISA (PORTA como entrada)

movlw 0x00 ;zera todo o acumulador (move zeros)

movwf TRISD ;mov acum.p/PORTD, todo PORTD como saída

bcf TRISB,3 ;desliga TRISB,3 definindo B3 como saída

bcf STATUS, RP0 ;desliga bit STATUS,RP0 (volta bank0)

;; ==================================== parte ciclica

comeco bsf PORTB,3 ;________________________________________

movlw 0xff ;________________________________________

movwf PORTD ;________________________________________

call tempo ;________________________________________

bcf PORTB,3 ;________________________________________

movlw 0x3f ;________________________________________

movwf PORTD ;________________________________________

call tempo ;________________________________________

movlw 0x0f ;________________________________________

movwf PORTD ;________________________________________

call tempo ;________________________________________

movlw 0x03 ;________________________________________

movwf PORTD ;________________________________________

call tempo ;________________________________________

goto comeco ;________________________________________

END ;________________________________________

;-------------------------------

Page 4: Aula 2- Assembly-Exercícios

Programação – Luis Aransegui– Aula 2 – 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 PORTD 7) Desvia para rótulo “comeco” 8) Diretiva de FIM DE PROGRAMA 9) Ativa pino B3 (buzzer) 10) Desativa pino B3 (buzzer)

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