143
MICROCONTROLADORES - 8051 EM LINGUAGEM C Rafael Oliveira do Prado Técnico em Eletrônica [email protected] 1 www.mecatronicadegaragem.blogspot.com.br

Micro Control Adores

Embed Size (px)

Citation preview

Page 1: Micro Control Adores

MICROCONTROLADORES -

8051 EM LINGUAGEM C Rafael Oliveira do Prado Técnico em Eletrônica

[email protected]

1

www.mecatronicadegaragem.blogspot.com.br

Page 2: Micro Control Adores

INTRODUÇÃO

Esta apresentação tem como objetivo introduzir alguns conceitos fundamentais sobre microcontrolares de maneira prática e de fácil compreensão para iniciantes. O microcontrolador utilizado é da família 8051 e a linguagem de programação é a linguagem C;

Além de abordar teoricamente as principais características do 8051, são descritos passo a passo como programá-lo, exemplos de circuitos, programas comentados e exercícios propostos;

Não são abordados desenhos de placa de circuito impresso nem métodos ou circuitos de programação do 8051. Para tanto procure na folha de dados do fabricante, livros ou internet;

Como pré-requisitos, são recomendados conhecimentos prévios de programação em linguagem C e eletrônica digital. 2

www.mecatronicadegaragem.blogspot.com.br

Page 3: Micro Control Adores

TEMAS ABORDADOS

Sistemas Embarcados

Definição;

Aplicações. Microcontroladores

História; Microprocessador; Microcontrolador; Microprocessador vs Microcontrolador; Microcontroladores mais Usados.

8051

Descrição; Pinagem; Descrição dos Pinos; Linguagem C vs Linguagem Assembly; Memória Externa no 8051; Memória no 8051;

3

AT89S52; Descrição do AT89S52; Memória de Programa no AT89S52; Memória de Dados no AT89S52; Keil; Leitura de Botão; Display LCD Interface 4 Bits; Teclado Matricial 4x4; Interrupções; Prioridade das Interrupções; Interrupções Externas; Temporizadores/Contadores; Comunicação Serial.

www.mecatronicadegaragem.blogspot.com.br

Page 4: Micro Control Adores

SISTEMAS EMBARCADOS

“Um sistema embarcado é a combinação de hardware e

software, e ocasionalmente elementos mecânicos ou de

outra natureza, projetados para desempenhar uma

função específica.”

Programming Embedded Systems in C and C++, Michael Barr,

1999.

4

www.mecatronicadegaragem.blogspot.com.br

Page 5: Micro Control Adores

SISTEMAS EMBARCADOS

É um sistema no qual o computador é completamente encapsulado e dedicado ao dispositivo ou sistema que controla, diferente dos computadores de uso geral como o PC;

Já que o sistema é dedicado a tarefas específicas, pode-se otimizar o projeto reduzindo tamanho, recursos computacionais e custo do produto.

5

www.mecatronicadegaragem.blogspot.com.br

Page 6: Micro Control Adores

SISTEMAS EMBARCADOS

Geralmente é baseado em Microcontroladores, no entanto existem sistemas embarcados baseados em outras tecnologias:

Dispositivos Lógico Programáveis (PLDs); FPGAs (Field-Programmable Gate Array); Processadores Digitais de Sinais (DSPs).

6

www.mecatronicadegaragem.blogspot.com.br

Page 7: Micro Control Adores

APLICAÇÕES

A aplicação para sistemas embarcados é imensa e pode ser observada em diversas áreas: Equipamentos Médicos; Automação Industrial; Automação Residencial; Automobilística; Aviônica; Televisão, Videogame; Periféricos para computador; Eletrodomésticos; Celular, iPad, iPod; Etc... 7

www.mecatronicadegaragem.blogspot.com.br

Page 8: Micro Control Adores

HISTÓRIA DO MICROCONTROLADOR

Em 1969, a INTEL encomenda circuitos integrados (CIs) japoneses para a produção de calculadoras;

Neste período, Marcian Hoff, funcionário da própria INTEL apresentou uma solução diferente: Que a função do CI fosse determinada por um programa nele armazenado;

8

www.mecatronicadegaragem.blogspot.com.br

Page 9: Micro Control Adores

HISTÓRIA DO MICROCONTROLADOR

Em 1971 um funcionário da INTEL chamado Frederico Faggin transformou a ideia de Hoff num produto real e assim, o primeiro microprocessador nasceu;

Com o passar dos anos, o avanço da tecnologia proporcionou a criação de microprocessadores mais rápidos e inteligentes;

Aliados a memórias RAM e ROM, disco rígido, dispositivos de entrada (teclado, mouse...) e saída (monitor, impressora..), o microprocessador é a parte central de troca de informações entre dispositivos.

9

www.mecatronicadegaragem.blogspot.com.br

Page 10: Micro Control Adores

HISTÓRIA DO MICROCONTROLADOR

Logo que os microprocessadores foram popularizados, a indústria percebeu que tais componentes poderiam ser aplicados na automação de processos;

Para viabilizar tal propósito, os microprocessadores foram reprojetados e os periféricos de entrada e saída foram integrados todos num único CI.

10

www.mecatronicadegaragem.blogspot.com.br

Page 11: Micro Control Adores

HISTÓRIA DO MICROCONTROLADOR

Esse CI, integrando periféricos em sua arquitetura, era na verdade, um sistema mais completo que um microprocessador;

Ele poderia processar dados e controlar dispositivos externos sem a necessidade de periféricos externos;

Foi este, então, batizado de microcontrolador.

11

www.mecatronicadegaragem.blogspot.com.br

Page 12: Micro Control Adores

MICROPROCESSADOR

Possui apenas CPU. Os periféricos são externos: Placa Mãe; Disco Rígido Memória RAM; Placa de Vídeo; Monitor; Teclado; Mouse; Etc...

12

www.mecatronicadegaragem.blogspot.com.br

Page 13: Micro Control Adores

MICROCONTROLADOR

Possui CPU + memória + periféricos (variam de acordo com o modelo) em um único circuito integrado: Memória (RAM, ROM, Flash); Oscilador interno; Comunicação serial, USB, 1wire, etc...; Conversor Analógico-Digital; Conversor Digital-Analógico; Comparador analógico; Modulador por largura de pulso (PWM); Etc... 13

www.mecatronicadegaragem.blogspot.com.br

Page 14: Micro Control Adores

MICROPROCESSADOR VS MICROCONTROLADOR

A principal diferença é que para um sistema microprocessado

funcionar são necessários elementos externos (memória, placa mãe e componentes para enviar e receber dados) enquanto que para um sistema microcontrolado, basta o microcontrolador.

14

www.mecatronicadegaragem.blogspot.com.br

Page 15: Micro Control Adores

MICROCONTROLADORES MAIS USADOS

Intel família 8051; PIC; Microcontroladores ATMEL; Microcontroladores COP; Microcontroladores FREESCALE (MOTOROLA).

15

www.mecatronicadegaragem.blogspot.com.br

Page 16: Micro Control Adores

8051

O microcontrolador escolhido é um microcontrolador da família 8051, porque além de já ter sido a arquitetura mais utilizada por profissionais e hobbistas (ainda é muito utilizado), o 8051 básico possui recursos mais simples, facilitando o aprendizado para iniciantes;

Uma vez que se entenda as funcionalidades e métodos de desenvolvimento com dispositivos dessa família, não será difícil migrar para outros tipos de microcontroladores.

16

www.mecatronicadegaragem.blogspot.com.br

Page 17: Micro Control Adores

DESCRIÇÃO

Algumas das características mais importantes do 8051 são:

32 pinos de Entrada/Saída programáveis; 2 Pinos de interrupção externa; 2 Temporizadores/Contadores de 16 bits; Comunicação Serial.

17

www.mecatronicadegaragem.blogspot.com.br

Page 18: Micro Control Adores

PINAGEM

18

www.mecatronicadegaragem.blogspot.com.br

Page 19: Micro Control Adores

DESCRIÇÃO DOS PINOS

Além de E/S, os pinos das portas 1, 2, 3, 4 podem assumir outras funções. Port 0 e Port 2:

Quando utilizado um sistema com memória externa de 16 bits, a PORT0 opera como barramento de dados multiplexado da parte menos significativa da palavra binária, enquanto a PORT2 fornece a parte mais significativa.

A Port 0 não possui resistores de pull-up internos. Para obter nível lógico 1 é preciso conectar em cada pino resistores de 4k7 em relação ao +VCC. Esta é a única porta que pode ter +VCC diferente de 5V.

19

www.mecatronicadegaragem.blogspot.com.br

Page 20: Micro Control Adores

DESCRIÇÃO DOS PINOS

Port 1:

Pino Funções

P1.5 MOSI - usado para gravação in-System (ISP) P1.6 MISO - usado para gravação in-System (ISP) P1.7 SCK - usado para gravação in-System (ISP)

20

www.mecatronicadegaragem.blogspot.com.br

Page 21: Micro Control Adores

DESCRIÇÃO DOS PINOS

Pino Funções

P3.0 RXD - pino de entrada serial P3.1 TXD - pino de saída serial P3.2 - interrupção externa 0 P3.3 - interrupção externa 1 P3.4 T0 - entrada externa do TIMER0 P3.5 T1 - entrada externa do TIMER1 P3.6 - pulso para escrita em memória externa P3.7 - pulso para leitura em memória externa

1

0

INT

INT

RD

WR

Port 3:

21

www.mecatronicadegaragem.blogspot.com.br

Page 22: Micro Control Adores

DESCRIÇÃO DOS PINOS

RST:

Nível alto nesse pino por dois ciclos de máquina enquanto o oscilador estiver funcionando, reinicia o sistema;

Ao energizar o sistema é importante que seja resetado para o programa começar a ser executado desde o endereço 00H. É interessante haver um botão para reset manual também. 22

www.mecatronicadegaragem.blogspot.com.br

Page 23: Micro Control Adores

DESCRIÇÃO DOS PINOS

ALE/ :

Adress Latch Enable (ALE) é um pulso para travar (latch) a parte baixa do endereço durante o acesso à memória externa. É também o pino de entrada do pulso de programação (PROG) durante a operação de gravação da memória Flash interna.

Em operação normal, sem uso da memória externa, esse pino é pulsado em uma frequência de 1/6 do oscilador interno e pode ser usado como clock externo;

PROG

23

www.mecatronicadegaragem.blogspot.com.br

