Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programas exemplo assembly Como executar o programa ;------------------------------- ; Programa 1 : ; AUTOR : DANIEL CORTELETTI ; FEVEREIRO DE 2003 ; C.T. MECATRONICA SENAI ; ========================== cabecalho padrao para PLCPIC 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 ; Programa 2 : ; AUTOR : DANIEL CORTELETTI ; FEVEREIRO DE 2003 ; 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, 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 ;------------------------------- ; Programa 3 : ; AUTOR : DANIEL CORTELETTI ; FEVEREIRO DE 2003 ; 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, 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 ;________________________________________ ;-------------------------------
Compartilhar