apostila micro control adores picbasic pro lazaro

Upload: carlosaraujo999

Post on 05-Apr-2018

316 views

Category:

Documents


4 download

TRANSCRIPT

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    1/77

    1

    Apostila de Microcontroladores PIC

    Utilizando a linguagem de programao PICBASIC

    Lzaro Aparecido Pires de Camargo

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    2/77

    2

    Sumrio

    1.Introduo .............................................................................................................. 32.Acessando os pinos de I/O ................................................................................... 53.Instruo FOR ... NEXT ......................................................................................... 7

    4.Instruo IF...THEN...ELSE...ENDIF ...................................................................... 95.Instruo WHILE...WEND...................................................................................... 116.Instruo GOSUB ................................................................................................. 137.Exerccios de Reviso - Conceitos Bsicos........................................................ 178.Conectando um LCD em um microcontrolador PIC ........................................... 209.Conectando um display de 7 Segmentos............................................................ 2410.Conversor A/D..................................................................................................... 2711.Comunicao Serial............................................................................................ 3312.Utilizando a memria EEPROM interna do PIC ................................................. 4013.Instruo PWM.................................................................................................... 4314.Controle de um motor de passo utilizando o microcontrolador PIC............... 4415.Utilizando Interrupes ...................................................................................... 5416.Conectando um teclado no PIC ......................................................................... 5817.Mdulo Comparador Analgico ........................................................................ 6218.Microcontrolador PIC 12F675............................................................................. 6619.Resumo do Compilador PicBasic Pro (PBP)..................................................... 70

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    3/77

    3

    1. Introduo

    Microcontrolador PIC 16F877A

    Caractersticas:

    33 pinos de I/O (entradas / sadas) digitais; 8192 (8K) palavras de 14 bits para programa em memria FLASH; 368 bytes de memria RAM e 256 bytes de memria EEPROM interna para dados; 3 timers (2 timers de 8 bits e 1 timer de 16 bits); 1 canal de comunicao USART serial e 1 timer watdog conversor A/D (analgico digital) com 8 canais; frequncia de operao de at 20MHz

    Os 33 pinos de I/O esto organizados em 5 portas:

    PORTARA5 RA4 RA3 RA2 RA1 RA0

    PORTBRB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

    PORTCRC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0

    PORTD

    RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

    PORTERE2 RE1 RE0

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    4/77

    4

    Os pinos de I/O podem ser configurados como entrada ou sada, dependendo dos valores dos registrosTRIS

    TRIS = 1 - pino como entrada (Input)

    TRIS = 0 - pino como sada (Output)

    TRISA configura a PORTA, TRISB configura a PORTB e assim por diante.

    Exemplo: TRISB = %00000011 configura os pinos da PORTB da seguinte forma:

    Exerccio 1 : Como foram configurados os pinos (como entrada ou sada) abaixo:

    a) TRISB = %10010001

    1 0 0 1 0 0 0 1

    Configurao da PORTB:

    entrada saida

    b) TRISC =%11110000

    1 1 1 1 0 0 0 0

    Configurao da PORTC:

    c) TRISD =%00000000

    0 0 0 0 0 0 0 0

    Configurao da PORTC:

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    5/77

    5

    2.Acessando os pinos de I/O

    1) Simule os programas, indicando o valor do PORTB aps executa-los:

    a)TRISB = %00000000

    PORTB.7 = 1

    PORTB.2 = 1

    END

    b)LED1 VAR PORTB.1LED5 VAR PORTB.5LED6 VAR PORTB.6

    TRISB = %00000000

    LED1 = 1LED5 = 1LED6 = 1

    END

    c)LED3 VAR PORTB.3

    TRISB = %00000000

    VOLTA:LED3 = 1

    PAUSE 1

    LED3 = 0

    PAUSE 1

    GOTO VOLTA

    END

    2) Elabore um programa que faa RB4 =1 e RB7=1 e os demais pinos do PORTB iguais a zero:

    3) Elabore um programa em que os pinos RB0 e RB7 ficaram piscando juntos (RB0=1 e RB7=1......RB0= 0 eRB7= 0..)

    4) Elabore um programa em que os pinos RB0 e RB7 ficaram piscando de forma alternada (RB0=1 eRB7=0......RB0= 0 e RB7= 1..)

    PORTB=%

    PORTB=%

    PORTB=%

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    6/77

    6

    5) Elabore um programa que realize as seguintes operaoes:

    a) ativar o pino RB2 durante 2msb) depois ativar o pino RB4 durante 5msc) depois ativar o pino RB5 durante 1ms

    6) Elabore um programa que realize as seguintes operaes:

    a) Definir uma variavel MOTOR conectada ao pino RB2b) Ativar MOTOR durante 4 ms e desligar Motor durante 3ms de forma continua

    7) Elabore um programa que ative a PORTB, da seguinte forma:

    RB7 ON OFF ON ON OFF ONRB6 ON OFF ON ON OFF ONRB5 ON OFF ON ON ON OFFRB4 ON OFF ON ON ON OFFRB3 OFF ON OFF OFF ON OFF

    RB2 OFF ON OFF OFF ON OFFRB1 OFF ON OFF OFF OFF ONRB0 OFF ON OFF OFF OFF ON

    Cada estado da PORTB deve ficar durante 2 ms.

    8) Modifique o exercicio 7, utilizando a PORTD

    9) Elabore um programa para que todos os pinos da PORTB e PORTC fiquem ligando e desligando, a cada 5ms.

    10) Modifique o exercicio 9, incluindo a PORTD

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    7/77

    7

    3. Instruo FOR...NEXT

    FOR conta = inicioTO fim{STEP {-} Inc}{Corpo}

    NEXT {Conta}

    O loop FOR.. NEXT permite que os programas executem um nmero de declaraes (o Corpo) por algumasvezes usando uma varivel como contador.

    Exemplos:

    FOR i = 1 TO 10 Conta de 1 a 10Serout 0, N2400,[#i, ] Envia cada numero para

    Pin0 serialmenteNEXT i Retorna e faz a proxima contagem

    Serout 0,N2400,[10] Envia um avano de linha

    FOR B2 =20 TO 10 STEP -2 Conta de 20 a 10 de 2 em 2

    Serout 0, N2400, [#B2, ]

    NEXT B2 retorna e faz a proxima contagem

    Serout 0,N2400,[10] Envia um avano de linha

    1) Simule os programas, indicando o valor do PORTB aps executa-los:

    a) A VAR BYTE

    TRISB = %00000000

    PORTB = %10000000

    FOR A = 0 TO 3

    PORTB = PORTB >> 1

    PAUSE 2

    NEXT A

    END

    b)A VAR BYTE

    TRISB = %00000000

    PORTB = %10000000

    FOR A = 0 TO 3 STEP 2

    PORTB = PORTB >> 1

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    8/77

    8

    PAUSE 2

    NEXT A

    END

    c) CONTADOR VAR BYTE

    TRISB = %00000000

    FOR CONTADOR = 0 TO 9

    PORTB = CONTADORPAUSE 2

    NEXT CONTADOR

    END

    d)X VAR BYTE

    TRISB = %00000000VOLTA:

    PORTB = %10000000

    FOR X=1 TO 4

    PAUSE 4PORTB = PORTB >> 1

    NEXT X

    GOTO VOLTA

    END

    2) Modifique o programa 1a, para que o FOR seja executado durante 5 vezes.

    3) Modifique o programa 1c , para que a variavel CONTADOR varie de 0 ate 255.

    4) Elabore um programa que faa o pino RB0 ir para 0 durante 1ms e ir para 1 durante 2ms, repetindo istodurante 4 vezes.

    5) Elabore um programa que faa o pino RB4 ir para 1 durante 3ms e ir para 0 durente 1 ms, repetindo istodurante 20 vezes.

    6) Modifique o programa 1d, para que todos os pinos da PORTB, sejam acionados;

    7) Modifique o programa 1d, para que os pinos sejam acionados, no sentido contrario;

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    9/77

    9

    4. Instruo IF...THEN...ELSE...ENDIF

    IF Comp {AND/OR Comp...} THEN RotuloIF Comp{AND/OR Comp} THEN

    DeclaraoELSE

    DeclaraoENDIF

    If...Then avalia os termos da comparao p/ verdadeiro ou falso. Se for verdadeiro, a operao aps o Then executada. Se ele resultar em falso, a operao aps o Then no executada. Comparaes que resultemem 0, so consideradas falsas. Qualquer outro valor considerado verdadeiro. Exemplos:

    If PortA.0 = 0 Then pushd ' Se a pino RA0 for igual' a zero, salte para o

    ' rtulo pushd

    If B0 10 Then ' Se B0 for diferente de 10, faaB0 = B0 + 1 ' incrementa B0B1 = B1 - 1 ' incrementa B1

    Endif

    1) Simule o programa:a)

    CHAVE1 VAR PORTD.0CHAVE2 VAR PORTD.1MOTOR1 VAR PORTB.0MOTOR2 VAR PORTB.1

    TRISD = %00011111

    TRISB = %00000000INICIO:

    IF CHAVE1 = 1 THEN

    MOTOR1 = 1PAUSE 1

    ELSE

    MOTOR1 = 0

    PAUSE 1

    ENDIF

    IF CHAVE2 =1 THEN

    MOTOR2 = 1PAUSE 1

    ELSE

    MOTOR2 = 0

    PAUSE 1

    ENDIF

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    10/77

    10

    GOTO INICIO

    END

    2) Modifique o programa acima para controlar 8 motores conectados ao PORTB da seguinte forma:

    se RD0 = 1 , entao MOTOR1 e MOTOR2 ligadosse RD0 = 0 , entao MOTOR1 e MOTOR2 desligados

    se RD2 = 1, entao MOTOR3 e MOTOR4 ligadosse RD2 = 0, entao MOTOR3 e MOTOR4 desligados

    se RD4 = 1, entao MOTOR5, MOTOR6, MOTOR7, MOTOR8 ligadosse RD4 = 0, entao MOTOR5, MOTOR6, MOTOR7, MOTOR8 desligados

    3) Simule o programa:

    CONTADOR VAR BYTELED VAR PORTC.0TRISB = %00000000OUTPUT LED

    CONTADOR = 0INICIO:

    PAUSE 2

    CONTADOR = CONTADOR + 1

    PORTB=CONTADOR

    IF CONTADOR = 5 THENLED = 1PAUSE 10LED = 0

    ENDIF

    GOTO INICIO

    END

    4) Modifique o programa 3, para que, se a varivel CONTADOR for maior que 8, ligar o pino RC2 durante 5milisegundos.

    5) Modifique o programa 3, para que, se varivel CONTADOR for igual a 3, ligar o pino RC1 durante 3milisegundos.

    6) Modifique o programa 3, para que se a varivel CONTADOR for igual a 10, ligar o pino RC6 durante 4milisegundos . e quando a varivel contador for igual a 50, ligar o pino RC7, durante 8 milisegundos.

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    11/77

    11

    5. Instruo WHILE...WEND

    WHILECondioDeclarao......

    WEND

    Executa repetidamente "Declarao" enquanto (While) a Condio for verdadeira. Exemplo:

    i = 1

    WHILE i

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    12/77

    12

    c)TRISB = %00000000

    WHILE PORTB < 9

    PAUSE 2PORTB = PORTB + 1

    WEND

    END

    d)

    TRISD = %00011111TRISB = %00000000

    WHILE PORTD.3 = 0

    WHILE PORTD.4 = 0

    PORTB = ~PORTBPAUSE 1

    WEND

    WEND

    END

    2) Modifique o programa 1.a, para o Sensor conectado no pino RD2;

    3) Modifique o programa 1.b. para o CONTADOR conectado no pico RD4;

    4) Modifique o programa 1.c para que a PORTB seja incrementada ate o valor 5

    5) Elabore um programa que:

    a) escrever %00000000 no PORTB

    b) enquanto o pino RD7 = 0, escrever %01010101 no PORTB

    6) Elabore um programa , que, enquanto o pino RD5 = 0, fazer o pino RC0 piscar a cada 1 ms.

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    13/77

    13

    6. Instruo GOSUB

    Salta para a subrotina em Rotulo.

    GOSUB beep Executa subrotina chamada beep..............

    beep: High 0 Ligue o Led ligado em Pin0

    Sound 1,[80,10] Bipe no Alto-falanteLow 0 'Desliga o LedReturn Volta p/ rotina principal

    1) Simule os programas abaixo:a)

    LAMPADA1 VAR PORTB.7LAMPADA2 VAR PORTB.0

    LAMPADA3 VAR PORTB.1LAMPADA4 VAR PORTB.2LAMPADA5 VAR PORTB.3

    TRISB = %00000000

    PORTB = %00000000

    LAMPADA2 = 1GOSUB SUBROTINA1

    LAMPADA3 = 1

    GOSUB SUBROTINA1LAMPADA4 = 1GOSUB SUBROTINA1LAMPADA5 = 1

    END

    SUBROTINA1:

    PAUSE 1

    LAMPADA1 = 1PAUSE 2LAMPADA1 = 0PAUSE 1

    RETURN

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    14/77

    14

    b)CONTADOR VAR BYTEPAINEL VAR PORTB

    TRISB = %00000000PORTB = %00000000

    GOSUB DIREITAGOSUB ESQUERDAGOSUB DIREITAGOSUB ESQUERDA

    END

    DIREITA:

    PORTB = %10000000FOR CONTADOR=0 TO 8

    PAUSE 1

    PORTB = PORTB >> 1NEXT CONTADORRETURN

    ESQUERDA:

    PORTB = %00000001FOR CONTADOR=0 TO 8PAUSE 1PORTB = PORTB

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    15/77

    15

    a)ATUADOR1 VAR PORTB.0ATUADOR2 VAR PORTB.3ATUADOR3 VAR PORTB.7

    TRISB = %00000000PORTB = %00000000

    ATUADOR1 = 1

    PAUSE 1ATUADOR1 = 0PAUSE 1

    ATUADOR2 = 1PAUSE 1

    ATUADOR2 = 0PAUSE 1

    ATUADOR3 = 1PAUSE 1

    ATUADOR3 = 0PAUSE 1

    ATUADOR1 = 1

    PAUSE 1ATUADOR1 = 0PAUSE 1

    ATUADOR2 = 1PAUSE 1

    ATUADOR2 = 0PAUSE 1

    ATUADOR3 = 1PAUSE 1

    ATUADOR3 = 0PAUSE 1

    ATUADOR1 = 1

    ATUADOR2 = 1ATUADOR3 = 1END

    b)

    MAQUINA1 VAR PORTB.0MAQUINA2 VAR PORTB.2MAQUINA3 VAR PORTB.4MAQUINA4 VAR PORTB.5MAQUINA5 VAR PORTB.6

    TRISB = %00000000PORTB = %00000000HIGH MAQUINA1PAUSE 1HIGH MAQUINA2PAUSE 1LOW MAQUINA1LOW MAQUINA2

    MAQUINA3 = 1PAUSE 2HIGH MAQUINA1

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    16/77

    16

    PAUSE 1HIGH MAQUINA2PAUSE 1LOW MAQUINA1LOW MAQUINA2

    MAQUINA4 =1PAUSE 3HIGH MAQUINA1PAUSE 1

    HIGH MAQUINA2PAUSE 1LOW MAQUINA1LOW MAQUINA2

    MAQUINA5 = 1

    END

    3) Elabore um programa que chame 4 vezes a subrotina DIREITA e 3 vezes a subrotina ESQUERDA doexercicio 1b, e simule:

    4) Crie uma subrotina que acione os pinos RB0 e RB1 durante 1ms, e chame esta subrotina 5 vezes;

    5) Crie uma subrotina que acione o pino RB7 tres vezes em intervalos de 1ms, e chame esta subrotina 2vezes;

    6) Crie uma subrotina que ative todos os pinos do PORTB durante 2ms e depois desative durane 3ms, echameesta subrotinha 5 vezes;

    7) Quais so as vantagens de se utilizar subrotinas em um programa?

    8) Qual a ultima instruo em uma subrotina?

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    17/77

    17

    PORTB =

    7. Exercicios Reviso - Conceitos Bsicos

    1) Quantos bits possuem as variveis declaradas, abaixo:

    MOTOR_1 VAR BIT

    SERVIDOR VAR BYTE

    SOLENOIDE VAR PORTB.6

    RELE VAR PORTA.2

    ELETRO VAR WORD

    2) Classifique as seguintes constantes como Decimal, Binria, Hexadecimal ou Caracteres:

    3) Como esto configurados ospinos das portas (entrada ou sada),com os seguintes valores dosregistros TRIS:

    a) TRISB = %00110001

    b) TRISC = %11100101

    4) Simule os programas abaixo:a)

    LED5 VAR PORTB.5LED7 VAR PORTB.7

    TRISB = %00000000PORTB = %00000000

    LED5 = 1

    LED7 = 1

    END

    b)A VAR BYTE

    TRISB = %00000000PORTB = %10000000

    FOR A = 0 TO 5

    PORTB = PORTB >> 1

    Constante Tipo Constante Tipo45 %11111111

    100 "2007"%00110011 240"TIMAO" $FE$BA %10001111

    RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

    RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    18/77

    18

    PORTB =

    PORTB =

    PAUSE 5NEXT AEND

    c)SENSOR2 VAR PORTD.2ROTOR VAR PORTB.0

    TRISD = %00011111

    TRISB = %00000000

    PORTB = %00000000INICIO:

    IF SENSOR2 = 1 THEN

    ROTOR = 1PAUSE 10

    ELSEROTOR = 0PAUSE 5

    ENDIF

    GOTO INICIO

    END

    d)TEMP VAR PORTD.1LED3 VAR PORTB.3

    TRISD = %00011111TRISB = %00000000PORTB = %00000000

    INICIO:WHILE TEMP = 1

    LED3 = 1WEND

    LED3 = 0

    GOTO INICIOEND

    5) Elabore um programa que faa o pino RB4 = 1 e os demais pinos do PORTB iguais a zero:

    6) Elabore um programa que faa o pino RB2 ir para 0 durante 2 ms e ir para 1 durante 3 ms, repetindo istodurante 8 vezes.

    7) Reescreva o programa abaixo utilizando subrotinas:

    DINAMO VAR PORTB.7MOTOR VAR PORTB.2SENSOR VAR PORTD.0

    ALTOFALANTE VAR PORTB.0

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    19/77

    19

    TRISB = %00000000

    DINAMO = 0MOTOR = 0PAUSE 2DINAMO = 1SOUND ALTOFALANTE,[80,100]DINAMO = 0PAUSE 3

    MOTOR = 1DINAMO = 1SOUND ALTOFALANTE,[80,100]DINAMO = 0PAUSE 1

    MOTOR = 0DINAMO = 1SOUND ALTOFALANTE,[80,100]DINAMO = 0PAUSE 10

    MOTOR = 1END

    8)Simule o programa abaixo:

    LEITOR1 VAR PORTD.1LEITOR2 VAR PORTD.2

    TRISD = %00011111TRISB = %00000000

    INICIO:

    PORTB = %00000000

    WHILE LEITOR1 = 0

    PORTB.5 = 1PORTB.6 = 1PAUSE 1PORTB.5 = 0PORTB.6 = 0PAUSE 1

    WENDPAUSE 1

    PORTB = %00000001PAUSE 1

    GOTO INICIOEND

    9) Reescreva o programa 8, para que a instruo while ocorra quando a varivel leitor2 for igual a 1;

    10) Elabore um programa (utilizando while):

    a) Enquando a PORTA = %00001111, fazer o pino RB0 ligar e desligar em intervalos de 1ms .b) Depois, escrever %11111111 no PORTB

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    20/77

    20

    8. Conectando um LCD em um microcontrolador PIC

    Um LCD um perifrico inteligente que se comunica com o mundo externo atravs de 8 ou 4 bits. semprepreciso iniciar o display, programando-o. Os mdulos LCD so encontrados em diferentes configuraes, porexemplo:

    2 x 16 = 2 linhas por 16 colunas2 x 20 = 2 linhas por 20 colunas4 x 20 = 4 linhas por 20 colunas

    Os pinos de conexo de um modulo LCD so:

    Terminal Smbolo Nome e Funo1 Vss Terra, 0V2 Vdd Alimentao, +5V3 Vo Ajuste da tenso de contraste4 RS Seleo Dados/Controle5 R/W Leitura/Escrita no LCD6 E Enable Habilitao7 D0 D0 bit menos significativo (LCD)8 D1 D19 D2 D2

    10 D3 D311 D4 D412 D5 D513 D6 D614 D7 D7 bit mais significativo (MSB)

    Escrevendo em um LCD utilizando o PIC BASIC PRO

    Para escrever informaes em um mdulo LCD, pode-se utilizar o comando LCDOUT.

    So enviados comandos ao LCD, deve-se escrever $FE, seguido pelo comando desejado. Alguns comandosteis esto listados na tabela a seguir:

    Comando Operao$FE,1 Limpa o display$FE,2 Retorno (inicio da primeira linha)$FE,$0C Cursor desligado

    $FE,$0E Cursor sublinhado ligado$FE,$0F Cursor piscante$FE,$10 Move o cursor uma posio esquerda$FE,$14 Move o cursor uma posio direita$FE,$C0 Move o cursor para o inicio da segunda

    linha$FE,$94 Move o cursor para o inicio da terceira

    linha$FE,$D4 Move o cursor para o inicio da quarta linhaTambem deve-se definir como a conexo do LCD no microcontrolador, utilizando-se comandos DEFINE.

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    21/77

    21

    1) Simule o programa abaixo: (obs. No se esquea de configurar o modulo LCD na simulao)

    MicrocontroladorPIC

    LCD

    RB7

    RB6

    RB5

    RB4

    RB1

    RB0 E

    RS

    D7

    D6

    D5

    D4

    R/W GND

    DEFINE LCD_DREG PORTB ;PORTB conectado nas linhas de dados do LCD

    DEFINE LCD_DBIT 4 ;Define o primeiro pino da PORTB conectado no LCD

    DEFINE LCD_RSREG PORTB ;Define que o pino RS do LCD esta ligado no PORTB

    DEFINE LCD_RSBIT 1 ;Define que o pino RB1 esta ligado no sinal RS do LCD

    DEFINE LCD_EREG PORTB ;Define que o pino E do LCD esta ligado no PORTB

    DEFINE LCD_EBIT 0 ;Define que o pino RB0 esta ligado no sinal E do LCD

    DEFINE LCD_BITS 4 ;Define o modo de comunicao de 4 bits com o LCD

    DEFINE LCD_LINES 2 ;Define display de 2 linhas

    DEFINE LCD_COMMANDUS 2000 ;Define atraso para envio de comandos para o LCD

    DEFINE LCD_DATAUS 50 ;Define atraso para envio de dados para o LCD

    INICIO:

    LCDOUT $FE,1 ;Limpa LCDLCDOUT "OI" ;Escreve "OI" no LCD

    PAUSE 1 ;Espera 1ms

    LCDOUT $FE,$C0 ;Move o cursor para a segunda linhaLCDOUT "GENTE AMIGA" ;Escreve "GENTE AMIGA"

    goto inicio

    end

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    22/77

    22

    2) Modifique o programa 1, para escrever seu nome no LCD;

    3) Simule o programa abaixo:

    DEFINE LCD_DREG PORTB ;PORTB conectado nas linhas de dados do LCD

    DEFINE LCD_DBIT 4 ;Define o primeiro pino da PORTB conectado no LCD

    DEFINE LCD_RSREG PORTB ;Define que o pino RS do LCD esta ligado no PORTB

    DEFINE LCD_RSBIT 1 ;Define que o pino RB1 esta ligado no sinal RS do LCD

    DEFINE LCD_EREG PORTB ;Define que o pino E do LCD esta ligado no PORTB

    DEFINE LCD_EBIT 0 ;Define que o pino RB0 esta ligado no sinal E do LCD

    DEFINE LCD_BITS 4 ;Define o modo de comunicao de 4 bits com o LCD

    DEFINE LCD_LINES 2 ;Define display de 2 linhas

    DEFINE LCD_COMMANDUS 2000 ;Define atraso para envio de comandos para o LCD

    DEFINE LCD_DATAUS 50 ;Define atraso para envio de dados para o LCD

    CONTADOR VAR BYTE

    INICIO:

    LCDOUT $FE,1 ;Limpa LCDLCDOUT "CONTADOR = ",#CONTADOR ;Escreve valor da variavel contador

    CONTADOR = CONTADOR + 1 ;Incrementa variavel contador

    PAUSE 1 ;Espera 1ms

    GOTO INICIO

    END

    4) Modifique o programa do item 3, para contador de 5 em 5;

    5) Mude o tipo da varivel CONTADOR para WORD:

    CONTADOR VAR WORD

    O que ocorre com o programa?

    6) Elabore um program que mostre as seguintes mensagens em um display LCD :

    Se o pino RD0 = 1

    Mensagem : Servidor Ligado

    Se o pino RD0 = 0

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    23/77

    23

    Mensagem : Servidor Desligado

    7) Modifique o programa do item 3, para que quando a contagem chegar em 10, escrever no LCD TESTECONCLUIDO

    8) Elabore um programa que, se os pinos RD7 e RD6 estiverem ligados, deve mostrar a mensagemlampadas ligadas, e se os pinos RD7 e RD6 estiverem desligados, deve mostrar a mensagem lmpadasdesligadas

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    24/77

    24

    9. Conectando um display de 7 Segmentos

    Conectando um display de 7 segmentos no microcontrolador PIC

    Um display de 7 segmentos tem o seguinte aspecto:

    Pode-se conectar um display de 7 segmentos anodo comum ao PIC 16F84 da seguinte forma:

    Number Segments Hex

    0 1100 0000 $C0

    1 1111 1001 $F9

    2 1010 0100 $A4

    3 1011 0000 $B0

    4 1001 1001 $99

    5 1001 0010 $92

    6 1000 0010 $82

    7 1111 1000 $F8

    8 1000 0000 $80

    9 1001 1000 $98

    Confi ura o de um dis la catodo

    Exemplo para escrever O em umdisplay de 7 segmentos anodocomum:

    TRISB = %00000000

    PORTB = %11000000

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    25/77

    25

    1) Para os programas a seguir, considere um display de 7 segmentos tipo anodo comum, conectado aoPORTB do PIC16F84.

    Explique o que faz cada instruo dos programas abaixo, e simule os programas, indicando o que mostradono display de 7 segmentos.

    a)TRISB = %00000000

    VOLTA:

    PORTB = %11000000

    PAUSEUS 1

    PORTB = %11111001

    PAUSEUS 1

    PORTB = %10100100

    PAUSEUS 1

    GOTO VOLTA

    END

    b)

    TRISA = %00011111TRISB = %00000000

    INICIO:

    IF PORTA.4 = 1 THEN

    PORTB = %10011001

    ELSE

    PORTB =%00000000

    ENDIF

    GOTO INICIOEND

    c)SENSOR1 VAR PORTA.1TRISA = %00011111TRISB = %00000000

    VOLTA:PORTB = %00000000

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    26/77

    26

    WHILE SENSOR1 = 1

    PORTB = %11111001

    WEND

    GOTO VOLTA

    END

    d)

    X VAR BYTE

    NUMERO1 VAR BYTE

    TRISB = %00000000PORTB = %00000000

    LOOP:FOR X = 9 TO 0 STEP -1

    GOSUB CONVERTE

    PORTB = NUMERO1

    PAUSE 1

    NEXT X

    GOTO LOOP

    CONVERTE:

    LOOKUP X,[$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$98],NUMERO1

    RETURN

    END

    2) Modifique o programa 1a para mostrar no display os simbolos A, be C.

    3) Modifique o programa 1b , para que quando o pino RA2 = 1, escrever 2 no display, e quando RA2 = 0escrever -.

    4) Modifique o programa 1c, para que enquanto o pino RA1 = 1, mostre H no display.

    5) Modifique o programa 1d, para que mostre os simbolos E,T,E,P,2,0,0,5,E,L

    6) Modifique o programa 1d para escrever seu nome

    7) modifique os programas 1a, 1b, e 1c para que utilize o hardware abaixo, com um display de 7 segmentostipo catodo comum, conectado em um PIC 16F876, e simule.

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    27/77

    27

    10. Conversor A/D

    Leitura de Tenses Analgicas com o PIC

    Em muitas aplicaes, pode ser necessrio realizar a leitura de grandezas analgicas do mundoexterior. Normalmente, utilizam-se sensores especiais para converter a grandeza desejada em um nvel detenso proporcional. Pode-se efetuar a leitura destas tenses por intermdio de um conversoranalgico/digital, cuja funo converter a tenso analgica em um nmero binrio, proporcional tensoanalgica.

    Nos conversores A/D, utiliza-se uma tenso de referncia (normalmente chamada de Vref), que servede fundo de escala para o sinal de sada do conversor, ou seja, as sadas do conversor estaro todas emnvel 1, quando a tenso de entrada do conversor for igual ou maior que a tenso de Vref.

    Para um conversor A/D com resoluo de 10 bits e tenso de referncia de 5V, o valor de cada bit ser:

    Valor de cada bit = 5 / (210 1) = 4,8876mV

    Um resultado igual a 100 (em decimal) , teremos uma tenso de 100 *4,8876mV = 0,48876V

    Para um conversor A/D com resoluo de 8 bits e tenso de referncia de 5V, o valor de cada bit ser:

    Valor de cada bit = 5 / (28 1) = 19,61mV

    Um resultado igual a 100 (em decimal), teremos uma tenso de 100 * 0,01961V = 1,961V

    Modulo conversor A/D do PIC 16F877

    O mdulo conversor A/D do PIC 16F877 tem 8 canais como mostra a figura abaixo:

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    28/77

    28

    Instruo ADCIN ADCIN Canal, Var

    A instruo ADCIN le o "canal" do conversor a/d e armazena o resultado na varivel "Var".

    Antes de ADCIN ser usada, deve-se fazer as seguintes operaes:

    a) Definir como sera feita a converso utilizando "DEFINE"b) o registro TRIS deve ser ajustado, para que o pino utilizado seja configurado como entrada.c) configurar o Registro ADCON1

    Exemplo1: Leitura do canal 0 (RA0):LEITURA VAR BYTE 'define uma varivel de 8 bits

    DEFINE ADC_BITS 8 'ajusta numero de bits do conversor A/DDEFINE ADC_CLOCK 3 'ajusta fonte de clockDEFINE ADC_SAMPLEUS 50 'ajusta o tempo de amostragem em us

    TRISA = %11111111 ' PORTA como entradaTRISB = %00000000 'PORTB como sadaADCON1 = %00000010 'PORTA como entrada analgica

    ADCIN 0,LEITURA ' Le canal 0 (RA0) e armazena na varivel Leitura

    PORTB = LEITURA ' Escreve Leitura no PORTBEND

    As configuraes do registro ADCON1 esto mostradas abaixo:

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    29/77

    29

    O bit 7 de ADCON1 controla se o resultado e justificado para a direita ou para a esquerda, como mostra afigura:

    Resultados de 8 bits, devem ser justificados para a esquerda (ADCON1.7 = 0).

    Resultados de 10 bits, devem ser justificados para a direita (ADCON1.7 = 1).

    Exemplo 2: Leitura do canal 0, mostrando o resultado no PORTD:

    DEFINE ADC_BITS 8 ' ajusta nmero de bits do conversor A/DDEFINE ADC_CLOCK 3 ' ajusta fonte de clockDEFINE ADC_SAMPLESUS 50 ' ajusta o tempo de amostragem em us

    CONVERSOR VAR BYTE

    TRISA = %11111111

    TRISD = %00000000

    ADCON1 = %00000010

    INICIO:

    ADCIN 0,CONVERSOR

    PORTD = CONVERSOR

    PAUSE 1

    GOTO INICIO

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    30/77

    30

    Para os exercicios abaixo, faa os programas para o PIC 16F877, anote os programas e simule.

    1) Modifique o exemplo1, para ler o canal 2 (RA2) e mostrar o resultado no PORTC;

    2) Modifique o exemplo2, para ler o canal 7 (RE2) e mostrar o resultado no PORTB;

    3) Modifique o exemplo 2, para ler o canal 3 e mostrar o resultado no PORTD, e para ler o canal 6 e mostrar oresultado no PORTB;

    4) Explique o que faz cada intruo dos programas abaixo, e simule o programa, indicando o valor do PORTBaps executa-los:

    DEFINE ADC_BITS 10 ' ajusta nmero de bits do conversor A/DDEFINE ADC_CLOCK 3 ' ajusta fonte de clockDEFINE ADC_SAMPLESUS 50 ' ajusta o tempo de amostragem em us

    ADVAL VAR WORD

    TRISA = %11111111

    TRISB = %00000000

    ADCON1 = %10000010

    INICIO:

    ADCIN 0,ADVAL

    IF ADVAL > 200 THEN TESTE2

    PORTB = %00000001

    GOTO INICIO

    TESTE2:

    IF ADVAL > 400 THEN TESTE3

    PORTB = %00000011

    GOTO INICIO

    TESTE3:

    IF ADVAL > 600 THEN TESTE4

    PORTB = %00000111

    GOTO INICIO

    TESTE4:

    IF ADVAL > 800 THEN TESTE5

    PORTB = %00001111

    GOTO INICIO

    TESTE5:

    PORTB = %00011111

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    31/77

    31

    GOTO INICIO

    END

    5) Modifique o programa 4, para o conversor trabalhar com 8 bits;

    6) Explique o que faz cada instruo dos programas abaixo, e simule o programa:

    'Define parametros do display LCD

    DEFINE LCD_DREG PORTDDEFINE LCD_DBIT 4DEFINE LCD_RSREG PORTDDEFINE LCD_RSBIT 0DEFINE LCD_EREG PORTDDEFINE LCD_EBIT 1

    DEFINE LCD_BITS 4DEFINE LCD_LINES 2

    DEFINE LCD_COMMANDUS 2DEFINE LCD_DATAUS 5

    'Define parametros do conversor A/D

    DEFINE ADC_BITS 10 ' ajusta numero de bits do conversor A/DDEFINE ADC_CLOCK 3 ' ajusta fonte de clock (3=rc)DEFINE ADC_SAMPLEUS 50 ' ajusta tempo de amostragem em microssegundos

    LEITURA_AD VAR WORD

    LEITURA_MV VAR WORD

    TRISA = %111111111

    ADCON1 = %10000010

    LCDOUT $FE,1 ' LIMPA DISPLAYLCDOUT "VALOR DO A/D"

    INICIO:

    ADCIN 0,LEITURA_AD

    LEITURA_MV = LEITURA_AD * 5

    LCDOUT $FE,$C0LCDOUT " "LCDOUT $FE,$C0LCDOUT #LEITURA_AD," ",#LEITURA_MV,"mV"PAUSE 2

    GOTO INICIO

    END

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    32/77

    32

    7) Modifique o programa 5 para o conversor A/D trabalhar com 8 bits;

    8)Elabore um programa para ler o canal 1 do conversor A/D, e quando a tenso for maior que 2V, ligar o pinoRB7

    9)Elabore um programa para ler os canais 0 e 3 do conversor A/D, e quando a tenso do canal 0 for maiorque a tenso do canal 3, ligar o pino RC0;

    10) Elaborar um programa para indicar em um display de 7 segmentos a tenso no canal 2 do conversor A/D ,e desenhe o hardware.

    11)Elaborar um programa para mostrar em um display LCD os valores dos canais 0 e 1;

    12)Elaborar um programa para mostrar em um display LCD as seguintes mensagens:a) quando a tenso do canal 4 do a/d for menor que 2V, escrever :"Sinal Baixo"b) quando a tenso do canal 4 for maior ou igual a 2V, escrever:"Sinal Alto"

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    33/77

    33

    11. Comunicao SerialComunicao Serial com o PIC

    possivel realizar a comunicao entre um microcontrolador e um PC atraves da porta serial, utilizando ocircuito de interfae MAX232, como mostrado abaixo:

    A comunicao realizada de forma serial e assincrona, e os sinais tem niveis RS232 como mostra a figura.

    Para se realizar uma comunicao serial utilizando a linguagem PICBASIC, podem ser utilizadas duasinstrues:

    SEROUT Pino,Modo,[item, item, ....] para enviar um ou mais itens ao Pino indicado em formatoassincrono padro usando 8 bits de dados, sem paridade e umstop bit (8N1).

    SERIN Pino,Modo,(qual,qual),(#)item,item,... para receber um ou mais itens no Pino no fomatoassncrono padro usando 8 bits de dados, sem paridade e umstop bit (8N1).

    A opo Modo definida no arquivo MODEDEFS.BAS. Para usa-lo, adicione a linha : INCLUDE"modedefs.bas"

    Modo Baud Rate Estado

    T2400 2400 VerdadeiroT1200 1200 VerdadeiroT9600 9600 VerdadeiroT300 300 VerdadeiroN2400 2400 VerdadeiroN1200 1200 InvertidoN9600 9600 InvertidoN300 300 Invertido

    Um valor numrico (uma variavl ou uma constante) ir enviar o caracter ASCII correspondente:13 - retorno a primeira coluna10 - avano de linha

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    34/77

    34

    Um valor nmerico precedido por um (#) , ir enviar a representao ASCII de seu valor decimalPor exemplo:se W0 =123, entao #W0 (ou #123) enviar : ' 1' , ' 2' , '3' .1) Simule e explique o programa:

    INCLUDE "modedefs.bas"

    DEFINE CHAR_PACING 500

    TX var PORTC.6

    INICIO:

    SEROUT TX,T2400,["Oi pessoal!!!",13,10]GOTO INICIO

    END

    2) Modifique o programa 1, para enviar serialmente, a mensagem "Sou uma pessoa Feliz!!!!".

    3) Modifique o programa 1, para enviar serialmente, a mensagem " Sou um Processador Feliz!!!!", com avelocidade de 9600 bps.

    4) Modifique o programa 1, para enviar serialmente, a mensagem "TIMAO" somente 5 vezes.

    5) Simule e explique o programa:

    INCLUDE "modedefs.bas"

    DEFINE CHAR_PACING 500

    RX var PORTC.7VALOR var BYTE

    TRISB = %00000000

    INICIO:SERIN RX,T2400,VALOR ;aguarda at que o caracter seja recebido

    serialmente; e armazena na variavel VALOR

    PORTB = VALORPAUSE 1GOTO INICIO

    END

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    35/77

    35

    6) Modifique o programa 5, para trabalhar com uma velocidade de 300bps:

    7) Simule e explique o programa:

    INCLUDE "modedefs.bas"

    DEFINE CHAR_PACING 500

    RX var PORTC.7B2 var BYTE

    TRISB = %00000000

    INICIO:SERIN RX,T2400,["A"],B2 ;aguarda at que o caracter "A" seja recebido

    serialmente;e depois armazena o proximo valor recebido na

    variavel B2PORTB = B2PAUSE 1

    GOTO INICIO

    END

    8) Modifique o programa para que aguarde o caracter "W" para depois armazenar o

    proximo valor recebido.

    9) Simule e explique o programa:

    INCLUDE "modedefs.bas"

    DEFINE CHAR_PACING 500

    SAIDA var PORTC.6CONTADOR var BYTE

    TRISB = %00000000CONTADOR = 0

    INICIO:

    PORTB = CONTADORCONTADOR = CONTADOR + 1SEROUT SAIDA,T9600,["contador= ",#CONTADOR, 13, 10]

    PAUSE 1

    GOTO INICIO

    END

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    36/77

    36

    10) Modifique o programa 9, para que a contagem ocorra de 5 em 5 unidades (0...5....10..)

    11) Modifique o programa 9, para que a contagem comee com 200, e decresca de 2 em 2 (200...198....196)

    12) Simule e explique o programa:

    INCLUDE "modedefs.bas"

    DEFINE OSC 4

    CHAVE0 var PORTD.0TX var PORTC.6

    TRISD = %00011111

    VAI:

    IF CHAVE0 = 1 THEN

    SEROUT TX,T2400,["CHAVE0 LIGADA", 13, 10]PAUSE 1

    ELSE

    SEROUT TX,T2400,["CHAVE0 DESLIGADA", 13, 10]PAUSE 1

    ENDIF

    GOTO VAI

    END

    13) Modifique o programa 12, para que :

    a) se CHAVE0 = 1 , enviar serialmente "INICIO DO PROCESSO"b) se CHAVE0 = 0 , enviar serialmente "TERMINO DO PROCESSO"

    14) Modifique o programa 12, para que leia o estado de 3 sensores e enviar serialmente uma mensagemrelatando o estado de cada sensor, se esta ligado ou desligado.

    15) Simule e explique o programa:

    INCLUDE "modedefs.bas"

    RX var PORTC.7TX VAR PORTC.6B0 var BYTE

    INICIO:SERIN RX,T2400,B0

    IF (B0 < "a") or (B0 > "z") then IMPRIMA

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    37/77

    37

    B0 = B0 - $20

    IMPRIMA:SEROUT TX,T2400,[B0]

    GOTO INICIO

    END

    16) Modifique o programa 15, para que caso seja recebido o caracter "q" ou "s", envie a mensagem"TERMINO" se for recebido outro caracter, enviar a mensagem "PROCESSANDO".

    17) Simule e explique o programa:

    Include "modedefs.bas"

    SO VAR PORTB.6

    B0 var byteB1 var byte

    loop: For B0 = 3 To 1 Step -1For B1 = 0 To 10 Step B0

    Serout SO,T2400,[#B1," "]Next B1

    Serout SO,T2400,[13,10]Pause 1

    Next B0

    Goto loop

    18) Modifique o programa 17 para efetuar a contagem ate 20

    19) Simule e explique o programa:

    include "modedefs.bas"

    B10 VAR BYTETX VAR PORTC.0

    loop1:

    Pause 1B10 = B10 + 1

    Select Case B10

    Case 1SEROUT TX,T2400,["loop1 case 1",10,13]

    Case 2SEROUT TX,T2400,["loop1 case 2",10,13]

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    38/77

    38

    Case 4SEROUT TX,T2400,["loop1 case 4",10,13]

    Case is >5ClearSEROUT TX,T2400,[10,13]GoTo loop2

    Case is >2

    SEROUT TX,T2400,["loop1 case 3,5",10,13]

    END SELECTGoTo loop1

    loop2: Pause 1B10 = B10 + 1Select Case B10

    Case 1

    SEROUT TX,T2400,["loop2 case 1",10,13]

    Case 2SEROUT TX,T2400,["loop2 case 2",10,13]

    Case 4SEROUT TX,T2400,["loop2 case 4",10,13]

    Case is

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    39/77

    39

    Write B1,B2Next B1

    For B1 = 0 To B0Read B1,B2Serout SO,T2400,[#B2," "]

    Next B1Serout SO,T2400,[13,10,13,10]Goto loop

    21) Simule e explique o programa:

    include "modedefs.bas"DEFINE CHAR_PACING 500SO VAR PORTB.1SI VAR PORTB.0B0 var byteB1 var byteloop:

    Serin SI,T2400,B0B1 = 255

    Lookdown B0,["0123456789ABCDEF"],B1If B1 = 255 Then loopSerout SO,T2400,[#B1,13,10]Goto loop

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    40/77

    40

    12. Utilizando a memria EEPROM interna do PIC

    Utilizando a memria EEPROM interna do PIC

    O PIC 16F877 possui uma memria EEPROM (Electrically Erasable Programmable Read-OnlyMemory) que pode ser utilizada como memria de dados. Sua principal vantagem em relao a RAM esta nofato de no perder as informaes com a falta de alimentao.

    Sua principal utilizao esta nos sistemas que devem memorizar dados como o ltimo nmero discado

    em telefones, ajustes de som, cor, brilho, e outros em televisores, memria das estaes nos rdios, cdigospersonalizados de acesso, entre vrias outras possibilidades.

    No PICBASIC, existem duas instrues para acessar a memria EEPROM interna:

    WRITE endereo, valor ; escreve um valor na memria EEPROM interna do PIC

    READ endereo, VAR ; l o contedo de um endereo da EEPROM interna e armazenaem VAR

    1) Simule e explique o programa, quais endereos da EEPROM so acessados, e que valores so escritos?

    VAR1 VAR BYTE ;define varivel VAR1TRISB = %00000000 ;configura PORTB como sada

    VAR1 = 09

    WRITE $20,VAR1 ;escreve o contedo de VAR1 no endereo 20h da;EEPROM

    PAUSE 1 ;espera 1ms

    READ $20,PORTB ;le o contedo do endereo 20h da memria;EEPROM, e transfere para PORTB

    END ;fim do programa

    2) Simule e explique o programa, quais endereos da EEPROM so acessados, e que valores so escritos?

    B0 VAR BYTEB1 VAR BYTEB2 VAR BYTE

    TRISB = %00000000

    INICIO:

    WRITE 0,5WRITE 1,6WRITE 2,7

    READ 0,B0READ 1,B1READ 2,B2

    PORTB = B0PAUSE 1PORTB = B1PAUSE 1PORTB = B2

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    41/77

    41

    WRITE 0,0WRITE 1,0WRITE 2,0PAUSE 1

    GOTO INICIOEND

    3) Elabore um programa para escrever os nmeros de 20 a 25 na memria EEPROM do PIC;

    4) Elabore um programa para armazenar seu pronturio, a data do seu nascimento a partir do endereo 10hda memria EEPROM do PIC;

    5) Elabore um programa :

    a) Primeiro, armazene o valor 01233438 na memria EEPROM;b) Depois mostre cada digito em um display LCD

    6) Modifique o programa 5, para a data de hoje, completa (dd/mm/aaaa);

    7) Elabore um programa para armazenar seu nome completo na memria EEPROM e depois mostre nodisplay de LCD;

    8) Elabore um programa para armazenar os nmeros de 0 a 100 na memria EEPROM e depois leia estesvalores e transmita serialmente por um pino do PIC;

    9) Elabore um programa para preencher toda a memria EEPROM com o valor 01h;

    10) Simule o programa abaixo e explique seu funcionamento:

    VAR1 VAR BYTE

    TRISB = %00000000

    INICIO:

    RANDOM VAR1

    WRITE 0,VAR1

    PORTB = var1

    GOTO INICIO

    END

    11) Pesquise quantas posies de memria tem o PIC 16F877 e elabore um programa para escrever AAh emtodos os endereos da EEPROM;

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    42/77

    42

    12) Elabore um programa para escrever valores entre 0 e 255 aleatoriamente na memria EEPROM em todosos endereos;

    13) Elabore um programa para para preencher 10 posies de memria EEPROM com valores aleatrios, edepois, leia estes endereos e escreva no PORTB;

    14) Elabore um programa:

    a) Se Pino RD1 = 1

    preencher a memria EEPROM com 02h, e escrever no LCD , MEMORIA OKb) Se Pino RD1 = 0

    preencher a memria EEPROM com 20h, e escrever no LCD, MEMORIA RUIM

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    43/77

    43

    13. Instruo PWM

    O comando PWM tem a seguitnte sintaxe: PWMPin. Duty, Cycle

    Este comando usado para gerar uma seqncia de pulsos modulados em largura (Pulse WidthModulation),em um pino de sada Pin. Cada ciclo de modulao consiste de 256 pontos. O Duty Cycle paracada ciclo de PWM inicia em 0 (0%) at 255 (100%). Este ciclo de PWM repetido quantas vezes for definidono parmetro Cycle.

    O tempo alcanado com o uso do parmetro Cycle do comando PWM dependente da freqncia dooscilador utilizado

    Oscilador Durao (Cycle)4MHz ~ 5ms20MHz ~ 1ms

    1) Simule o programa, e verifique o estado do pino desada do PWM com o osciloscpio do simulador:

    SAIDA VAR PORTB.7

    CICLO_DE_TRABALHO VAR BYTE

    OUTPUT SAIDA

    CICLO_DE_TRABALHO = 10

    PWM SAIDA,CICLO_DE_TRABALHO,1 ;Produz uma seguencia de pulsos PWM, comduty ;cycle definido pela varivelCICLO_DE_TRABALHO, ;no PINO RB7, por 1 ciclo

    END

    2) Modifique o programa 1, utilizando os seguintes valores para a varivel CICLO_DE_TRABALHO:

    CICLO_DE_TRABALHO FORMA DE ONDA1050100127150200255

    3) Modifique o programa 1, para que a sada do PWM seja o pino RD0;

    4) Elabore um programa que:

    Se pino RC0 = 1 e RC1 = 0 e RC2 = 0, PWM de 20% no pino RB3

    Se pino RC1 = 1 e RC0 =0 e RC2 = 0, PWM de 50% no pino RB4

    Se pino RC2 = 1 e RC0= 0 e RC1 = 0, PWM de 80% no pino RB6

    5) Elabore um programa para gerar um PWM no pino RD1, que tenha tenha um ciclo de trabalho de 0% a100%6) Elabore um programa para gerar um PWM no pino RB2, que tenha um ciclo de trabalho de 60% a 0%.

    7) Altere o programa 5, para mostrar em um LCD, qual o ciclo de trabalho do PWM

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    44/77

    44

    14. Controle de um motor de passo utilizando o microcontrolador PIC

    Motores de passo so dispositivos mecnicos eletro-magnticos que podem ser controlados digitalmenteatravs de um hardware especifico ou atravs de softwares. So usados em equipamentos onde a preciso um fator muito importante. So usados em larga escala em impressoras, plotters, scanners, drivers dedisquetes, discos rgidos e muitos outros aparelhos.Para realizar o controle de um motor de passo preciso energizar as bobinas do motor de forma correta, parase obter o movimento desejado.Pode-se controlar o motor de 3 formas:

    a) Passo Completo 1 (Full-step)

    # Somente uma bobina energizada a cada passo;#Menor torque;#Pouco consumo de energia;# Maior velocidade.

    b) Passo Completo 2 (Full-step)

    # Duas bobinas so energizadas a cad passo;# Maior torque;#Consume mais energia que o passo completo 1;# Mairo velocidade.

    No do passo Bobina DecimalA B C D

    1 1 1 0 0 122 0 1 1 0 63 0 0 1 1 34 1 0 0 1 9

    c) Meio passo (Half-step)

    # A combinao do passo completo 1 e do passo completo 2 gera um efeito de meio passo;# Consome mais energia que os passos anteriores;# muito mais preciso que os passos anteriores;# O torque prximo ao do Passo completo 2;# A velocidade menor que as dos passos anteriores.

    No do passo Bobina DecimalA B C D

    1 1 0 0 0 82 1 1 0 0 123 0 1 0 0 44 0 1 1 0 65 0 0 1 0 26 0 0 1 1 37 0 0 0 1 18 1 0 0 1 9

    No do passo Bobina DecimalA B C D

    1 1 0 0 0 82 0 1 0 0 4

    3 0 0 1 0 24 0 0 0 1 1

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    45/77

    45

    Exemplo 1 : Controle de um motor de passo com Passo Completo 1 (Full step):

    ; Controle de um motor de passo; PIC 16F877; Passo Completo 1 (Full step); Motor ligado no PORTC; Bobina A - pino RC3; Bobina B - pino RC2; Bobina C - pino RC1

    ; Bobina D - pino RC0

    TRISC = %00000000 ;PORTC como saida

    INICIO:

    PORTC = %00001000 ;passo 1

    PAUSE 1

    PORTC = %00000100 ;passo 2

    PAUSE 1

    PORTC = %00000010 ;passo 3

    PAUSE 1

    PORTC = %00000001 ;passo 4

    PAUSE 1

    GOTO INICIO

    END

    Passo 1

    Passo 2

    Passo 3

    Passo 4

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    46/77

    46

    Exemplo 2 : Controle de um motor de passo com Passo Completo 2 (Full step):

    ; Controle de um motor de passo; Passo Completo 2 (Full-step); PIC 16F877; Motor ligado no PORTC; Bobina A - pino RC3; Bobina B - pino RC2; Bobina C - pino RC1

    ; Bobina D - pino RC0

    TRISC = %00000000 ;PORTC como saida

    INICIO:

    PORTC = %00001100 ;passo 1

    pause 1

    PORTC = %00000110 ;passo 2

    PAUSE 1

    PORTC = %00000011 ;passo 3

    PAUSE 1

    PORTC = %00001001 ;passo 4

    PAUSE 1

    GOTO INICIO

    END

    Exemplo 3 : Controle de um motor de passo com Meio passo (Half step):

    ; Controle de um motor de passo; Meio passo (Half-step); PIC 16F877

    Passo 1

    Passo 2

    Passo 3

    Passo 4

    Passo 1

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    47/77

    47

    ; Motor ligado no PORTC; Bobina A - pino RC3; Bobina B - pino RC2; Bobina C - pino RC1; Bobina D - pino RC0

    TRISC = %00000000 ;PORTC saida

    PORTC = %00000000 ;limpa PORTC

    inicio:

    PORTC = %00001000 ;passo 1

    pause 1

    PORTC = %00001100 ;passo 2

    PAUSE 1

    PORTC = %00000100 ;passo 3

    PAUSE 1

    PORTC = %00000110 ;passo 4

    PAUSE 1

    PORTC = %00000010 ;passo 5

    PAUSE 1

    PORTC = %00000011 ;passo 6

    PAUSE 1

    PORTC = %00000001 ;passo 7

    PAUSE 1

    PORTC = %00001001 ;passo 8

    PAUSE 1

    GOTO INICIO

    END

    Passo 2

    Passo 3

    Passo 4

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    48/77

    48

    A direo (esquerda/direita) de um motor de passo

    Para mudar a direo de rotao do motor, simplesmente inverta a seqncia dos passos conforme osexemplos abaixo:

    Passo completo 1 (direita)No do passo Bobina Decimal

    A B C D1 1 0 0 0 8

    2 0 1 0 0 43 0 0 1 0 24 0 0 0 1 1

    Passo completo 1 (esquerda)No do passo Bobina Decimal

    A B C D1 0 0 0 1 12 0 0 1 0 23 0 1 0 0 44 1 0 0 0 8

    Exemplo 4 : Direita - Esquerda; Controle de um motor de passo PIC 16F877; direita/esquerda (Full-step); Motor ligado no PORTC; Bobina A - pino RC3; Bobina B - pino RC2; Bobina C - pino RC1; Bobina D - pino RC0

    TRISC = %00000000 ;PORTC como saida

    INICIO:PORTC = %00001000 ;passo 1PAUSE 1PORTC = %00000100 ;passo 2PAUSE 1PORTC = %00000010 ;passo 3PAUSE 1PORTC = %00000001 ;passo 4PAUSE 5PORTC = %00000001PAUSE 1PORTC = %00000010

    PAUSE 1PORTC = %00000100PAUSE 1PORTC = %00001000PAUSE 1GOTO INICIOEND

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    49/77

    49

    Construindo o hardware para conectar o motor de passo no microcontrolador

    Para acionarmos um motor de passo, precisamos de um hardware especifico,chamado driver:

    MotorMicrocontrolador Driver

    Pode-se construir drivers utilizando transistores de potncia como o BD135, TIP 31, etc. A maneiramais fcil adquirir drivers prontos, como o ULN2003 ou ULN2803, que nada mais so que arrays detransistores Darlington que podem controlar correntes de at 500mA, que esto em forma de circuitosintegrados prontos para serem usados em interfaces que necessitem controlar motores de passos,solenides, reles, motores DC e muitos outros dispositivos.

    O CI ULN2003 tem 7 entradas que podem controlar at 7 saidas.

    O CI ULN2803 tem 8 entradas que podem controlar at 8 sadas. Com ele podemos controlar ate 2 motores

    de passo simultaneamente.

    Exerccios:

    1) Modifique o exemplo 1, para que o motor de passo seja acionado pela PORTB:

    Bobina A : Pino RB7Bobina B: Pino RB6

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    50/77

    50

    Bobina C: Pino RB5Bobina D: Pino RB4

    2) Modifique o exemplo 2, para que o motor de passo, realize 2 rotaes completas

    3)Modifique o exemplo 3, para que o motor de passo realize 3 rotaes completas

    4) Modifique o exemplo 4, para que o motor de passo realize:

    a) 2 rotaes para a direita, depois,b) 3 rotaes para a esquerda, depois,c) 1 rotao para a direita

    5) Simule o programa abaixo e explique o que faz, quantas vezes o motor completa uma rotao completa?

    ; Controle de um motor de passo; Passo Completo 1 (Full-step); PIC 16F877; Motor ligado no PORTC; Bobina A - pino RC3

    ; Bobina B - pino RC2; Bobina C - pino RC1; Bobina D - pino RC0

    CONTADOR VAR BYTE

    TRISC = %00000000 ;PORTC como saida

    for CONTADOR =0 TO 2 STEP 1

    PORTC = %00001000 ;passo 1pause 1

    PORTC = %00000100 ;passo 2PAUSE 1PORTC = %00000010 ;passo 3PAUSE 1PORTC = %00000001 ;passo 4PAUSE 1

    NEXT CONTADOR

    END

    6) Modifique o exemplo 5, para que o programa realize 9 rotaes completas7) Modifique o exemplo 5 para que o programa realize 10 rotaes para a direita e 10 rotaes para esquerda

    8) Modifique o exemplo 5, para que o programa realize 20 rotaes (utilize a instruo FOR);

    9) Simule o programa abaixo, e explique:

    ; Controle de um motor de passo; Passo Completo 1 (Full-step); PIC 16F877 - Motor ligado no PORTC; Bobina A - pino RC3; Bobina B - pino RC2; Bobina C - pino RC1

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    51/77

    51

    ; Bobina D - pino RC0

    CHAVE0 VAR PORTB.0

    TRISB = %11111111 ;PORTB como entradaTRISC = %00000000 ;PORTC como saida

    INICIO:

    if CHAVE0 = 1 THEN

    PORTC = %00001000 ;passo 1PAUSE 1PORTC = %00000100 ;passo 2PAUSE 1PORTC = %00000010 ;passo 3PAUSE 1PORTC = %00000001 ;passo 4PAUSE 1

    ELSEPORTC = %00000001 ;passo 1

    pause 1PORTC = %00000010 ;passo 2PAUSE 1PORTC = %00000100 ;passo 3PAUSE 1PORTC = %00001000 ;passo 4PAUSE 1

    ENDIF

    GOTO INICIO

    END

    10) Modifique o exemplo 9, para que:

    a) Se o PINO RB7 = 1, girar para a esquerdab) Se o PINO RB6 = 1, girar para a direita11) Simule o programa abaixo, e explique:

    X VAR BYTENUMERO1 VAR BYTE

    TRISB = %00000000TRISC = %00000000

    PORTB = %00000000

    FOR X = 0 TO 9 STEP 1

    GOSUB CONVERTEPORTB = NUMERO1

    PORTC = %00001000 ;passo 1pause 1PORTC = %00000100 ;passo 2PAUSE 1PORTC = %00000010 ;passo 3

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    52/77

    52

    PAUSE 1PORTC = %00000001 ;passo 4PAUSE 1

    NEXT X

    CONVERTE:

    LOOKUP X,[$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$98],NUMERO1

    RETURN

    END

    12) Modifique o exemplo 11, para que o motor gire 5 vezes apenas

    13) Modifique o exemplo 11, para que o motor gire no sentido contrario (esquerda)

    14) Elabore um programa que gire cinco vezes para a direita e 5 vezes para a esquerda, e enquanto o motorestiver girando para a direita mostra d no display e mostrar e, enquanto o motor estiver girando para aesquerda.15) Simule o programa abaixo e explique:

    DEFINE LCD_DREG PORTBDEFINE LCD_DBIT 0DEFINE LCD_RSREG PORTBDEFINE LCD_RSBIT 6DEFINE LCD_EREG PORTBDEFINE LCD_EBIT 7

    DEFINE LCD_BITS 4DEFINE LCD_LINES 2DEFINE LCD_COMMANDUS 2000DEFINE LCD_DATAUS 50

    CONTADOR VAR BYTE

    TRISC = %00000000 ;PORTC saidaPORTC = %00000000 ;limpa PORTC

    Lcdout $fe, 1Lcdout "MOTOR DE PASSO"

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    53/77

    53

    FOR CONTADOR = 0 to 20 step 1

    LCDOUT $FE,$C0LCDOUT "ROTACAO = ", #CONTADOR

    PORTC = %00001000 ;passo 1pause 1PORTC = %00001100 ;passo 2

    PAUSE 1PORTC = %00000100 ;passo 3PAUSE 1PORTC = %00000110 ;passo 4PAUSE 1PORTC = %00000010 ;passo 5PAUSE 1PORTC = %00000011 ;passo 6PAUSE 1PORTC = %00000001 ;passo 7PAUSE 1PORTC = %00001001 ;passo 8

    PAUSE 1

    NEXT CONTADOR

    END

    16) Modifique o exemplo 15, para que o motor gire 50 vezes

    17) Modifique o exemplo 15, para que o motor gire 1000 vezes para a direita e 1000 vezes para a esquerda.Mostrar no LCD Rot. Para Dir =. Rot . para Esq=

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    54/77

    54

    15. Utilizando Interrupes

    A interrupo uma tcnica particular do PIC que permite interceptar eventos externos ao programaem execuo, interrompe momentaneamente a operao do programa em andamento, controla oevento com uma subrotina apropriada e retorna para a execuo do programa.

    O PIC16F84 contm 4 tipos de interrupo:

    1. A troca de estado em RB0 (External interrupt RB0/INT pin).2. Ao final da contagem do registro TMR0 (TMR0 overflow interrupt).

    3. A troca de estado sobre uma das linhas de RB4 a RB7 (PORTB change interrupts).

    4. Ao final da escrita sobre um endereo da EEPROM (EEPROM write complete interrupt).

    Habilitando interrupes

    A interrupo de qualquer um destes eventos pode ser conseguido habilitando ou desabilitando bits doregistro INTCON:

    1. INTE (bit 4) se este bit estiver em 1 habilitar a interrupo de troca de estado sobre a linha RB02. T0IE (bit 5) se este bit estiver em 1 habilitar a interrupo de final de contagem do registro TMR0

    3. RBIE (bit 3) se este bit estiver em 1 habilitar a interrupo de troca de estado sobre uma das linhasde RB4 a RB7

    4. EEIE (bit 6) se este bit estiver em 1 habilitar a interrupo de final de escrita sobre um endereo daEEPROM

    5. GIE (bit 7) este bit tem que estar em 1 para habilitar qualquer interrupo (Global INterrupt Enable bit)

    Dado que qualquer interrupo gera uma chamada do endereo 04H, no registro INTCON estar qualinterrupo foi gerada.

    No registro INTCON se tem:

    1. INTF (bit 1) Se vale 1 a interrupo um estado gerado na troca de estado em RB0.

    2. T0IF (bit 2) Se vale 1 a interrupo um estado gerado no termino da contagem do timer TMR0.

    3. RBIF (bit 0) Se vale 1 a interrupo um estado gerado na troca de estado de uma dos pinos RB4 aRB7.

    Obs.: Como no tem um bit especificando interrupo de fim de esrita na EEPROM, a rotina para tratar essainterrupo deve verificar se os outros bits de sinalizao de interrupo esto em 0.

    A rotina de interrupo deve zerar o bit sinalizador aps tratar a interrupo.

    Quando for gerada uma interrupo o PIC desabilita automatimamente o bit GIE (global Interrupt Enable) doregistro INTECON de modo a desbilitar todas as interrupes restantes. Para poder retornar ao programaprincipal e reinicializar em 1 este bit deve-se utilisar a instruo em assembler RETFIE.

    Mais informaes:

    http://www.dpi.ufv.br/disciplinas/inf251/files/processadores/cursopic/node1.html

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    55/77

    55

    Utilizando interrupes com o PICBASIC

    Para se utilizar interrupes com o PICBASIC deve-se utilizar a seguinte estrutura:

    ON INTERRUPT GOTO minha_interrupcao rotina de atendimento de interrupo minha_interrupo

    INTCON = %10010000 habilita interrupo no pino RB0

    .....

    DISABLE desabilita interrupominha_interrupcao:

    LED = 1RESUME retorna para o programa principalENABLE habilita interrupes

    Interrupo utilizando o pino RBO/INT

    1) Simule o programa e explique seu funcionamento:

    CHAVE0 VAR PORTB.0

    LED7 VAR PORTB.7

    TRISB = %00000001 'configura RB0 como entrada

    ON INTERRUPT GOTO INTERRUPCAO 'define rotina de interrupao

    INTCON = %10010000 'habilita interrupao INTE

    OPTION_REG.6 = 1 'na subida do sinal

    LOOP:

    LED7 = 1 'faz pino RB7 = 1

    GOTO LOOP ' para sempre

    'subrotina de atendimento de interrupao

    DISABLE 'desabilita interrupcoes

    INTERRUPCAO:

    'caso ocorra uma interrupcao

    LED7 = 0 'faz RB7 =0

    PAUSE 10 ' espera 10ms

    INTCON.1 = 0 'limpa flag de interrupcao

    RESUME

    ENABLE 'retorna para o programa principal

    END

    Interrupo utilizando a mudana dos pinos RB4-RB7

    2) Simule o programa e explique seu funcionamento:

    CHAVE7 VAR PORTB.7

    LED1 VAR PORTB.1

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    56/77

    56

    TRISB = %11110001 'configura RB7-RB4 como entradas

    ON INTERRUPT GOTO INTERRUPCAO 'define rotina de interrupao

    INTCON = %10001000 'habilita interrupao RB4-RB7

    LOOP:

    LED1 = 1 'faz pino RB1 = 1

    GOTO LOOP ' para sempre'subrotina de atendimento de interrupao

    DISABLE 'desabilita interrupcoes

    INTERRUPCAO:

    'caso ocorra uma interrupcao

    LED1 = 0 'faz RB1 =0

    PAUSE 10 ' espera 10ms

    INTCON.0 = 0 'limpa flag de interrupcao

    RESUME

    ENABLE 'retorna para o programa principal

    END

    Interrupo como o overflow do TIMER 0 (pino RA4/T0CK)

    3) Simule o programa abaixo e explique seu funcionamento:

    CHAVE0 VAR PORTB.0

    LED1 VAR PORTB.1

    TRISB = %00000000 'configura PORTB como saida

    ON INTERRUPT GOTO INTERRUPCAO 'define rotina de interrupao

    TMR0 = 250OPTION_REG.5 = 1 'na subida do sinal

    INTCON = %10100000 'habilita interrupao TOIE

    LOOP:

    LED1 = 1 'faz pino RB1 = 1

    GOTO LOOP ' para sempre

    'subrotina de atendimento de interrupao

    DISABLE 'desabilita interrupcoes

    INTERRUPCAO:

    'caso ocorra uma interrupcao

    LED1 = 0 'faz RB1 =0

    PAUSE 2 ' espera 10ms

    INTCON.2 = 0 'limpa flag de interrupcao

    TMR0 = 250

    RESUME

    ENABLE 'retorna para o programa principal

    END

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    57/77

    57

    4) Modifique o programa 1 para que a interrupo ocorra na descida do sinal no pino RB0/INT, anote oprograma e simule.

    5) Modifique o programa 1 para que quando ocorra a interrupo, faa os pinos RA1=1 e RA2=1 durante1ms

    6) Modifique o programa 2 para que quando ocorra a interrupo, faa o pino RA3=1 durante 2ms.

    7) Modifique o programa 3 para que ocorra a interrupo quando forem aplicados 10 pulsos no pino

    RA4/T0CKI

    8) Modifique o programa 1 para que a cada interrupo, ocorra uma contagem das interrupes em umdisplay de 7 segmentos

    9) Modifique o programa 2 para que a cada interrupo, ocorra uma contagem das interrupes em umdisplay LCD

    10) Modifique o program 3 para que ocorra uma interrupo quando forem aplicados 8 pulsos no pinoRA4/T0CKI, e a cada interrupo, mostrar a mensagem em um display de LCD, "contagem terminada"

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    58/77

    58

    16. Conectando um teclado no PIC1) Simule o programa abaixo:

    ; layout do teclado conectado na PORTB

    ;B4----[ 1 ]---[ 2 ]---[ 3 ]; | | |;B5----[ 4 ]---[ 5 ]---[ 6 ]; | | |;B6----[ 7 ]---[ 8 ]---[ 9 ]; | | |;B7----[ * ]---[ 0 ]---[ # ]; | | |; | | |; B3 B2 B1

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    59/77

    59

    TECLA VAR BYTENUMERO1 VAR BYTEX VAR BYTE

    TRISB=%11110000TRISC=%00000000

    PORTC=%00000000

    LOOP:

    GOSUB LE_TECLADO

    X = TECLA

    GOSUB CONVERTE

    PORTC = NUMERO1

    PAUSE 1

    GOTO LOOP

    END

    CONVERTE:

    IF X = 255 THEN

    X = 10

    ENDIF

    LOOKUP X,[$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$98,$FF],NUMERO1

    RETURN

    LE_TECLADO:

    PORTB=%00001000

    IF PORTB.4 = 1 THEN TECLA_1

    IF PORTB.5 = 1 THEN TECLA_4

    IF PORTB.6 = 1 THEN TECLA_7

    IF PORTB.7 = 1 THEN TECLA_ASTERISCO

    PORTB=%00000100

    IF PORTB.4 = 1 THEN TECLA_2

    IF PORTB.5 = 1 THEN TECLA_5

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    60/77

    60

    IF PORTB.6 = 1 THEN TECLA_8

    IF PORTB.7 = 1 THEN TECLA_0

    PORTB=%00000010

    IF PORTB.4 = 1 THEN TECLA_3

    IF PORTB.5 = 1 THEN TECLA_6

    IF PORTB.6 = 1 THEN TECLA_9

    IF PORTB.7 = 1 THEN TECLA_SUSTENIDO

    TECLA = 255

    LE_TECLADO_FINAL:

    RETURN

    TECLA_1:

    TECLA = 1GOTO LE_TECLADO_FINAL

    TECLA_2:

    TECLA = 2GOTO LE_TECLADO_FINAL

    TECLA_3:

    TECLA = 3GOTO LE_TECLADO_FINAL

    TECLA_4:

    TECLA = 4GOTO LE_TECLADO_FINAL

    TECLA_5:

    TECLA = 5GOTO LE_TECLADO_FINAL

    TECLA_6:

    TECLA = 6GOTO LE_TECLADO_FINAL

    TECLA_7:

    TECLA = 7GOTO LE_TECLADO_FINAL

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    61/77

    61

    TECLA_8:

    TECLA = 8GOTO LE_TECLADO_FINAL

    TECLA_9:

    TECLA = 9

    GOTO LE_TECLADO_FINAL

    TECLA_ASTERISCO:

    TECLA = 16GOTO LE_TECLADO_FINAL

    TECLA_0:

    TECLA = 0GOTO LE_TECLADO_FINAL

    TECLA_SUSTENIDO:TECLA = 17GOTO LE_TECLADO_FINAL

    2) Modifique o programa 1, para o seguinte layout de teclado:

    ; layout do teclado conectado na PORTB

    ;B4----[ 7 ]---[ 8 ]---[ 9 ]; | | |;B5----[ 4 ]---[ 5 ]---[ 6 ]; | | |

    ;B6----[ 1 ]---[ 2 ]---[ 3 ]; | | |;B7----[ 0 ]---[ d ]---[ e ]; | | |; | | |; B3 B2 B1

    3) Modifique o programa 1, para o seguinte layout de teclado:

    ;B4----[ 1 ]---[ 2 ]---[ 3 ]---[ a ]; | | |;B5----[ 4 ]---[ 5 ]---[ 6 ]---[ b ]

    ; | | |;B6----[ 7 ]---[ 8 ]---[ 9 ]---[ c ]; | | |;B7----[ * ]---[ 0 ]---[ # ]---[ d ]; | | | |; | | | |; B3 B2 B1 B0

    4) Modifique o programa 1, para mostrar em display LCD, as teclas pressionadas.

    5) Modifique o programa 1, para enviar , serialmente, as teclas pressionadas.

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    62/77

    62

    17. Mdulo Comparador Analgico

    1) Simule e explique o funcionamento do programa:

    ; modulo comparador - modo 5ENTRADA1 var PORTA.1 ;entrada VIN-ENTRADA2 VAR PORTA.2 ;entrada VIN+SAIDA_COMP2 var CMCON.7 ;C2OUT

    LED0 VAR PORTB.0

    TRISA = %11111111TRISB = %00000000

    CMCON = 5 ;comparador trabalhando no modo 5

    CLEAR

    INICIO:

    IF SAIDA_COMP2 = 1 THEN

    LED0 = 1

    ELSE

    LED0 = 0

    ENDIF

    GOTO INICIO

    END

    2) Modifique o programa 1, para que o pino RB5 indique o estado da sada do comparador

    3) Modifique o programa 1, para que escreva no PORTB os seguintes valores:

    a) se a tenso na entrada AN2 for maior que a tenso na entrada AN1, escrever %11111111 no PORTBb) se a tenso na entrada AN2 for menor que a tenso na entrada AN1, escrever %01010101 no PORTB

    4) Simule e explique o funcionamento do programa:

    ENTRADA1 var PORTA.1 ;entrada VIN-

    ENTRADA2 VAR PORTA.2 ;entrada VIN+LED7 var PORTA.7SAIDA_COMP2 var CMCON.7 ;C2OUT

    FLAG VAR BITCONTADOR VAR BYTE

    TRISA = %01111111TRISB = %00000000

    CMCON = 5 ;comparador trabalhando no modo 5

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    63/77

    63

    CLEAR

    INICIO:

    LED7 = SAIDA_COMP2

    IF SAIDA_COMP2 = 1 THEN

    FLAG = 1

    ENDIF

    IF SAIDA_COMP2 = 0 AND FLAG = 1 THEN

    CONTADOR = CONTADOR + 1PORTB = CONTADORFLAG = 0

    ENDIF

    GOTO INICIO

    END

    5) Modifique o programa "4", para que quando a contagem chegar em 10, ligue o pino RA6, e reinicie acontagem dezero.

    6) Simule e explique o programa. Quais entradas dos comparadores esto sendo utilizadas?

    SAIDA_CP1 VAR CMCON.6SAIDA_CP2 VAR CMCON.7

    LED0 VAR PORTB.0LED1 VAR PORTB.1

    TRISA = %11111111TRISB = %00000000

    CMCON = 2 ;comparador trabalhando no modo 2

    VRCON = %10100110 ;configura referencia de tenso VREF = 1,25V

    CLEAR

    INICIO:

    IF SAIDA_CP1 = 1 THEN

    LED0 = 1

    ELSE

    LED0 = 0

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    64/77

    64

    ENDIF

    IF SAIDA_CP2 = 1 THEN

    LED1 = 1

    ELSELED1 = 0

    ENDIF

    GOTO INICIOEND

    7) Modifique o programa 6, utilizando CMCON = %00001010, simule e explique. Quais entradas doscomparadores esto sendo utilizadas agora?

    8) Modifique o programa 6, para trabalhar com uma tenso de referncia de 3,59V

    9) Modifique o programa 6, para trabalhar com uma tenso de referncia de 1,04V

    10) Elabore um programa que mea um sinal DC. Quando este sinal for maior que 2.50V, o pino RB7deve ser ativado.

    11) Simule e explique o programa. Quais entradas dos comparadores esto sendo utilizadas?

    SAIDA_CP1 VAR CMCON.6SAIDA_CP2 VAR CMCON.7LED5 VAR PORTB.5LED7 VAR PORTB.7

    TRISA = %11111111

    TRISB = %00000000

    CMCON = 3 ;comparador trabalhando no modo 3

    CLEARINICIO:

    IF SAIDA_CP1 = 1 THEN

    LED5 = 1

    ELSE

    LED5 = 0

    ENDIF

    IF SAIDA_CP2 = 1 THEN

    LED7 = 1

    ELSELED7 = 0

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    65/77

    65

    ENDIF

    GOTO INICIO

    END

    12) Modifique o programa 11 para que:

    a) se a tenso na entrada AN0 for menor que a tenso de referencia, acionar o pino RB0 durante 2ms

    b) se a tenso na entrada AN1 for maior que a tenso de referncia, acionar o pino RB1 durante 3ms

    13) Modifique o programa 11 para trabalhar com os comparadores no modo 4 e explique seufuncionamento

    14) Modifique o programa 11 para trabalhar com os comparadores no modo 6, e explique seufuncionamento

    15) Elabore um programa que trabalhe no modo 6, que :a) quando a tenso na entrada AN0 for maior que a referencia, ativar a saida RB0b) quando a tenso na entrada AN0 for menor que a referencia, ativar a saida RB3c) quando a tenso na entrada AN1 for maior que a referencia, ativar a saida RB5

    d) quando a tenso na entrada AN1 for menor que a referncia, ativar a sada RB6

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    66/77

    66

    18. Microcontrolador PIC 12F675

    6 pinos de I/O 1 comparador analgico 1 conversor A/D com 4 canais

    O comando PWM tem a seguitnte sintaxe: PWMPin. Duty, Cycle

    1) Simule o programa abaixo, utilizando o microcontrolador 12F675:

    @ device mclr_off ;configura pino GP3/MCLR como I/O

    LED0 VAR GPIO.0LED1 VAR GPIO.1LED2 VAR GPIO.2

    LED4 VAR GPIO.4LED5 VAR GPIO.5

    ANSEL = 0 ;configura todos os pinos como I/OCMCON = 7 ;comparadores analgicos desligados

    TRISIO=%00000000

    LED0 = 1LED1 = 1LED2 = 1

    LED4 = 1LED5 = 1

    END

    2) Modifique o programa 1, para ligar somente o pico GP2;3) Simule o programa abaixo:

    LED VAR GPIO.0 ;LED como GPIO.0

    ANSEL = 0 ; todos os pinos como I/O digitalCMCON = 7 ; comparador desligado

    TRISIO=%00000000

    LOOP:

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    67/77

    67

    LOW LED ;liga LED em GPIO.0PAUSE 5 ;atraso de 5 milisegundos

    HIGH LED ;desliga LED em GPIO.0PAUSE 5 ;atraso de 5 milisegundos

    GOTO LOOP ;volta para loop

    END

    4) Modifique o programa 3, para ligar e desligar os pinos GP1 e GP4;

    5) Simule o programa:

    Include "modedefs.bas" ;definicoes para Serout

    DEFINE CHAR_PACING 500

    ;Define parametros para ADCIN

    Define ADC_BITS 8 ; numero de bits no resultadoDefine ADC_CLOCK 3 ; fonte de clock (3=rc)Define ADC_SAMPLEUS 50 ; tempo de amostragem em us

    TX Var GPIO.1 ; pino de transmissao em GP0

    adval var byte ; cria adval para armazenar o resultado

    ADCON0.7 = 0 ; justifica resultado para a esquerdaANSEL = %00111000 ; AN3 analogico, restante digitalCMCON = 7 ; comparador analogico desligado

    Pause 1 ; espera 1 ms

    loop: ADCIN 3, adval ; Le canal 3 para adval

    Serout TX, T2400, [" Valor: ", #adval,13,10] ;Mostra valor em decimal

    Pause 1 ; espera 1 ms

    Goto loop ; faz para sempre

    End

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    68/77

    68

    6)Modifique o programa 5 para mostrar em volts;

    7)Modifique o programa 5 para trabalhar com conversor A/D de 10 bits;

    8)Modifique o programa 6 para trabalhar com conversor A/D de 10 bits;

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    69/77

    69

    9) Simule o programa:

    @ device mclr_off

    LED var GPIO.0 ; GPIO.0 -> ledPB Var GPIO.3 ; GPIO.3 -> push button

    ANSEL = 0 ; todos os pinos i/o digital

    CMCON = 7 ; comparadores desligados

    loop:If PB = 0 Then

    Low LEDElse

    High LEDEndif

    Goto loop

    End

    10) Modifique o program 9 para o led conectado no pino GP4;

    11) Elabore um programa:

    Se o pino GP3= 0

    GP2 GP1 GP01 1 00 1 11 0 1

    Se o pino GP3= 1

    GP2 GP1 GP01 1 10 0 01 0 1

    Se o pino GP4 = 0

    GP2 GP1 GP00 0 1

    0 1 01 1 1

    Se o pino GP4 = 1

    GP2 GP1 GP01 1 10 1 01 1 1

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    70/77

    70

    19. Resumo do Compilador PicBasic Pro (PBP)

    O PBP um compilador BASIC, para os microcontroladores da Microchip. Cria por padro arquivos querodam em um PIC 16F84-04/P de clock de 4MHz.

    Seu primeiro programa

    1. Digite o arquivo fonte do seu programa, usando um editor de textos (ex. edit do DOS), e salve com

    extenso .BAS .

    Exemplo: programa BLINK.BAS

    Programa exemplo para piscar um LED ligado ao pino PORTB

    loop: High PORTB.0 liga o ledPause 500 atraso de 0.5 seg

    Low PORTB.0 desliga o ledPause 500 atraso de 0.5 seg

    Goto loop volta ao loop

    End

    2. Compilar o programa com o comando:

    PBP blink.bas

    Se for o rodar o programa acima, em um PIC 16F877, deve-se usar o comando:

    PBP p16f877 blink.bas

    Ser gerado o arquivo BLINK.HEX, pronto, para ser gravado no PIC.

    O BASIC do PicBasic Pro

    Rtulos de linha ou label

    Usados para marcar declaraes , para referencia com os comandos GOTO ou GOSUB.

    aqui: Serout 0,N2400, [Olah, Pessoal!, 13,10}Goto aqui

    Variveis

    Variveis so onde dados temporrios so guardados num programa do PicBasicPro.So criadas com a palavra-chave VARVariveis podem ser bits, bytes ou palavras.

    Rtuto VAR Tamanho{.Modificadores}

    Cao var byte cao uma var de 8 bitsGato var bit gato uma var de 1 bit

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    71/77

    71

    w0 var word w0 uma var de 2 bytes

    Aliases

    VAR pode tambm ser usada para criar um alias (um outro nome) para uma varivel.

    Toto var cao toto outro nome de cao

    Pulga var cao.0 pulga e o bit0 de cao

    b0 var w0.byte0 b1 eo primeiro byte de w0

    b1 var w0.byte1 b0 eo segundo byte de w0

    Constantes

    Rotulo COM Expressao constante

    Ratos con 3 'Ratos = 3Ratoeiras con ratos * 1000

    Constantes Numricas

    Constante Decimal: 100 Valor decimal 100

    Constante Binria: %10100101

    Constante hexadecimal: $F2

    Constante de caracteres: d

    Pinos

    Os pinos podem ser acessados usando o nome PORTe o nmero do bit:

    PORTB.1 = 1 Fixa PORTB, bit 1 em 1

    Pode-se atribuir um nome para um pino, usando o comando VAR:

    Led var PORTA.3 renomeia PORTA.3como led

    High led fixa led em nivel alto

    Para configuar um pino ou porta como sada ou entrada, utiliza-se o registrador TRIS

    Fixando um bit TRIS em 0, torna o pino uma sada.Fixando um bit TRIS em 1, torna o pino uma entrada.

    TRISA = %00000000 todos os pinos do PORTA como sadas

    TRISB = %11111111 todos os pinos do PORTB como entradas

    Define

    Lzaro

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    72/77

    72

    Pode ser usado mudar o valor predefinido do oscilador, e outras caracteristicas

    DEFINE OSC 4 Define frequencia do oscilador'3 4 8 10 12 16 20

    DEFINE HSER_BAUD 2400

    Operaes Matemticas

    Op.Matemtico

    Descrio

    + Adio- Subtrao* Multiplicao** 16 bits superiores da multiplicao*/ 16 bits do meio da multiplicao/ Diviso// Resto (Modulo)> n Deslocamento p/ Direita n posiesABS Valor AbsolutoCOS CossenoSIN SenoSQR Raiz QuadradaMAX MximoMIN MinimoDCD Decodifica 2nNCD CodificaDIG DigitoREV Inverte Bits& AND Lgico| OR Lgico^ OR exclusivo Lgico (XOR)~ NOT Lgico (inversora)&/ NOT AND Lgico|/ NOT OR Lgico^/ NOT OR Exclusivo Lgico

    Operadores de Bit

    Agem em cada bit, de um valor de maneira booleana. Eles podem ser usados p/ isolar bits ou adicionar bits aum valor. Exemplo:

    B0 = B0 & %00000001 Isola o bit 0 de B0

    B0 = B0 | %00000001 Liga o bit 0 de B0

    B0 = B0 ^ %00000001 Inverte o estado dobit 0 de B0

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    73/77

    73

    Operadores de Comparao

    So usados em declaraes IF...THEN para comparar uma expresso com outra.Operador deComparao

    Descrio

    = ou == Igual ou != No Igual< Menor que> Maior que

    = Maior ou Igual aExemplo:

    If I > 10 Then loop

    Operadores Lgicos

    Os operadores lgicos diferem dos operadores a bit. Eles produzem um resultado verdadeiro/falso de suaoperao. Valores de 0 so tratados como falso. Qualquer valor tratado como verdadeiro. Eles so maisusados em conjunto com os operadores IF...THEN.

    Operador Lgico DescrioAND ou && AND LgicoOR ou || OR LgicoXOR ou ^^ OR Exclusivo LgicoNOT AND NAND LgicoNOT OR NOR LgicoNOT XOR NXOR Lgico

    If (A == maior) AND (B > medio) Then run

    Algumas declaraes do PicBasicPro

    FOR...NEXT

    FOR conta = inicioTO fim{STEP {-} Inc}{Corpo}

    NEXT {Conta}

    O loop FOR.. NEXT permite que os programas executem um nmero de declaraes (o Corpo) por algumasvezes usando uma varivel como contador.Exemplos:

    FOR i = 1 TO 10 Conta de 1 a 10Serout 0, N2400,[#i, ] Envia cada numero para

    Pin0 serialmenteNEXT i Retorna e faz a proxima contagem

    Serout 0,N2400,[10] Envia um avano de linha

    FOR B2 =20 TO 10 STEP -2 Conta de 20 a 10 de 2 em 2

    Serout 0, N2400, [#B2, ]

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    74/77

    74

    NEXT B2 retorna e faz a proxima contagem

    Serout 0,N2400,[10] Envia um avano de linha

    GOSUB Rotulo

    Salta para a subrotina em Rotulo.

    GOSUB beep Executa subrotina chamada beep..............

    beep: High 0 Ligue o Led ligado em Pin0Sound 1,[80,10] Bipe no Alto-falanteLow 0 'Desliga o LedReturn Volta p/ rotina principal

    IF...THEN...ELSE...ENDIF

    IF Comp {AND/OR Comp...} THEN RotuloIF Comp{AND/OR Comp} THEN

    DeclaraoELSE

    DeclaraoENDIF

    If...Then avalia os termos da comparao p/ verdadeiro ou falso. Se for verdadeiro, a operao aps o Then executada. Se ele resultar em falso, a operao aps o Then no executada. Comparaes que resultemem 0, so consideradas falsas. Qualquer outro valor considerado verdadeiro. Exemplos:

    If PortA.0 = 0 Then pushd ' Se a pino RA0 for igual' a zero, salte para o

    ' rtulo pushd

    If B0 10 Then ' Se B0 for diferente de 10, faaB0 = B0 + 1 ' incrementa B0B1 = B1 - 1 ' incrementa B1

    Endif

    WHILE...WEND

    WHILECondio Declarao......WEND

    Executa repetidamente "Declarao" enquanto (While) a Condio for verdadeira. Exemplo:

    i = 1WHILE i

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    75/77

    75

    HIGH pino

    Faz o pino especificado ir para nvel alto (5V).

    HIGH PORTA.0 ' pino RA0 = 1 (5V)

    led var PORTB.4 ' define RB4 como ledHIGH led ' led = 1

    Outro modo de levar um pino, para nivel alto, se ele ja foi configurado como sada, :

    PORTB.4 = 1 ' Fixa o pino RB4 em nivel alto (5V)

    LOW pino

    Faz o pino especificado ir para nvel baixo (0V).

    LOW PORTA.0 ' pino RA0 = 0 (0V)

    lampada var PORTB.5 'define RB5 como lampada

    LOW lampada ' lampada = 0

    Outro modo de levar um pino, para nivel baixo, se ele ja foi configurado como sada, :

    PORTB.4 = 0 ' Fixa o pino RB4 em nivel baixo (0V)

    PAUSE perodo

    Faz uma pausa no programa, durante "periodo" milisegundos. Periodo pode ser de 0ms at65535 milisegundos.

    PAUSE 1000 'Atraso de 1 segundo

    PAUSEUS periodo

    Faz uma pausa no programa durante "periodo" microsegundos. Perodo pode ser de 24us ate 65535us.

    PAUSEUS 1000 'Atraso de 1 milisegundo

    SOUND pino,[Nota,Durao{,Nota,Durao...}]

    Gera tons no pino especificado.

    se "Nota" 0 silencioNotas de 1 a 127 so tonsNotas de 128 a 255 so ruidos brancos

    Nota 1 de 78,74HzNota 127 de 10KHz

    Duraao de 0 a 255, e determina por quanto tempo a Nota tocada em incrementos de cerca de 12milisegundos.

    Um alto-falante pode ser adicionado atraves de um capacitor no pino especificado

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    76/77

    76

    SOUND PORTB.7, [100,10,50,10] ' envia 2 sons' consecutivos no pino 'RB7.

    WHITEEndereo, Valor

    Escreve "Valor" na EEPROM do microcontrolador no "Endereo" especificado. Cada Write auto-temporizado, e leva cerca de 10 milisegundos para ser executado. Ex:

    WRITE5,B0 ' Envia valor de B0 para o endereo 5

    'da EEPROM do PICREADEndereo, Var

    L o contedo do endereo especificado da EEPROM, e guarda o resultado na variavel "Var". Ex:

    READ 5,B2 ' L o contedo do endereo 5 da' EEPROM, e armazena na varivel' B2

    SERINpino, modo, {timeout, rotulo,} { [ Qualificador...],} {Item....}

    Recebe um ou mais itens no Pino no formato assincrono padro, usando 8 bits, sem paridade e um stop bit(8N1)

    SERIN PORTA.1, N2400,["A"], B0 'Aguarda at que o 'caracter A seja recebido 'serialmente, no pino 'RA0, ecoloca o proximo caracter em B0

    SEROUT pino, modo, [item{,Item...}]

    Envia um ou mais itens ao pino em formato assncrono padro usando 8 bits de dados, sem paridade, e umstop bit.

    SEROUT 0,N2400,[#B0,10] 'Envia o valor ASCII de B0 'seguido por um avano de 'lingua, no pino PORTA.3,'serialmente

    Algumas outras declaraes disponiveis no PicBasicPro:DEBUG : Sada serial assncrona p/ um pinoDTMFOUT : Gera tons de discagem em um pinoLCDOUT : Mostra caracteres em um LCDPULSIN : Mede a largura de um pulso em um pinoPULSOUT : Gera pulso em um pino

    +

    10uF

    PINO

    ALTO-FALANTE

    +

    10uF

    PINO

    ALTO-FALANTE

  • 7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro

    77/77

    SHIFTFIN : Entrada serial sincronaSHIFTOUT : Sada serial sincronaI2CREAD : Le os bytes de um dispositivo I2CI2CWRITE : Escreve bytes em um dispositivo I2CON INTERRUPT :Executa subrotina BASIC em uma :interrupoPOT :Le valor de um potenciometro em um pinoRANDOM :Gera um nmero pseudo-aleatrio

    Endereos na Internet sobre o PICBASIC (maio/2004):

    www.microchip.comwww.epanorama.net

    www.melabs.com/index.htm

    www.mikroelektronika.co.yu

    www.rentron.com/PicBasic1.htm

    www.asm51.eng.br/