Page 24: Micro Control Adores

DESCRIÇÃO DOS PINOS

PSEN:

Program Store Enable é o pulso de habilitação para leitura de memória de programa externa;

EA/VPP:

External Acess Enable (EA). Habilitação de memória de programa externa. Deve ser conectado ao GND quando uso de programas em memória externa e em VCC quando for utilizada a Flash interna;

24

www.mecatronicadegaragem.blogspot.com.br

Page 25: Micro Control Adores

DESCRIÇÃO DOS PINOS

XTAL1, XTAL2:

Pinos de entrada para configuração do circuito de clock. A frequência do sistema será igual a frequência do cristal.

25

www.mecatronicadegaragem.blogspot.com.br

Page 26: Micro Control Adores

LINGUAGEM ASSEMBLY VS LINGUAGEM C

Vantagens:

Maior controle sobre hardware;

Economia de memória de programa;

Tempo de execução de programa menor.

Desvantagens:

Conjunto de mnmônicos extenso, tornando a tarefa de programar e interpretar programas enfadonha;

Portabilidade reduzida, pois o Assembly de uma máquina é diferente de outra.

Assembly C

Vantagens:

Portabilidade elevada;

Poucos comandos são necessários para obter resultado;

Facilidade para realizar cálculos complexos.

Desvantagem:

Código gerado maior, consequentemente, maior ocupação de memória e maior tempo de execução do programa.

26

www.mecatronicadegaragem.blogspot.com.br

Page 27: Micro Control Adores

LINGUAGEM ASSEMBLY VS LINGUAGEM C

Programa escrito em C:

#include <reg51.h> // Biblioteca padrão de nomes dos RSFs do 8051 sbit LED = P0^0; // Define LED como o pino 0 da P0 sbit BOTAO = P0^1; // Define BOTAO como o pino 1 da P0 main() { int i; while(1) { if(!BOTAO) // Aguarda o botao ser pressionado { while(!BOTAO); // Espera soltar for(i=0; i<900; i++) ; // Delay de aproximadamente 50ms (cristal // 11,0592MHz) para tratar efeito bounce

LED = !LED; // Apaga/acende o LED } } }

27

www.mecatronicadegaragem.blogspot.com.br

Page 28: Micro Control Adores

LINGUAGEM ASSEMBLY VS LINGUAGEM C

Programa em C após compilação:

C:0x0000 020818 LJMP C:0818 C:0x0003 00 NOP C:0x0004 00 NOP . . . C:0x0800 2091FD JB 0x90.1,C:0800 C:0x0803 3091FD JNB 0x90.1,C:0803 C:0x0806 E4 CLR A

C:0x0807 FF MOV R7,A

C:0x0808 FE MOV R6,A

C:0x0809 0F INC R7

C:0x080A BF0001 CJNE R7,#0x00,C:080E C:0x080D 0E INC R6

C:0x080E BE03F8 CJNE R6,#0x03,C:0809

C:0x0811 BF84F5 CJNE R7,0x84,C:0809

C:0x0814 B290 CPL 0x90.0 C:0x0816 80E8 SJMP C:0800 C:0x0818 787F MOV R0,#0x7F C:0x081A E4 CLR A

C:0x081B F6 MOV @R0,A

C:0x081C D8FD DJNZ R0,C:081B C:0x081E 758107 MOV 0x81,#0x07 C:0x0821 020800 LJMP C:0800

Memória ocupada: 39 bytes

28

www.mecatronicadegaragem.blogspot.com.br

Page 29: Micro Control Adores

LINGUAGEM ASSEMBLY VS LINGUAGEM C

Programa com a mesma função escrito em Assembly:

LED equ P0.0 ; Define LED como o pino 0 da P0 BOTAO equ P0.1 ; Define BOTAO como o pino 1 da P0 ORG 0 ; Inicia escrita do programa no endereço 0 da memória aguardaBotao: JNB BOTAO, $ ; Testa se o botao foi pressionado JB BOTAO, $ ; Testa se o botao foi solto MOV R1, #60H ; Carrega R1 com o valor 60 em hexadecimal delay: ; Delay de aproximadamente 50ms (cristal 11,0592MHz) para DJNZ R0, $ ; tratar efeito bounce. Decrementa R0 e não prossegue DJNZ R1, delay ; enquanto R0 for diferente de 0. Decrementa R1 e volta para ; delay enquanto R1 for diferente de 0

CPL LED ; Apaga/acende LED SJMP aguardaBotao ; Retorna para aguardaBotao END ; Fim

29

www.mecatronicadegaragem.blogspot.com.br

Page 30: Micro Control Adores

LINGUAGEM ASSEMBLY VS LINGUAGEM C

Programa em Assembly após compilação:

C:0x0000 2081FD JB 0x80.1,C:0000 C:0x0003 3081FD JNB 0x80.1,C:0003 C:0x0006 7960 MOV R1,#0x60 C:0x0008 D8FE DJNZ R0,C:0008 C:0x000A D9FC DJNZ R1,C:0008 C:0x000C B280 CPL 0x80.0 C:0x000E 80F0 SJMP C:0000

Memória ocupada: 16 bytes

30

Um simples programa em C ocupa 23 bytes de memória a mais que o mesmo programa escrito em assembly.

www.mecatronicadegaragem.blogspot.com.br

Page 31: Micro Control Adores

MEMÓRIA EXTERNA NO 8051

Alguns dispositivos da família 8051 não possuem memória de programa interna, sendo necessário o uso de memória externa;

Para os que possuem, em determinadas aplicações a memória interna é insuficiente;

Nesses casos são utilizados circuitos de memória externa.

31

www.mecatronicadegaragem.blogspot.com.br

Page 32: Micro Control Adores

MEMÓRIA NO 8051

Atualmente grande parte dos microcontroladores possuem memória interna suficiente para a maioria das aplicações;

As aplicações aqui descritas não requisitam o recurso de memória externa, por isso tais circuitos e programação não serão abordados.

32

www.mecatronicadegaragem.blogspot.com.br

Page 33: Micro Control Adores

AT89S52

O microcontrolador utilizado será o AT89S52. Ele é essencialmente parecido com o 8051 clássico, possuindo um temporizador/contador a mais;

Atualmente existem diversos dispositivos da família 8051 com periféricos e recursos extras, além dos disponíveis nas primeiras versões;

A seguir a memória e registradores de funções especiais do AT89S52 serão brevemente descritos, no entanto, esta apresentação se limitará apenas aos recursos do 8051 tradicional.

33

www.mecatronicadegaragem.blogspot.com.br

Page 34: Micro Control Adores

DESCRIÇÃO DO AT89S52

8 Kbytes de memória de programa on-chip (Flash); 256 bytes de RAM de dados; 32 pinos de Entrada/Saída programáveis; Modo de programação serial ISP (In-System Programmable) 3 Temporizadores/Contadores de 16 bits; Comunicação Serial; Watch Dog Timer programável; Estruturas de interrupção com dois níveis de prioridade; Oscilador de clock on-chip;

Operação de 0Hz a 33MHz; Proteção contra cópias (lock bit); Alimentação de 4 a 5,5V. 34

www.mecatronicadegaragem.blogspot.com.br

Page 35: Micro Control Adores

MEMÓRIA DE PROGRAMA NO AT89S52

O AT89S52 possui 8 Kbytes de memória de programa on-

chip (Flash). O programa é executado a partir do endereço 0000H. Os primeiros endereços são reservados para rotinas de interrupção.

35

www.mecatronicadegaragem.blogspot.com.br

Page 36: Micro Control Adores

MEMÓRIA INTERNA DE DADOS NO AT89S52

36

O AT89S52 possui 256 bytes de RAM de dados (espaço para variáveis de programa);

Os primeiros 128 bytes são para uso geral;

Os 128 bytes restantes são reservados para funções específicas.

www.mecatronicadegaragem.blogspot.com.br

Page 37: Micro Control Adores

MEMÓRIA INTERNA DE DADOS NO AT89S52

Bancos de registradores:

“Pacotes” de registradores que recebem os nomes R0, R1...R7. Para selecionar qual banco utilizar utiliza-se um dos registradores de funções especiais chamado PSW;

Bit e byte endereçável: 128 bits que podem ser acessados individualmente

37

www.mecatronicadegaragem.blogspot.com.br

Page 38: Micro Control Adores

MEMÓRIA INTERNA DE DADOS NO AT89S52

A vantagem de utilizar as regiões Banco de Registradores e Bit e Byte Endereçáveis ao invés da região de Apenas

Bytes Endereçáveis está no tamanho e velocidade de execução da instrução.;

Como na programação C já é previsto o uso de memória e velocidade de execução elevados, deixamos que o compilador se preocupe com isso.

38

www.mecatronicadegaragem.blogspot.com.br

Page 39: Micro Control Adores

MEMÓRIA INTERNA DE DADOS NO AT89S52

Registradores de Funções Especiais (RFE):

São registradores reservados na memória para operações

específicas. Não deve-se utilizá-los para uso geral;

Para programar microcontroladores, é preciso conhecer os RFE do referido circuito integrado pelo menos de maneira superficial, para poder utilizá-los quando necessário.

A função da maioria dos RFE do 8051 serão estudadas no decorrer desta apresentação. O mapa da memória interna dos RFE do AT89S52 é exibido no slide a seguir.

39

www.mecatronicadegaragem.blogspot.com.br

Page 40: Micro Control Adores

REGISTRADORES DE FUNÇÕES ESPECIAIS (RSF)

NO AT89S52

40

www.mecatronicadegaragem.blogspot.com.br

Page 41: Micro Control Adores

KEIL

Antes de iniciar o estudo de programação, é recomendável conhecer algum programa de desenvolvimento e depuração de programas para o 8051;

Vários códigos serão exibidos e explicados, por isso é importante testá-los para melhor compreensão.

41

www.mecatronicadegaragem.blogspot.com.br

Page 42: Micro Control Adores

KEIL

Segue abaixo o link para um tutorial de introdução ao Keil, um programa onde é possível escrever, depurar e simular códigos para diversos dispositivos da família 8051. Créditos - Gilson Yukio Sato:

Tutorial Keil uVision 4

Utilize o código fonte do próximo slide para seguir

instruções do tutorial.

42

www.mecatronicadegaragem.blogspot.com.br

Page 43: Micro Control Adores

KEIL

