You are on page 1of 4

Programao Luis Aransegui Aula 2 Parte II - MPLAB

Programas exemplo assembly

Pgina 1/4

Como executar o programa

Tarefa prtica
Programe a estao 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 ; Programao Assembly ; ========================== cabecalho padrao LIST p=16F877 #include "P16F877.INC" ;inclui biblioteca do PIC a ser usado inicio bcf bcf clrf bsf movlw movwf movlw movwf movlw movwf bcf bcf STATUS, STATUS, PORTA STATUS, 0x06 ADCON1 0xff TRISA 0x00 TRISD TRISB,3 STATUS, RP0 RP1 RP0 ;desliga bit STATUS,RP0. ;desliga bit STATUS,RP1. escolhe bank0. ;zera todo o PORTA (A0, A1, A2, ...) ;liga bit STATUS,RP0. escolhe bank1 ;carrega 06H (00000110) no acumulador ;move do acum.p/ADCON1 (desl.analogicas) ;carrega FFH (11111111) no acumulador ;move acum.p/TRISA (PORTA como entrada) ;zera todo o acumulador (move zeros) ;mov acum.p/PORTD, todo PORTD como sada ;desliga TRISB,3 (define B3 como sada) ;desliga bit STATUS,RP0 (volta bank0)

RP0

; =========================== parte principal comeco btfss goto bsf goto bcf goto END PORTA,1 DESLIG PORTB,3 comeco PORTB,3 comeco ;testa A1. Se ligado, pula prox linha ;desvia para rtulo DESLIG ;liga B3 (buzzer) ;desvia para rtulo comeco ;desliga B3 (buzzer) ;desvia para rotulo comeco ;END

DESLIG

1) 2) 3) 4) 5)

Copie e cole este programa (entre as barras horizontais) no MPLAB. Salve-o com o nome PROG1.asm em uma pasta que voc tenha acesso. Gere o arquivo HEX (clicando em Project->QuickBuild) Transfira o programa, e veja o resultado. Este programa usa os pinos A1 e B3.. Tente mudar este programa, de forma que ele funcione com a chave A2 e com a sada (led) D0.

Programao Luis Aransegui Aula 2 Parte II - MPLAB

Pgina 2/4

; ; ; ;

Programa 2 : AUTOR : Luis Aransegui Maro DE 2010 Programao Assembly LIST p=16F877 #include "P16F877.INC" equ 0x20 equ 0x21 equ 0x22 equ 0x23 org 0 goto inicio bcf bcf clrf bsf movlw movwf movlw movwf movlw movwf bcf movlw movwf movlw movwf call rlf decfsz goto movlw movwf call rrf decfsz goto goto movlw movwf movlw movwf movlw movwf decfsz goto decfsz goto decfsz goto return STATUS, STATUS, PORTA STATUS, 0x06 ADCON1 0xff TRISA 0x00 TRISD STATUS, 0x01 PORTD 0x07 CONT tempo PORTD,f CONT,f volta1 0x07 CONT tempo PORTD,f CONT,f volta2 comeo 0x03 VAR1 0x3F VAR2 0Xff VAR3 VAR3,F $-1 VAR2,F temp2 VAR1,F temp1 RP0 RP1 RP0 ;inclui ;define ;define ;define ;define biblioteca posio de posio de posio de posio de do PIC a ser usado memria 20H memria 21H memria 22H memria 23H

VAR1 VAR2 VAR3 CONT

;desvia execuo para rtulo INICIO ;desliga bit STATUS,RP0. ;desliga bit STATUS,RP1. escolhe bank0. ;zera todo o PORTA (A0, A1, A2, ...) ;liga bit STATUS,RP0. escolhe bank1 ;carrega 06H (00000110) no acumulador ;move do acum.p/ADCON1 (desl.analogicas) ;carrega FFH (11111111) no acumulador ;move acum.p/TRISA (PORTA como entrada) ;zera todo o acumulador (move zeros) ;mov acum.p/PORTD, todo PORTD como sada ;desliga bit STATUS,RP0 (volta bank0) ;rotulo comeco.Carrega acum. c/ 00000001 ;move do acum. para PORTD ;move 07H para o acum. ;move do acum. para CONT ;chama rotina de tempo ;rotaciona PORTD esquerda ;decrem.CONT e pula prox. Linha se zerar ;desvia para rtulo volta1 ;carrega acum. Com 07H ;move do acum. para CONT ;chama rotina de tempo ;rotaciona PORTD para direita ;decrem.CONT e pula prox. linha se zerar ;desvia para rtulo volta2 ;desvia para comeo ;rotina de tempo. W <- 3 ;VAR1 <- W ;W <- 3Fh (63 em decimal) ;VAR2 <- W ;W <- FFH (255 em decimal) ;VAR3 <- W ;decrementa VAR3 pula prox.linha se zerar ;volta uma linha ;decrementa VAR2 pula prox.linha se zerar ;volta para temp2 ;decrementa VAR1 pula prox.linha se zerar ;volta para temp1 ;retorna da subrotina p/ onde foi chamada

inicio

RP0

comeco

volta1

volta2

tempo temp1 temp2

END ;diretiva de fim do programa ;-------------------------------

Programao Luis Aransegui Aula 2 Parte II - MPLAB

Pgina 3/4

; ; ; ;

Programa 3 : AUTOR : Luis Aransegui FEVEREIro DE 2010 Programao Assembly LIST p=16F877 ; pic usado #include "P16F877.INC" ; inclui a biblioteca do MCu utilizado VAR1 equ 0x20 ;define posio de memria 20H VAR2 equ 0x21 ;define posio de memria 21H VAR3 equ 0x22 ;define posio de memria 22H org 0 ;define endereo de origem na ROM goto inicio ;desvia execuo para rtulo 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 inicializao (prepara a estao) 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 sada bcf TRISB,3 ;desliga TRISB,3 definindo B3 como sada bcf STATUS, RP0 ;desliga bit STATUS,RP0 (volta bank0) ;; ==================================== parte ciclica comeco bsf PORTB,3 ;________________________________________ movlw 0xff ;________________________________________ movwf PORTD ;________________________________________ call tempo ;________________________________________ bcf movlw movwf call movlw movwf call movlw movwf call goto PORTB,3 0x3f PORTD tempo 0x0f PORTD tempo 0x03 PORTD tempo comeco ;________________________________________ ;________________________________________ ;________________________________________ ;________________________________________ ;________________________________________ ;________________________________________ ;________________________________________ ;________________________________________ ;________________________________________ ;________________________________________ ;________________________________________

END ;________________________________________ ;-------------------------------

Programao Luis Aransegui Aula 2 Parte II - MPLAB

Pgina 4/4

Associe os comentrios corretamente com as lacunas do programa anterior. Alguns comentrios sero repetidos vrias vezes.

1) 2) 3) 4) 5) 6) 7) 8) 9) 10)

Chama rotina de tempo Carrega acumulador com 00000011 Carrega acumulador com 00001111 Carrega acumulador com 00111111 Carrega acumulador com 11111111 Move acumulador para PORTD Desvia para rtulo comeco Diretiva de FIM DE PROGRAMA Ativa pino B3 (buzzer) Desativa pino B3 (buzzer)

2) Crie um sequencial de LEDs que siga o seguinte padro de sada no PORTD