#include <reg51.h> //Biblioteca de nomes dos bits/bytes dos RFE do 8051 sbit pino_led = P1^0; // Define o pino P1.0 como pino_led void troca_estado_led(void) { // Funcao para inverter estado do led pino_led = !pino_led; } void atraso_ms(int i) { // TC0 configurado para uma temporizacao for(i; i > 0; i--){ // de aproximadamente 1ms * i (cristal de 11,0592MHz) TMOD = (TMOD & 0xF0) | 0x01; TH0 = 0xFC; TL0 = 0x66; TR0 = 1; while(!TF0); TR0 = 0; TF0 = 0; } } main() { while(1) { troca_estado_led(); atraso_ms(1000); }; }

43

www.mecatronicadegaragem.blogspot.com.br

Page 44: Micro Control Adores

LEITURA DE BOTÃO E ACIONAMENTO DE LED

O primeiro programa microcontrolado é o simples e clássico acionamento de um LED através da leitura de um botão. A cada vez que o botão for pressionado o LED inverte seu estado. Se continuar pressionado o estado do LED continuará sendo invertido de acordo com a taxa de repetição do botão;

Na prática botões apresentam o chamado efeito bounce

(assim como todos os outros componentes eletromecânicos), que é a sucessiva troca de estado lógico até atingir o estado final. Ocorre ao pressionar ou soltar o botão e dura de 10 a 50ms de acordo com a qualidade do componente;

Para tratar o efeito bounce pode ser inserido no código um atraso depois que o botão for pressionado. Este atraso além de tratar o efeito bounce, determina a taxa de repetição do botão.

44

www.mecatronicadegaragem.blogspot.com.br

Page 45: Micro Control Adores

LEITURA DE BOTÃO E ACIONAMENTO DE LED

45

www.mecatronicadegaragem.blogspot.com.br

Page 46: Micro Control Adores

LEITURA DE BOTÃO E ACIONAMENTO DE LED

Para ler um botão e inverter o estado de um LED é preciso

seguir a seguinte sequência de passos:

1. Testar se o botão foi pressionado;

2. Chamar uma rotina de atraso cujo período determina a taxa de

repetição do botão;

3. Inverter o estado do LED

46

www.mecatronicadegaragem.blogspot.com.br

Page 47: Micro Control Adores

#include <reg51.h> // Biblioteca padrão de nomes dos RSFs do 8051 sbit LED = P0^0; // Define LED como o pino 0 da P0 sbit BOTAO = P0^1; // Define BOTAO como o pino 1 da P0 void atraso_ms(int i) { // TC0 configurado para uma temporizacao de

for(i; i > 0; i--) { // aproximadamente 1ms * i (cristal de 11,0592MHz)

TMOD=(TMOD & 0xF0) | 0x01; TH0=0xFC; TL0=0x66; TR0=1; while(!TF0); TR0=0; TF0=0; } // Nao se preocupe em entender esta funcao agora. Os

} // temporizadores/contadores serao discutidos mais adiante main() { while(1) { if(!BOTAO); // Aguarda o botao ser pressionado atraso_ms(500); // Trata efeito bounce e determina taxa de repeticao do botao LED = !LED; // Apaga/acende o LED } }

47

Leitura de botão e acionamento de LED

www.mecatronicadegaragem.blogspot.com.br

Page 48: Micro Control Adores

DISPLAY LCD INTERFACE 4 BITS

Os módulos LCDs são interfaces de saída muito úteis em sistemas microcontrolados. Estes módulos podem ser gráficos ou a caractere. Os LCDs a caractere são especificados em número de colunas por linhas, sendo os mais usuais 16x2, 16x1, 20x2, 20x4, 8x2;

Os módulos podem ser encontrados com backlight (LEDs para iluminação de fundo), facilitando a leituras em ambientes escuros. Os LCDs mais comuns empregam o controlador HD44780 com interface paralela, todavia, existem LCDs com controle serial e a gama de LCDs aumenta constantemente.

48

www.mecatronicadegaragem.blogspot.com.br

Page 49: Micro Control Adores

DISPLAY LCD INTERFACE 4 BITS

A seguir iremos trabalhar com o LCD de 16 caracteres por 2 linhas. O uso de qualquer outro baseado no controlador HD44780 é similar, variando apenas o número de linhas e colunas;

A interface pode ser de 4 ou 8 bits. O mais usual é 4 bits por usar menos pinos. A diferença é que para mandar instruções ou caracteres ao módulo, deve-se enviar primeiro os 4 MSBs e depois os 4 LSBs. Por definição o módulo inicia em 8 bits, então para utilizar interface de 4 bits o primeiro comando deve ser para alterar a interface.

49

www.mecatronicadegaragem.blogspot.com.br

Page 50: Micro Control Adores

DISPLAY LCD INTERFACE 4 BITS

50

www.mecatronicadegaragem.blogspot.com.br

Page 51: Micro Control Adores

DISPLAY LCD INTERFACE 4 BITS

51

Instruções mais usuais

www.mecatronicadegaragem.blogspot.com.br

Page 52: Micro Control Adores

DISPLAY LCD INTERFACE 4 BITS

52

Detalhamento das instruções

www.mecatronicadegaragem.blogspot.com.br

Page 53: Micro Control Adores

DISPLAY LCD INTERFACE 4 BITS

53

www.mecatronicadegaragem.blogspot.com.br

Page 54: Micro Control Adores

DISPLAY LCD INTERFACE 4 BITS

Para ler ou escrever comandos no display LCD (4 bits) é

preciso seguir a seguinte sequência de passos:

1. Levar o pino R/W (Read/Write) a 0 para escrita, 1 para leitura. Aterra-se

o pino se não há necessidade de monitorar a resposta do LCD;

2. Escrever os dados nos pinos correspondentes a via de dados do LCD;

3. Levar o pino RS (Register Select) para 0 ou 1 (instrução ou caractere);

4. Levar o pino E (Enable) a 1 e em seguida a 0 para transferir os dados.

5. Aguardar o tempo necessário para transferir os dados e o módulo executar o comando. 2ms são suficientes;

6. Repetir os passos anteriores com os 4 LSBs (desloca-se a variável responsável pelo armazenamento dos dados 4 vezes para a esquerda.

54

www.mecatronicadegaragem.blogspot.com.br

Page 55: Micro Control Adores

DISPLAY LCD INTERFACE 4 BITS

Como o display LCD inicia em 8 bits mas apenas 4 bits estão conectados, é preciso enviar a primeira instrução de modo de utilização 2 vezes. Na primeira vez são enviados apenas os 4 bits que informam que será utilizada interface de 4 bits;

A partir do segundo comando, quando o módulo LCD já está operando em 4 bits, envia-se primeiro os 4 MSBs e depois os 4 LSBs. Envia-se então o comando de modo de utilização novamente;

As intruções de modo de utilização e configuração do cursor devem estar na rotina de configuração do módulo, e ser usada antes de começar a operar o display normalmente;

Quando o LCD é energizado, é executada a rotina de inicialização interna do display, por isso é preciso adicionar um atraso na nossa rotina de configuração do LCD, para garantir que o módulo não esteja ocupado no momento em que começa a receber comandos do microcontrolador. 10ms são suficientes. 55

www.mecatronicadegaragem.blogspot.com.br

Page 56: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 #define DADOS_LCD P1 // Define DADOS_LCD como P1 sbit RS = P1^2; // Pino de instrucao ou caractere do LCD. sbit E = P1^3; // Pino de enable do LCD unsigned char i = 1; // Variavel usada para enviar comandos ao LCD. Inicia // em 1 porque a interface inicia como 8 bits void atraso_ms(int i) { // TC0 configurado para uma temporizacao de

for(i; i > 0; i--) { // aproximadamente 1ms * i (cristal de 11,0592MHz)

TMOD=(TMOD & 0xF0) | 0x01; TH0=0xFC; TL0=0x66; TR0=1; while(!TF0); TR0=0; TF0=0; } // Nao se preocupe em entender esta funcao agora. Os

} // temporizadores/contadores serao discutidos mais adiante

void cmd_LCD(unsigned char dado, char tipo) { // Funcao p/ enviar comandos ao LCD DADOS_LCD = dado; // Envia 4 MSBs for(; i != 0; i--) { if (tipo == 0) RS = 0; else RS = 1; // Seleciona instrucao ou caractere E = 1; E = 0; // Transfere dados atraso_ms(2); // Aguarda tempo de execucao dos comandos DADOS_LCD = dado << 4; // Envia os 4 LSBs } i = 2; // Na primeira vez que a funcao for executada sera enviado apenas os } // 4 MSBs. A partir da segunda serao enviados primeiro os 4 MSBs e // depois os 4 LSBs

56

Acionamento de display LCD interface 4 bits

// CONTINUA...

www.mecatronicadegaragem.blogspot.com.br

Page 57: Micro Control Adores

void config_LCD() { // Funcao de configuracao do LCD atraso_ms(10); // Aguarda execucao de inicializacao interna do display cmd_LCD(0x28,0); // Chaveia para modo 4 bits cmd_LCD(0x28,0); // Envia instrucao de modo de utilizacao cmd_LCD(0x0D,0); // Cursor piscante cmd_LCD(0x01,0); // Limpa o display cmd_LCD(0x80,0); // Escreve na primeira linha a esquerda }

void escreve_LCD(char *c) { // Funcao p/ escrever strings no LCD for(; *c != ‘\0’; c++) cmd_LCD(*c,1); } main() { config_LCD(); escreve_LCD(‘’Interface de”); cmd_LCD(0xC0,0); // Escreve na segunda linha a esquerda escreve_LCD(“dados de 4 bits”); while(1); }

57

Acionamento de display LCD interface 4 bits

www.mecatronicadegaragem.blogspot.com.br

Page 58: Micro Control Adores

TECLADO MATRICIAL 4X4

Uma forma muito comum de entrada de dados em um sistema microcontrolado é através de teclas (botões). Quando o número delas é pequeno, cada uma pode ser associada a um pino de entrada do microcontrolador.

Entretanto, quando o número de teclas se torna grande não é recomendado desperdiçar pinos de entrada. Utilizando um teclado matricial de 4x4 teclas, ao invés de se empregar 16 pinos para leitura das referidas teclas, emprega-se 8 pinos.

58

www.mecatronicadegaragem.blogspot.com.br

Page 59: Micro Control Adores

TECLADO MATRICIAL 4X4

Os botões são arranjados em matriz (colunas e linhas), e o teclado é lido por varredura através de um CI decodificador ou um microcontrolador. O pressionar de uma tecla produzirá um curto entre uma coluna e uma linha e o sinal da coluna se refletirá na linha (ou vice-versa).

A ideia é trocar sucessivamente o nível lógico das colunas e verificar se esse nível lógico aparece nas linhas (ou vice-versa). Se por exemplo houver alteração no nível lógico de alguma linha significa que alguma tecla foi pressionada e, então, com base na coluna habilitada e na linha, se sabe qual tecla foi pressionada.

59

www.mecatronicadegaragem.blogspot.com.br

Page 60: Micro Control Adores

TECLADO MATRICIAL 4X4

60

www.mecatronicadegaragem.blogspot.com.br

Page 61: Micro Control Adores

TECLADO MATRICIAL 4X4

Para realizar a varredura de um teclado matricial, os bits (linhas

e colunas) devem iniciar em 1, e deve-se seguir a seguinte

sequência de passos:

1. Levar o nível lógico da primeira coluna a 0;

2. Aguardar um tempo não muito pequeno para evitar leitura de

ruídos e nem muito grande a ponto de não detectar o pressionar de uma tecla. 50ms são suficientes;

3. Testar cada linha em relação a essa coluna. Caso uma linha esteja em 0, um botão foi pressionado e deve-se retornar o valor referente ao botão dessa linha e coluna específicas;

4. Levar essa coluna a nível lógico 1 novamente;

5. Repetir os passos anteriores para cada uma das colunas restantes.

61

www.mecatronicadegaragem.blogspot.com.br

Page 62: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 #define DADOS_LCD P1 // Define DADOS_LCD como P1 #define setBit(adress,bit) (adress|=(1<<bit)) // Seta bit do endereco selecionado #define clrBit(adress,bit) (adress&=~(1<<bit)) // Zera bit do endereco selecionado #define tstBit(adress,bit) (adress&(1<<bit)) // Testa bit do endereco selecionado

unsigned char teclado[4][4] = {{0x01, 0x02, 0x03, 0x0F}, // De acordo com o botao {0x04, 0x05, 0x06, 0x0E}, // pressionado sera enviado o {0x07, 0x08, 0x09, 0x0D}, // elemento correspondente {0x0A, 0x00, 0x0B, 0x0C}}; // da matriz

void atraso_ms(int i) { // TC0 configurado para uma temporizacao de

for(i; i > 0; i--) { // aproximadamente 1ms * i (cristal de 11,0592MHz)

TMOD=(TMOD & 0xF0) | 0x01; TH0=0xFC; TL0=0x66; TR0=1; while(!TF0); TR0=0; TF0=0; } // Nao se preocupe em entender esta funcao agora. Os

} // temporizadores/contadores serao discutidos mais adiante 62

Varredura de Teclado Matricial 4x4

// CONTINUA...

www.mecatronicadegaragem.blogspot.com.br

Page 63: Micro Control Adores

unsigned char lerTeclado() { unsigned char n, j, valor, linha; for(n=0; n<4; n++) { // Alterna as colunas clrBit(P2,n); // Zera bit da coluna para testar as linhas que estao em 1. // Caso um botao seja pressionado a linha tambem valera 0 atraso_ms(50); // Atraso para varredura mais lenta e trata efeito bounce linha = P2 >> 4; // Elimina informação sobre as colunas for(j=0; j<4; j++) if(!tstBit(linha,j)) valor = teclado[j][n]; // Testa cada linha j em // relacao a coluna n. Se um botao for pressionado, retorna o valor correspondente setBit(P2,n); // Seta o bit da coluna zerado anteriormente } return tecla; // Retorna botao pressionado } main() { unsigned char tecla; P2 = 0xFF; // Por padrao todas as E/S's ja iniciam em 1 while(1) { n = lerTeclado(); P0 = tecla; // Escreve na P0 o valor do botao pressionado } }

63

Varredura de Teclado Matricial 4x4

www.mecatronicadegaragem.blogspot.com.br

Page 64: Micro Control Adores

EXERCÍCIO PROPOSTO

Faça o programa que escreva no display LCD o caractere correspondente ao botão que for pressionado. O programa deve ter as seguintes restrições: Os caracteres devem aparecer um após o outro; Quando terminar a primeira linha os caracteres devem ser

escritos na linha de baixo; Quando terminar as duas linhas o display deve ser limpo e a

escrita iniciar da primeira posição da primeira linha.

64

www.mecatronicadegaragem.blogspot.com.br

Page 65: Micro Control Adores

INTERRUPÇÕES

São eventos internos ou externos que provocam a interrupção do fluxo normal do programa e o desvia para um endereço específico da memória, para atender o evento que gerou a interrupção;

As interrupções permitem que o processador foque em sua atividade principal sem precisar travar o programa em uma temporização ou verificar constantemente periféricos e outras fontes de interrupção;

O programa principal torna-se mais simples e eficiente.

65

www.mecatronicadegaragem.blogspot.com.br

Page 66: Micro Control Adores

INTERRUPÇÕES

Programa sem uso de interrupções

Programa com uso de interrupções

66

www.mecatronicadegaragem.blogspot.com.br

Page 67: Micro Control Adores

INTERRUPÇÕES

O 8051 provê 5 fontes de interrupção + reset (endereço 00H).

67

www.mecatronicadegaragem.blogspot.com.br

Page 68: Micro Control Adores

INTERRUPÇÕES

Para utilizar interrupções, é preciso habilitá-las. O RFE responsável por esta função é o IE (Interrupt Enable).

Para habilitar o uso das interrupções, deve-se setar EA

(Enable All). Esse bit apenas permite o uso das interrupções, para efetivamente habilitar uma interrupção deve-se setar o bit correspondente.

ES: Enable Serial;

ETi: Enable Timer i;

EXi: Enable External i; 68

www.mecatronicadegaragem.blogspot.com.br

Page 69: Micro Control Adores

INTERRUPÇÕES

Na programação em Assembly alguns cuidados são

necessários:

Desviar para um endereço de memória que não será utilizado, caso a rotina de interrupção seja maior que 8 bytes;

Salvar na pilha conteúdo de registradores utilizados na rotina de interrupção (A, B, R0, R1...);

Retornar da interrupção.

Em programação C, o compilador se encarrega desses

cuidados.

69

www.mecatronicadegaragem.blogspot.com.br

Page 70: Micro Control Adores

INTERRUPÇÕES

Para utilizar interrupções em linguagem C deve-se:

1. Habilitar as interrupções desejadas através do RFE IE;

2. Configurar as fontes de interrupção desejadas tais como temporizadores, interrupções externas e comunicação serial;

3. Escrever a rotina de interrupção de acordo com a sintaxe exibida no slide a seguir.

70

www.mecatronicadegaragem.blogspot.com.br

Page 71: Micro Control Adores

INTERRUPÇÕES

void nome_interrupção(void) interrupt número_interrupção

{ // rotina aqui }

nome_interrupção pode ser qualquer nome definido pelo programador;

número_interrupção é o número da interrupção de acordo com a tabela abaixo.

Interrupções não aceitam passagem nem retorno de variáveis. Para usar uma variável na rotina de interrupção, ela deve ser global.

71

www.mecatronicadegaragem.blogspot.com.br

Page 72: Micro Control Adores

PRIORIDADE DAS INTERRUPÇÕES

Ocasionalmente podem ocorrer mais de uma solicitação de interrupção ao mesmo tempo;

Por padrão o 8051 adota como prioridade a sequência:

EX0>ET0>EX1>ET1>ES

No entanto, é possível dar máxima prioridade a uma ou mais fontes de interrupção. O registrador responsável por esta função é o RFE IP.

72

www.mecatronicadegaragem.blogspot.com.br

Page 73: Micro Control Adores

PRIORIDADE DAS INTERRUPÇÕES

Para dar alta prioridade a uma fonte de interrupção deve-se setar o bit correspondente.

PS: Priority Serial;

PTi: Priority Timer i;

PXi: Priority External i;

73

www.mecatronicadegaragem.blogspot.com.br

Page 74: Micro Control Adores

PRIORIDADE DAS INTERRUPÇÕES

Nada pode interromper uma interrupção de alta prioridade, nem mesmo outra interrupção de alta prioridade;

Uma interrupção de alta prioridade pode interromper uma interrupção de baixa prioridade, e quando terminar sua rotina, volta para o ponto em que parou na interrupção de baixa prioridade;

Se duas interrupções ocorrerem ao mesmo tempo, a de maior prioridade é atendida primeiro. Se forem de igual prioridade, é seguida a ordem padrão do 8051.

74

www.mecatronicadegaragem.blogspot.com.br

Page 75: Micro Control Adores

PRIORIDADE DAS INTERRUPÇÕES

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 main() { EA = 1; // Habilita uso de interrupcoes EX0 = 1; // Habilita a interrupcao externa 0 ES = 1; // Habilita interrupcao da comunicacao serial PS = 1; // Configura interrupção da serial como alta prioridade // Caso ocorra ao mesmo tempo que a interrupcao externa 0, a // interrupcao da serial sera atendida primeiro // Caso ocorra enquanto atende a rotina da interrupcao externa 0, // interrompe a rotina da interrupcao externa 0 e vai para a rotina // da serial. Quando terminar volta para a rotina da interrupcao // externa 0 . . . }

75

Habilitação das interrupções externa 0 e serial. A serial é

configurada como alta prioridade.

www.mecatronicadegaragem.blogspot.com.br

Page 76: Micro Control Adores

INTERRUPÇÕES EXTERNAS

Os pinos INT0 e INT1 podem ser utilizados com função de pedido de interrupção por dispositivos externos;

Além de adequadamente habilitada no registrador IE, uma interrupção externa deve ser configurada para disparo por nível ou por transição de nível;

Esta é a função dos bits IT0 e IT1 do RFE TCON.

76

www.mecatronicadegaragem.blogspot.com.br

Page 77: Micro Control Adores

INTERRUPÇÕES EXTERNAS

ITi (Bit de controle do tipo de interrupção): -1 configura a interrupção externa para ser disparada por

transição de nível 1 para 0; -0 configura a interrupção para ser disparada por nível 0.

IEi (Flag de transição da interrupção): Em interrupção por nível, são setadas quando o pino INTi é

1 e resetadas quando INTi é 0. Por transição, são setadas a cada pedido de interrupção e resetadas automaticamente na rotina de interrupção. Com interrupção desabilitada podem ser testadas via software, e precisam ser resetadas no programa no caso de interrupção por transição.

77

www.mecatronicadegaragem.blogspot.com.br

Page 78: Micro Control Adores

INTERRUPÇÕES EXTERNAS

78

www.mecatronicadegaragem.blogspot.com.br

Page 79: Micro Control Adores

INTERRUPÇÕES EXTERNAS

Para utilizar interrupções externas em linguagem C deve-se:

1. Habilitar o uso de interrupções (bit EA);

2. Habilitar as interrupções desejadas (bits EX0 e/ou EX1) e prioridade (bit IP);

3. Configurar disparo por nível (bit ITi = 0) ou por transição (bit ITi = 1);

4. Escrever a rotina de interrupção de acordo com o slide 71.

79

www.mecatronicadegaragem.blogspot.com.br

Page 80: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 sbit BOTAO = P3^2; // Define o pino P3.2 como BOTAO void intExterna0() interrupt 0 // Rotina da interrupcao externa 0 { P1++; // Incrementa uma contagem binaria na P1 enquanto } // o botao estiver pressionado main() { EA = 1; // Habilita uso de interrupcoes EX0 = 1; // Habilita a interrupcao externa 0 IT0 = 0; // Configura disparo por nivel while(1); // Aguarda interrupcoes }

Interrupção externa 0 por nível

80

www.mecatronicadegaragem.blogspot.com.br

Page 81: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 sbit BOTAO = P3^2; // Define o pino P3.2 como BOTAO void intExterna0() interrupt 0 // Rotina da interrupcao externa 0 { P1++; // Incrementa uma contagem binaria na P1 cada vez } // que o botao for pressionado main() { EA = 1; // Habilita uso de interrupcoes EX0 = 1; // Habilita a interrupcao externa 0 IT0 = 1; // Configura disparo por transicao while(1); // Aguarda interrupcoes }

Interrupção externa 0 por transição

81

www.mecatronicadegaragem.blogspot.com.br

Page 82: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 sbit BOTAO = P3^2; // Define o pino P3.2 como BOTAO main() { EA = 0; // Desabilita uso de interrupcoes (por padrao esse bit ja e // inicializado em 0) IT0 = 1; // Configura disparo por transicao while(1) { if(IE0) // Testa interrupcao externa 0 (P3.2) { P1++; // Incrementa uma contagem binaria na P1 IE0=0; // Reseta flag } }

Teste da flag de interrupção (por transição) com

interrupções desabilitadas

82

www.mecatronicadegaragem.blogspot.com.br

Page 83: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 sbit BOTAO = P3^2; // Define o pino P3.2 como BOTAO main() { EA = 0; // Desabilita uso de interrupcoes (por padrao esse bit ja e // inicializado em 0) IT0 = 0; // Configura disparo por nível (esse tambem) while(1) { if(IE0) // Testa interrupcao externa 0 (P3.2) { P1++; // Incrementa uma contagem binaria na P1 } // Nesse caso nao e preciso resetar a flag pois // ela ja e resetada quando o pino INT0 for 1 }

Teste da flag de interrupção (por nível) com interrupções

desabilitadas

83

www.mecatronicadegaragem.blogspot.com.br

Page 84: Micro Control Adores

EXERCÍCIO PROPOSTO

A partir do circuito abaixo, faça o programa que determine qual das 8 linhas está solicitando interrupção e escreva esse valor na P1.

84

www.mecatronicadegaragem.blogspot.com.br

Page 85: Micro Control Adores

EXERCÍCIO PROPOSTO

Desenvolva um programa de segurança contra abertura de portas/janelas. O programa deve conter as seguintes funcionalidades: Usar interrupção externa; Monitorar 8 portas/janelas; Acionar um alarme (representado por um LED) quando uma

ou mais portas/janelas forem abertas; As portas/janelas que estão sendo violadas devem ser

escritas em um display LCD; O alarme só deve parar quando uma senha pré-definida de

4 dígitos for escrita através de um teclado matricial 4x4; Caso a senha esteja incorreta, deve aparecer uma

mensagem no display de senha incorreta por 3 segundos e depois retornar para a mensagem de monitoramento das portas/janelas.

85

www.mecatronicadegaragem.blogspot.com.br

Page 86: Micro Control Adores

TEMPORIZADORES/CONTADORES

O 8051 provê dois temporizadores/contadores (T/C), que podem ser individualmente configurados para operação de temporização ou contagem, em diferentes modos;

Um contador pode ser utilizado em operações como contar peças em um processo industrial;

Um temporizador geralmente é utilizado quando é preciso gerar um período preciso de tempo.

86

www.mecatronicadegaragem.blogspot.com.br

Page 87: Micro Control Adores

TEMPORIZADORES/CONTADORES

Operando como contador, um pedido de interrupção é solicitado após o contador atingir um número predeterminado de pulsos negativos;

Como temporizador, o pedido de interrupção é solicitado após ser atingido um período de tempo predeterminado;

Como contador, a contagem é medida diretamente pelos pinos T0 (P3.4) e T1 (P3.5). Como temporizador, o tempo é contado a partir do clock da CPU dividido por 12.

87

www.mecatronicadegaragem.blogspot.com.br

Page 88: Micro Control Adores

TEMPORIZADORES/CONTADORES

Geração da base de tempo primária para os T/C’s do 8051

(modo temporizador)

88

www.mecatronicadegaragem.blogspot.com.br

Page 89: Micro Control Adores

TEMPORIZADORES/CONTADORES

Os RFE responsáveis pela configuração dos T/C’s são o TMOD e o TCON;

TCON

Possui as flags de pedido de interrupção e os bits para ligar/desligar a temporização/contagem;

TMOD

Possui bits de controle de modo de acionamento da temporização/contagem; modo de operação (temporização ou contagem); e modo de temporização/contagem.

Não é endereçável por bit, portanto não é possível configurar os bits individualmente, é preciso configurar todos de uma vez ou utilizar lógica OU/E para configurar os bits desejados.

89

www.mecatronicadegaragem.blogspot.com.br

Page 90: Micro Control Adores

TEMPORIZADORES/CONTADORES

90

www.mecatronicadegaragem.blogspot.com.br

Page 91: Micro Control Adores

TEMPORIZADORES/CONTADORES

91

Gatei Determina o modo de habilitação do T/Ci:

-0: A temporização ocorre enquanto o bit TRi de TCON for 1 -1: A temporização ocorre apenas enquanto o bit TRi de TCON for 1 e o pino INTi também for 1

C/Ti Determina operação de temporização ou contagem:

-0: Modo temporizador -1: Modo contador

M1 e M0 Determinam o modo de temporização/contagem:

M1 M0 Modo de Operação

0 0 13 bits, sendo 8 bits no RFE THi e um prescaler de 5 bits no TLi

0 1 16 bits no par de RFE THi e TLi

1 0 8 bits com recarga automática (contagem em THi e constante de recarga em TLi)

1 1 T/C0: TL0 opera como T/C de 8 bits TH0 opera como temporizador de 8 bits T/C1: Trava a temporização.

www.mecatronicadegaragem.blogspot.com.br

Page 92: Micro Control Adores

TEMPORIZADORES/CONTADORES

92

Funcionamento:

Executa uma contagem crescente nos registradores THi e TLi;

A origem dos pulsos depende do bit C/Ti. Como contador incrementa a contagem a cada borda de descida no pino Ti; como temporizador a contagem é incrementada a cada clock da CPU dividido por 12;

A habilitação da contagem está relacionada ao bit Gatei. Se resetado, o início da contagem ocorre quando o bit TRi for 1. Caso o bit Gatei esteja setado, a contagem somente ocorrerá quando o bit TRi for 1 e enquanto o pino INTi estiver em nível alto.

TRi em 1 inicia a contagem. Se TRi for 0 novamente, a contagem congela no último valor, se 1 mais uma vez, a contagem recomeça do último valor atingido;

www.mecatronicadegaragem.blogspot.com.br

Page 93: Micro Control Adores

TEMPORIZADORES/CONTADORES

93

Gate0 = 0

Gate0 = 1

www.mecatronicadegaragem.blogspot.com.br

Page 94: Micro Control Adores

TEMPORIZADORES/CONTADORES

94

Um pedido de interrupção é solicitado após a contagem atingir um estouro. O modo de contagem depende dos bits M1i e M0i.

M1 M0 Modo de Operação

0 0 Modo 0: 13 bits

0 1 Modo 1: 16 bits

1 0 Modo 2: 8 bits com recarga automática

1 1 Modo 3

T/C0: TL0 opera como T/C de 8 bits TH0 opera como temporizador de 8 bits T/C1: Trava a temporização.

www.mecatronicadegaragem.blogspot.com.br

Page 95: Micro Control Adores

TEMPORIZADORES/CONTADORES

95

Modo 0: 13 bits

A contagem é obtida através de uma contagem crescente de 8 bits (0 a 255) no RFE THi incrementada a cada estouro na pré escala de 5 bits (0 a 31) no RFE TLi. Os 3 bits mais significativos de TLi são irrelevantes.

Lembrando que o sinal que incrementa os T/C é proveniente do clock da CPU ( ) dividido por 12, utiliza-se a seguinte equação para calcular a temporização ‘T’ desejada, onde ‘n’ é o valor inicial no RFE THi:

CPUCLKTnT *12*32*)256(

CPUCLKT

www.mecatronicadegaragem.blogspot.com.br

Page 96: Micro Control Adores

TEMPORIZADORES/CONTADORES

96

Modo 0: 13 bits

www.mecatronicadegaragem.blogspot.com.br

Page 97: Micro Control Adores

TEMPORIZADORES/CONTADORES

97

Modo 1: 16 bits

A contagem é obtida através de uma contagem crescente de 16 bits (0 a 65 535) nos RFE THi e TLi.

Lembrando que o sinal que incrementa os T/C é proveniente do clock da CPU ( ) dividido por 12, utiliza-se a seguinte equação para calcular a temporização ‘T’ desejada, onde ‘n’ é o valor inicial no par de RFE THi.TLi : Obs: lembre-se de converter ‘n’ para hexadecimal e substituir o MSB em THi e o LSB em TLi.

CPUCLKTnT *12*)65536(

CPUCLKT

www.mecatronicadegaragem.blogspot.com.br

Page 98: Micro Control Adores

TEMPORIZADORES/CONTADORES

98

Modo 1: 16 bits

www.mecatronicadegaragem.blogspot.com.br

Page 99: Micro Control Adores

TEMPORIZADORES/CONTADORES

99

Modo 1: 16 bits

Temporização de 50ms utilizando um clock de 11,0592MHz

CPUCLKTnT *12*)65536(

11059200

12*)65536(05,0

11059200

1*12*)65536(05,0

11059200

1

05,0

n

n

T

sT

CPUCLK

)(004

19456

4608065536

6553646080

6553612

11059200*05,0

lhexadecimaCn

n

n

n

n

www.mecatronicadegaragem.blogspot.com.br

Page 100: Micro Control Adores

TEMPORIZADORES/CONTADORES

100

Modo 2: 8 bits com recarga automática

A contagem é obtida através de uma contagem crescente de 8 bits (0 a 255) no RFE TLi, enquanto o RFE THi mantém o valor inicial da contagem que é automaticamente recarregado no TLi a cada fim de contagem, quando o bit TFi é setado.

Lembrando que o sinal que incrementa os T/C é proveniente do clock da CPU ( ) dividido por 12, utiliza-se a seguinte equação para calcular a temporização ‘T’ desejada, onde ‘n’ é o valor inicial nos RFE TLi e THi (recarga automática):

CPUCLKTnT *12*)256(

CPUCLKT

www.mecatronicadegaragem.blogspot.com.br

Page 101: Micro Control Adores

TEMPORIZADORES/CONTADORES

101

Modo 2: 8 bits com recarga automática

www.mecatronicadegaragem.blogspot.com.br

Page 102: Micro Control Adores

TEMPORIZADORES/CONTADORES

102

Modo 2: 8 bits

Temporização de aproximadamente 200µs utilizando um clock de 11,0592MHz

CPUCLKTnT *12*)256(

11059200

12*)256(0002,0

11059200

1*12*)256(0002,0

11059200

1

0002,0

n

n

T

sT

CPUCLK

)(48

72

32,184256

25632,184

25612

11059200*0002,0

lhexadeciman

n

n

n

n

(arredonda-se para um valor inteiro)

www.mecatronicadegaragem.blogspot.com.br

Page 103: Micro Control Adores

TEMPORIZADORES/CONTADORES

103

Modo 3: Temporizador dividido

T/C0:

TH0 e TL0 operam como temporizadores separados de 8 bits cada. O cálculo para uma temporização ‘T’ é o mesmo do modo 2;

TL0 usa os bits C/T0, Gate0, TR0 e TF0 normalmente. TH0 opera apenas como temporizador utilizando os bits TF1, TR1 e o endereço de interrupção do T/C1.

T/C1:

No modo 3 “congela” sua atividade. A temporização/contagem ainda pode ser utilizada nos outros modos, mas não pode solicitar interrupção nem habilitar/desabilitar a contagem pois os bits TF1, TR1 e o endereço de interrupção estão emprestados ao T/C0;

A contagem será desativada entrando no modo 3 e reativada voltando ao modo original.

www.mecatronicadegaragem.blogspot.com.br

Page 104: Micro Control Adores

TEMPORIZADORES/CONTADORES

104

Modo 3: Temporizador dividido

www.mecatronicadegaragem.blogspot.com.br

Page 105: Micro Control Adores

TEMPORIZADORES/CONTADORES

105

Modo 0 (13 bits):

Conta de 0 a 8,888ms (cristal 11,0592MHz); Pouco usual, é mantido para manter compatibilidade entre os

microcontroladores da família 8051.

Modo 1 (16 bits):

Conta de 0 a 71ms (cristal 11,0592MHz); Mais utilizado para temporizações maiores.

Modo 2 (8 bits):

Conta de 0 a 277μs (cristal 11,0592MHz); Utilizado para temporizações menores e gerar baud rate.

Modo 3 (Temporizador dividido):

TH0 e TL0 contam de 0 a 277μs (cristal 11,0592MHz); TC1 trava; Pouco usual. Pode ser utilizado quando houver necessidade de um T/C

de 8 bits, um temporizador de 8 bits e um gerador de baud rate para a comunicação serial.

www.mecatronicadegaragem.blogspot.com.br

Page 106: Micro Control Adores

TEMPORIZADORES/CONTADORES

106

A partir deste ponto não será mais detalhado o

modo 0 por não ser um modo de operação usual;

O modo 3, apesar de não usual, será discutido por

não haver muitos exemplos de aplicação na

literatura sobre o 8051.

www.mecatronicadegaragem.blogspot.com.br

Page 107: Micro Control Adores

TEMPORIZADORES/CONTADORES

107

Temporização:

Para calcular o valor inicial a ser carregado nos RFE THi e TLi para uma determinada temporização, deve-se utilizar a equação para o modo que será utilizado, conforme os slides anteriores.

Contagem:

Para realizar uma contagem, basta subtrair o valor da contagem “c” desejada pelos RFE THi e TLi de acordo com o modo utilizado, conforme o slide a seguir.

www.mecatronicadegaragem.blogspot.com.br

Page 108: Micro Control Adores

TEMPORIZADORES/CONTADORES

108

Valores ‘n’ em THi e TLi para uma contagem ‘c’

Modo 1: 0 < c ≤ 65 536

n = 65 536 – c

Obs: lembre-se de converter ‘n’ para hexadecimal e substituir o MSB em THi e o LSB em TLi.

Modos 2 e 3: 0 < c ≤ 256

n = 256 – c

Para testar uma contagem basta conectar um botão entre o pino Ti e GND.

www.mecatronicadegaragem.blogspot.com.br

Page 109: Micro Control Adores

TEMPORIZADORES/CONTADORES

Para utilizar interrupções dos T/C’s em linguagem C deve-se:

1. Habilitar o uso de interrupções (bit EA);

2. Habilitar as interrupções desejadas (bits ET0 e/ou ET1);

3. Configurar o RFE TMOD: Gate em 0 habilitação do T/C depende apenas do bit TR,

em 1 depende de TR e do pino INT estar em nível alto; C/T em 0 o T/C opera como temporizador, em 1 opera

como contador; Configurar o modo de contagem nos bits M1 e M0 e

calcular o valor inicial dos RFE TH e TL.

4. Escrever a rotina de interrupção de acordo com o slide 71. 109

www.mecatronicadegaragem.blogspot.com.br

Page 110: Micro Control Adores

TEMPORIZADORES/CONTADORES

As constantes utilizadas para as temporizações

dos códigos a seguir foram calculadas

considerando um cristal de 11,0592MHz

110

www.mecatronicadegaragem.blogspot.com.br

Page 111: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 void intTC0() interrupt 1 // Rotina de interrupcao do TC0. Ocorre a cada 50ms { TH0 = 0x4C; // Recarga da constante de tempo TL0 = 0x00; // Recarga da constante de tempo P1++; // Incrementa uma contagem binaria na P1 } main() { EA = 1; // Habilita uso de interrupcoes ET0 = 1; // Habilita a interrupcao do TC0 TMOD = 0x01; // Configura TC0 como temporizador, modo 1, ativado // apenas pelo bit TR0 TH0 = 0x4C; // Constante de tempo para 50ms TL0 = 0x00; // Constante de tempo para 50ms TR0 = 1; // Ativa temporizacao while(1); // Aguarda interrupcao }

111

Interrupção do TC0 como temporizador em modo 1 ativado

apenas pelo bit TR0

www.mecatronicadegaragem.blogspot.com.br

Page 112: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 void intTC0() interrupt 1 // Rotina de interrupcao do TC0. Ocorre quando { // houver uma transicao de 1 para 0 em T0 TH0 = 0xFF; // Recarga da constante de contagem TL0 = 0xFF; // Recarga da constante de contagem P1++; // Incrementa uma contagem binaria na P1 } main() { EA = 1; // Habilita uso de interrupcoes ET0 = 1; // Habilita a interrupcao do TC0 TMOD = 0x05; // Configura TC0 como contador, modo 1, ativado // apenas pelo bit TR0 TH0 = 0xFF; // Constante para contagem n=1 TL0 = 0xFF; // Constante para contagem n=1 TR0 = 1; // Ativa contagem while(1); // Aguarda interrupcao }

112

Interrupção do TC0 como contador em modo 1 ativado apenas

pelo bit TR0

www.mecatronicadegaragem.blogspot.com.br

Page 113: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 void intTC0() interrupt 1 // Rotina de interrupcao do TC0. Ocorre apenas { // se INT0 for 1, a cada 50ms TH0 = 0x4C; // Recarga da constante de tempo TL0 = 0x00; // Recarga da constante de tempo P1++; // Incrementa uma contagem binaria na P1 } main() { EA = 1; // Habilita uso de interrupcoes ET0 = 1; // Habilita a interrupcao do TC0 TMOD = 0x09; // Configura TC0 como temporizador, modo 1, ativado // pelo bit TR0, enquanto o pino INT0 for 1 TH0 = 0x4C; // Constante de tempo para 50ms TL0 = 0x00; // Constante de tempo para 50ms TR0 = 1; // Ativa temporizacao while(1); // Aguarda interrupcao }

113

Interrupção do TC0 como temporizador em modo 1 ativado pelo

bit TR0 e o pino INT0

www.mecatronicadegaragem.blogspot.com.br

Page 114: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 void intTC0() interrupt 1 // Rotina de interrupcao do TC0. Ocorre apenas se INT0 { // for 1 e se houver uma transição de 1 para 0 em T0 TH0 = 0xFF; // Recarga da constante de contagem TL0 = 0xFF; // Recarga da constante de contagem P1++; // Incrementa uma contagem binaria na P1 } main() { EA = 1; // Habilita uso de interrupcoes ET0 = 1; // Habilita a interrupcao do TC0 TMOD = 0x0D; // Configura TC0 como contador, modo 1, ativado // pelo bit TR0, enquanto o pino INT0 for 1 TH0 = 0xFF; // Constante para contagem n=1 TL0 = 0xFF; // Constante para contagem n=1 TR0 = 1; // Ativa contagem while(1); // Aguarda interrupcao }

114

Interrupção do TC0 como contador em modo 1 ativado pelo bit

TR0 e o pino INT0

www.mecatronicadegaragem.blogspot.com.br

Page 115: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 void intTC0() interrupt 1 // Rotina de interrupcao do TC0. Ocorre a cada 200us { P1++; // Incrementa uma contagem binaria na P1 } main() { EA = 1; // Habilita uso de interrupcoes ET0 = 1; // Habilita a interrupcao do TC0 TMOD = 0x02; // Configura TC0 como temporizador, modo 2, ativado // apenas pelo bit TR0 TL0 = 0x48; // Constante de tempo para 200us TH0 = 0x48; // Recarga automatica para 200us TR0 = 1; // Ativa temporizacao while(1); // Aguarda interrupcao }

115

Interrupção do TC0 como temporizador em modo 2 ativado

apenas pelo bit TR0

www.mecatronicadegaragem.blogspot.com.br

Page 116: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 void intTC0() interrupt 1 // Rotina de interrupcao do TC0. Ocorre quando { // houverem duas transicoes de 1 para 0 em T0 P1++; // Incrementa uma contagem binaria na P1 } main() { EA = 1; // Habilita uso de interrupcoes ET0 = 1; // Habilita a interrupcao do TC0 TMOD = 0x06; // Configura TC0 como contador, modo 2, ativado // apenas pelo bit TR0 TL0 = 0xFE; // Constante para contagem n=2 TH0 = 0xFE; // Recarga automatica para contagem n=2 TR0 = 1; // Ativa contagem while(1); // Aguarda interrupcao }

116

Interrupção do TC0 como contador em modo 2 ativado apenas

pelo bit TR0

www.mecatronicadegaragem.blogspot.com.br

Page 117: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 void intTC0() interrupt 1 // Rotina de interrupcao do TC0. Ocorre apenas { // se INT0 for 1, a cada 50ms P1+; // Incrementa uma contagem binaria na P1 } main() { EA = 1; // Habilita uso de interrupcoes ET0 = 1; // Habilita a interrupcao do TC0 TMOD = 0x0A; // Configura TC0 como temporizador, modo 2, ativado // pelo bit TR0, enquanto o pino INT0 for 1 TL0 = 0x48; // Constante de tempo para 200us TH0 = 0x48; // Recarga automatica para 200us TR0 = 1; // Ativa temporizacao while(1); // Aguarda interrupcao }

117

Interrupção do TC0 como temporizador em modo 2 ativado pelo

bit TR0 e o pino INT0

www.mecatronicadegaragem.blogspot.com.br

Page 118: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 void intTC0() interrupt 1 // Rotina de interrupcao do TC0. Ocorre apenas se INT0 { // for 1 e se houverem duas transicoes de 1 para 0 em T0 P1++; // Incrementa uma contagem binaria na P1 } main() { EA = 1; // Habilita uso de interrupcoes ET0 = 1; // Habilita a interrupcao do TC0 TMOD = 0x0E; // Configura TC0 como contador, modo 2, ativado // pelo bit TR0, enquanto o pino INT0 for 1 TL0 = 0xFE; // Constante para contagem n=2 TH0 = 0xFE; // Recarga automatica para contagem n=2 TR0 = 1; // Ativa contagem while(1); // Aguarda interrupcao }

118

Interrupção do TC0 como contador em modo 2 ativado pelo bit

TR0 e o pino INT0

www.mecatronicadegaragem.blogspot.com.br

Page 119: Micro Control Adores

#include <reg51.h> // Biblioteca de nomes dos bits/bytes dos RFE do 8051 int i = 0; // i e definido como global porque sera usado em rotina de interrupcao

void atraso_1s(void) // Funcao para atraso de aproximadamente 1s { int j; TMOD = (0x0F & TMOD) | 0x10; // Configura TC1 em modo 1 sem afetar TC0 for(j=0; j<20; j++) { TH1 = 0x4C; // Constante de tempo para 50ms TL1 = 0x00; // Constante de tempo para 50ms while(TH1 != 0xFE); // ** Próximo slide explica essa instrução } TMOD = (0x0F & TMOD) | 0x30; // Trava TC1 alternando para modo } // 3 sem afetar TC0 // CONTINUA...

119

TC0 em modo 3, TL0 como contador de 8 bits (interrupção do

TC0) e TH0 como temporizador de 8 bits (interrupção do TC1).

T/C1 utilizado para gerar um atraso de 1s (sem interrupção)

www.mecatronicadegaragem.blogspot.com.br

Page 120: Micro Control Adores

Como a flag de interrupção TR1 esta “emprestada” ao TH0, deve-se testar diretamente os RFE TH1 e TL1;

Não pode-se testar um valor exato como TH1 e TL1 iguais a 0xFF porque nesse instante a CPU pode estar ocupada com uma rotina de interrupção ao invés do programa principal;

Por isso testa-se durante todo o tempo em que TH1 vale 0xFE e os 256 valores de TL1. Caso haja uma rotina de interrupção com muitas instruções, deve-se testar um intervalo maior de tempo. Usando este recurso a temporização não é muito precisa.

Continuação do programa no próximo slide 120

TC0 em modo 3, TL0 como contador de 8 bits (interrupção do

TC0) e TH0 como temporizador de 8 bits (interrupção do TC1).

T/C1 utilizado para gerar um atraso de 1s (sem interrupção)

www.mecatronicadegaragem.blogspot.com.br

Page 121: Micro Control Adores

void intTC0() interrupt 1 { // Rotina de interrupcao vinculada ao TL0. Ocorre // quando houver uma transicao de 1 para 0 em T0 TL0 = 0xFF; // Recarga para contagem n=1 P0+; // Incrementa uma contagem binaria na P0 } void intTC1() interrupt 3 { // Rotina de interrupcao vinculada ao TH0. Ocorre // a cada 200us TL0 = 0x48; // Recarga para 200us P1++; // Incrementa uma contagem binaria na P1 } main() { IE = 0x8A; // Habilita uso de interrupcoes, interrupcao TC0 e TC1 TMOD = 0x37; // TC1 travado. TL0 como contador ativo por TR0. TH0 como // temporizador ativo por TR1 TH0 = 0x48; // Constante de tempo para 200us TL0 = 0xFF; // Constante para contagem n=1 TR0 = 1; // Ativa contagem TR1 = 1; // Ativa temporizacao while(1) { atraso_1s(); P2++; // Incrementa contagem binaria na P2 } }

121

TC0 em modo 3, TL0 como contador de 8 bits (interrupção do

TC0) e TH0 como temporizador de 8 bits (interrupção do TC1).

T/C1 utilizado para gerar um atraso de 1s (sem interrupção)

www.mecatronicadegaragem.blogspot.com.br

Page 122: Micro Control Adores

#include <reg51.h> // Biblioteca padrão de nomes dos RSFs do 8051 sbit LED = P0^0; // Define LED como o pino 0 da P0

void atraso_ms(int i) { // TC0 configurado para uma temporizacao de for(i; i > 0; i--){ // aproximadamente 1ms * i (cristal de 11,0592MHz) TMOD = (0x0F & TMOD) | 0x10; // Configura TC1 em modo 1 sem afetar TC0 TH0=0xFC; // Constante de tempo para 1ms TL0=0x66; // Constante de tempo para 1ms TR0=1; // Ativa temporizacao while(!TF0); // Aguarda terminar temporizacao de 1ms TR0=0; // Desativa temporizacao TF0=0; // Zera a flag de fim de temporizacao } }

main() { while(1) { atraso_ms(1000); // Atraso de 1s LED = !LED; // Apaga/acende o LED } }

122

TC0 para gerar um atraso de 1ms*i com interrupções desabilitadas

www.mecatronicadegaragem.blogspot.com.br

Page 123: Micro Control Adores

EXERCÍCIO PROPOSTO

Escreva um programa que mostre as horas, minutos e segundos em um display LCD no formato hh:mm:ss.

123

www.mecatronicadegaragem.blogspot.com.br

Page 124: Micro Control Adores

COMUNICAÇÃO SERIAL

Uma necessidade comum em sistemas microcontrolados é a troca de informação entre dispositivos. Pode-se transmitir palavras de modo paralelo utilizando-se um fio para cada bit;

Contudo é inconveniente utilizar uma grande quantidade de fios para a transmissão de dados. Utiliza-se então a comunicação serial, onde os bits são transmitidos um após o outro em uma linha única. A desvantagem é que a comunicação serial é mais lenta comparada a paralela.

Cada vez mais está sendo usada a interface USB ao invés

dos padrões mais antigos. Vários microcontroladores

suportam esse protocolo, inclusive microcontroladores da

família 8051. Procure saber mais sobre essa tecnologia. 124

www.mecatronicadegaragem.blogspot.com.br

Page 125: Micro Control Adores

COMUNICAÇÃO SERIAL

O 8051 dispõe de um canal de comunicação serial com diversos recursos como: 4 modos de operação; Full duplex; Programável; Compatibilidade com o padrão RS-232 (exceto pelos níveis

de tensão); Pode trabalhar com interrupção.

Portanto, não é preciso se preocupar em desenvolver uma comunicação serial a partir do zero, pois o 8051 faz isso por nós. Basta configurar essa programação de acordo com nossa necessidade.

125

www.mecatronicadegaragem.blogspot.com.br

Page 126: Micro Control Adores

COMUNICAÇÃO SERIAL

Para comunicação com dispositivos padrão RS-232 utiliza-se conversores de níveis lógicos tais como o MAX232. Ele converte +5V para +12V e vice-versa, 0V para -12V e vice-versa, que é o padrão da comunicação serial RS-232.

126

www.mecatronicadegaragem.blogspot.com.br

Page 127: Micro Control Adores

COMUNICAÇÃO SERIAL

Os registradores de transmissão/recepção da porta serial são acessíveis através do RFE SBUF. Fisicamente existem dois SBUF mas para o software apenas um. Dependendo da instrução, a CPU sabe qual SBUF deve ser usado;

Toda vez que o circuito recebe um byte, ele o apresenta no SBUF e todo byte escrito no SBUF é imediatamente transmitido para a porta serial.

127

x = SBUF; // O byte recebido via serial e copiado para a variavel ‘x’ SBUF = x; // O byte da variavel ‘x’ e transmitido para a porta serial

www.mecatronicadegaragem.blogspot.com.br

Page 128: Micro Control Adores

COMUNICAÇÃO SERIAL

O RFE responsável pela configuração da porta serial é o SCON. Neste registrador são configurados o modo de operação, detecção de erro, reconhecimento automático de endereços em multiprocessamento e habilitação de recepção de dados;

Ainda no SCON, estão presentes nono bit em recepção/transmissão (quando habilitados) e as flags de interrupção para recepção/transmissão;

Além do SCON, existem mais 2 bits que atuam na configuração da porta serial, localizados no RFE PCON. O baud rate nos modos 1 e 3 são configurados no T/C1. Em dispositivos que possuem um T/C2 pode-se optar para gerar o baud rate a partir do T/C1 ou do TC2.

128

www.mecatronicadegaragem.blogspot.com.br

Page 129: Micro Control Adores

COMUNICAÇÃO SERIAL

FE/SM0:

FE (bit de detecção de erro) é setado automaticamente quando é detectado um bit de parada inválido. Não é resetado automaticamente, precisa ser resetado por software para limpar estado de erro. O bit SMOD0 do RFE PCON precisa estar em 1 para acessar o FE;

SM0 é referente ao modo de operação da serial. O bit SMOD0 do RFE PCON precisa estar em 0 para acessar SM0;

SM1: Referente ao modo de operação da serial;

SM2: Em 0 desabilita e em 1 habilita reconhecimento automático de endereço em multiprocessamento. Pode ser usado nos modos 2, 3 e eventualmente no 1. No modo 0 precisa estar resetado;

REN: Habilita recepção de dados. O pino RX só será efetivamente monitorado se REN for 1. Em 0 o pino RX pode ser usado para outra função;

TB8 e RB8: Nonos bits de transmissão e recepção respectivamente. Utilizados nos modos 2 e 3;

TI e RI: flags de fim de transmissão e recepção respectivamente. Não são zerados automaticamente na rotina de interrupção e devem ser resetados por software.

129

www.mecatronicadegaragem.blogspot.com.br

Page 130: Micro Control Adores

COMUNICAÇÃO SERIAL

130

Seleção do modo de operação da comunicação serial.

www.mecatronicadegaragem.blogspot.com.br

Page 131: Micro Control Adores

COMUNICAÇÃO SERIAL

Taxa de transmissão/recepção da comunicação serial

(Baud Rate):

Nos modos 1 e 3 a taxa de comunicação serial é determinada a partir do T/C1 (ou T/C2 em dispositivos que o possuam);

Geralmente programa-se o temporizador em modo 2 (recarga automática). Nesse caso a tabela do slide a seguir exibe os valores que devem ser armazenados em TL1 e TH1 para o baud rate desejado;

Não é necessário habilitar a interrupção de T/C1 nem resetar a flag TF1.

131

www.mecatronicadegaragem.blogspot.com.br

Page 132: Micro Control Adores

COMUNICAÇÃO SERIAL

132

Constantes de tempo para o T/C1 em modo recarga automática de

acordo com o baud rate desejado

Observe que os cristais de clock de 11,0592MHz e 22,1184MHz permitem uma excelente aproximação para a taxa desejada.

www.mecatronicadegaragem.blogspot.com.br

Page 133: Micro Control Adores

COMUNICAÇÃO SERIAL

Será detalhado apenas o modo 1 de operação da

comunicação serial, sem usar detecção de erro

ou reconhecimento automático de endereços em

multiprocessamento;

É suficiente para a maioria das aplicações,

porém, existem muitas outras peculiaridades

acerca da comunicação serial que não serão

tratadas aqui;

Para maiores informações consulte a folha de

dados e bibliografias complementares.

133

www.mecatronicadegaragem.blogspot.com.br

Page 134: Micro Control Adores

COMUNICAÇÃO SERIAL

A seguir será exibido um programa simples de comunicação entre dois microcontroladores 8051 ambos com o mesmo código;

A partir de dois botões o microcontrolador envia o código para acender o LED correspondente ao botão pressionado no outro microcontrolador;

Observe que a interrupção não distingue transmissão de recepção, e é preciso tratar esta situação no programa.

134

www.mecatronicadegaragem.blogspot.com.br

Page 135: Micro Control Adores

COMUNICAÇÃO SERIAL

135

www.mecatronicadegaragem.blogspot.com.br

Page 136: Micro Control Adores

#include <reg51.h> sbit botao0=P2^0; sbit botao1=P2^1; unsigned char dadosRX; void atraso_ms(int i) { // TC0 configurado para uma temporizacao for(i; i > 0; i--){ // de aproximadamente 1ms * i (cristal de 11,0592MHz) TMOD = (TMOD & 0xF0) | 0x01; TH0 = 0xFC; TL0 = 0x66; TR0 = 1; while(!TF0); TR0 = 0; TF0 = 0; } } void intSerial() interrupt 4 { // Rotina da interrupção da serial if(TI) { // TRANSMISSAO TI=0; // Reseta flag pois não e resetada automaticamente } if(RI) { // RECEPCAO RI=0 // Reseta flag pois não e resetada automaticamente P2=SBUF; // Acende LED correspondente atraves do valor recebido via serial atraso_ms(2000); P2=0xFF; // Após 2 segundos apaga o LED } } // CONTINUA...

136

Comunicação serial em modo 1 baud rate de 9600b/s

www.mecatronicadegaragem.blogspot.com.br

Page 137: Micro Control Adores

main() { SCON = 0x50; // Configura scon em modo 1, recepcao habilitada TMOD = 0x20; // Habilita TC1 para gerar baud rate em modo recarga automatica TL1 = 0xFD; // Baud rate 9600 TH1 = 0xFD; // Recarga automatica para Baud rate 9600 TR1 = 1; // Ativa temporizacao EA = 1; // Habilita uso de interrupcoes ES = 1; // Habilita a interrupcao da serial while(1) { if(!botao0) { // Se botao0 for pressionado aguarda um tempo para debounce atraso_ms(500); SBUF=0xFB; // Transmite via serial codigo para acender LED correspondente } if(!botao1) { // Se botao0 for pressionado aguarda um tempo para debounce atraso_ms(500); SBUF=0xF7; // Transmite via serial codigo para acender LED correspondente } } }

137

Comunicação serial em modo 1 baud rate de 9600b/s

www.mecatronicadegaragem.blogspot.com.br

Page 138: Micro Control Adores

COMUNICAÇÃO SERIAL

É descrito a seguir um esboço de programa

utilizando o T/C0 em modo 3 e o T/C1 como

gerador de baud rate.

TL0 como contador de 8 bits (interrupção do TC0)

e TH0 como temporizador de 8 bits (interrupção

do TC1).

138

www.mecatronicadegaragem.blogspot.com.br

Page 139: Micro Control Adores

#include <reg51.h> void intTC0() interrupt 1 { // Rotina de interrupcao vinculada ao TL0. Ocorre // quando houver uma transicao de 1 para 0 em T0 TL0 = 0xFF; // Constante para contagem n=1 // ESCREVA SEU CODIGO AQUI } void intTC1() interrupt 3 { // Rotina de interrupcao vinculada ao TH0. Ocorre // a cada 200us TL0 = 0x48; // Recarga para 200us // ESCREVA SEU CODIGO AQUI } void intSerial() interrupt 4 { // Rotina da interrupção da serial if(TI) { // TRANSMISSAO TI=0; // Reseta flag pois não e resetada automaticamente // ESCREVA SEU CODIGO AQUI } if(RI) { // RECEPCAO RI=0 // Reseta flag pois não e resetada automaticamente // ESCREVA SEU CODIGO AQUI } } // CONTINUA...

139

T/C0 em modo 3 e T/C1 utilizado para gerar baud rate para a

comunicação serial

www.mecatronicadegaragem.blogspot.com.br

Page 140: Micro Control Adores

main() { IE = 0x9A; // Habilita uso de interrupcoes, interrupcao TC0, TC1 e serial SCON = 0x50; // Configura scon em modo 1, recepcao habilitada TMOD = 0x27; // TC1 como gerador de baud rate. TL0 como contador ativo por TR0. // TH0 como temporizador ativo por TR1 TH0 = 0x48; // Constante de tempo para 200us TL0 = 0xFF; // Constante para contagem n=1 TL1 = 0xFD; // Baud rate 9600 TH1 = 0xFD; // Recarga automatica para Baud rate 9600 TR0 = 1; // Ativa contagem TR1 = 1; // Ativa temporizacao de 200us. Quando o T/C0 esta no modo 3 a // temporizacao do T/C1 ja inicia ativa e so pausa se alternar o T/C1 para o modo 3 while(1) { // ESCREVA SEU CODIGO AQUI } }

140

T/C0 em modo 3 e T/C1 utilizado para gerar baud rate para a

comunicação serial

www.mecatronicadegaragem.blogspot.com.br

Page 141: Micro Control Adores

EXERCÍCIO PROPOSTO

Escreva um programa para um microcontrolador transmissor e outro programa para um microcontrolador receptor. O transmissor deve enviar através da serial o caractere correspondente ao botão pressionado em um teclado matricial 4x4. O receptor deve escrever o dado recebido em um display LCD.

141

www.mecatronicadegaragem.blogspot.com.br

Page 142: Micro Control Adores

CONSIDERAÇÕES FINAIS

Foram apresentadas as funcionalidades básicas do 8051 clássico e exemplos de interface com teclado matricial e display de caracteres. Uma vez que compreendidos estes conceitos não é difícil estudar diferentes tipos de microcontroladores;

Os dispositivos da família 8051 mais recentes possuem outros recursos que atendem necessidades mais modernas;

Esta apresentação é apenas uma introdução aos microcontroladores. Procure estudar não só outros dispositivos 8051 mas também outras famílias de microcontroladores. Bons estudos!

142

www.mecatronicadegaragem.blogspot.com.br

Page 143: Micro Control Adores

REFERÊNCIAS

Atmel 8051 Microcontrollers Hardware Manual: Manual do fabricante.

MELO, Édson. Arquitetura Padrão 8051 de Microcontroladores: Uma

Introdução – Apostila. Instituto Federal de Santa Catarina, 1ª ed., Departamento de Eletrônica, 2005.

SÁ, Marcio Cardoso de. Programação C para microcontroladores

8051. Érica, 1ª ed., 2005.

LIMA, Charles Borges de. Os Poderosos µcontroladores AVR – Apostila. Instituto Federal de Santa Catarina, 1ª ed., Departamento de Eletrônica, 2009.

8051 Teoria. Disponível em: http://www.u8051.com.br/aulas/8051_Teoria.pdf - Acesso em 29/08/2012.

8051 Tutorial. Disponível em: http://www.8052.com/tut8051 - Acesso em 29/08/2012.

143

www.mecatronicadegaragem.blogspot.com.br