Вы находитесь на странице: 1из 143

www.mecatronicadegaragem.blogspot.com.

br

MICROCONTROLADORES 8051 EM LINGUAGEM C


Rafael Oliveira do Prado Tcnico em Eletrnica rafael.prado@udesc.br

www.mecatronicadegaragem.blogspot.com.br

INTRODUO

Esta apresentao tem como objetivo introduzir alguns conceitos fundamentais sobre microcontrolares de maneira prtica e de fcil compreenso para iniciantes. O microcontrolador utilizado da famlia 8051 e a linguagem de programao a linguagem C; Alm de abordar teoricamente as principais caractersticas do 8051, so descritos passo a passo como program-lo, exemplos de circuitos, programas comentados e exerccios propostos; No so abordados desenhos de placa de circuito impresso nem mtodos ou circuitos de programao do 8051. Para tanto procure na folha de dados do fabricante, livros ou internet; Como pr-requisitos, so recomendados conhecimentos prvios de programao em linguagem C e eletrnica digital.

www.mecatronicadegaragem.blogspot.com.br

TEMAS ABORDADOS
Sistemas Embarcados

AT89S52; Descrio do AT89S52; Memria de Programa no AT89S52; Memria de Dados no AT89S52; Keil; Leitura de Boto; Display LCD Interface 4 Bits; Teclado Matricial 4x4;

Definio; Aplicaes. Histria; Microprocessador; Microcontrolador; Microprocessador vs Microcontrolador; Microcontroladores mais Usados. Descrio; Pinagem; Descrio dos Pinos; Linguagem C vs Linguagem Assembly; Memria Externa no 8051; Memria no 8051;

Microcontroladores

Interrupes;
Prioridade das Interrupes; Interrupes Externas; Temporizadores/Contadores;

8051

Comunicao Serial.

www.mecatronicadegaragem.blogspot.com.br

SISTEMAS EMBARCADOS

Um sistema embarcado a combinao de hardware e software, e ocasionalmente elementos mecnicos ou de outra natureza, projetados para desempenhar uma funo especfica.

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

www.mecatronicadegaragem.blogspot.com.br

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 especficas, pode-se otimizar o projeto reduzindo tamanho, recursos computacionais e custo do produto.

www.mecatronicadegaragem.blogspot.com.br

SISTEMAS EMBARCADOS

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

Dispositivos Lgico Programveis (PLDs); FPGAs (Field-Programmable Gate Array); Processadores Digitais de Sinais (DSPs).

www.mecatronicadegaragem.blogspot.com.br

APLICAES

A aplicao para sistemas embarcados imensa e pode ser observada em diversas reas:

Equipamentos Mdicos; Automao Industrial; Automao Residencial; Automobilstica; Avinica; Televiso, Videogame; Perifricos para computador; Eletrodomsticos; Celular, iPad, iPod; Etc...

www.mecatronicadegaragem.blogspot.com.br

HISTRIA DO MICROCONTROLADOR

Em 1969, a INTEL encomenda circuitos integrados (CIs) japoneses para a produo de calculadoras; Neste perodo, Marcian Hoff, funcionrio da prpria INTEL apresentou uma soluo diferente: Que a funo do CI fosse determinada por um programa nele armazenado;

www.mecatronicadegaragem.blogspot.com.br

HISTRIA DO MICROCONTROLADOR

Em 1971 um funcionrio 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 avano da tecnologia proporcionou a criao de microprocessadores mais rpidos e inteligentes; Aliados a memrias RAM e ROM, disco rgido, dispositivos de entrada (teclado, mouse...) e sada (monitor, impressora..), o microprocessador a parte central de troca de informaes entre dispositivos.
9

www.mecatronicadegaragem.blogspot.com.br

HISTRIA DO MICROCONTROLADOR

Logo que os microprocessadores foram popularizados, a indstria percebeu que tais componentes poderiam ser aplicados na automao de processos; Para viabilizar tal propsito, os microprocessadores foram reprojetados e os perifricos de entrada e sada foram integrados todos num nico CI.

10

www.mecatronicadegaragem.blogspot.com.br

HISTRIA DO MICROCONTROLADOR

Esse CI, integrando perifricos 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 perifricos externos; Foi este, ento, batizado de microcontrolador.

11

www.mecatronicadegaragem.blogspot.com.br

MICROPROCESSADOR

Possui apenas CPU. Os perifricos so externos:


Placa Me; Disco Rgido Memria RAM; Placa de Vdeo; Monitor; Teclado; Mouse; Etc...
12

www.mecatronicadegaragem.blogspot.com.br

MICROCONTROLADOR

Possui CPU + memria + perifricos (variam de acordo com o modelo) em um nico circuito integrado:

Memria (RAM, ROM, Flash); Oscilador interno; Comunicao serial, USB, 1wire, etc...; Conversor Analgico-Digital; Conversor Digital-Analgico; Comparador analgico; Modulador por largura de pulso (PWM); Etc...

13

www.mecatronicadegaragem.blogspot.com.br

MICROPROCESSADOR VS MICROCONTROLADOR

A principal diferena que para um sistema microprocessado funcionar so necessrios elementos externos (memria, placa me e componentes para enviar e receber dados) enquanto que para um sistema microcontrolado, basta o microcontrolador.

14

www.mecatronicadegaragem.blogspot.com.br

MICROCONTROLADORES MAIS USADOS

Intel famlia 8051; PIC; Microcontroladores ATMEL; Microcontroladores COP; Microcontroladores FREESCALE (MOTOROLA).

15

www.mecatronicadegaragem.blogspot.com.br

8051

O microcontrolador escolhido um microcontrolador da famlia 8051, porque alm de j ter sido a arquitetura mais utilizada por profissionais e hobbistas (ainda muito utilizado), o 8051 bsico possui recursos mais simples, facilitando o aprendizado para iniciantes; Uma vez que se entenda as funcionalidades e mtodos de desenvolvimento com dispositivos dessa famlia, no ser difcil migrar para outros tipos de microcontroladores.

16

www.mecatronicadegaragem.blogspot.com.br

DESCRIO

Algumas das caractersticas mais importantes do 8051 so:


32 pinos de Entrada/Sada programveis; 2 Pinos de interrupo externa; 2 Temporizadores/Contadores de 16 bits; Comunicao Serial.

17

www.mecatronicadegaragem.blogspot.com.br

PINAGEM

18

www.mecatronicadegaragem.blogspot.com.br

DESCRIO DOS PINOS


Alm de E/S, os pinos das portas 1, 2, 3, 4 podem assumir outras funes. Port 0 e Port 2: Quando utilizado um sistema com memria externa de 16 bits, a PORT0 opera como barramento de dados multiplexado da parte menos significativa da palavra binria, enquanto a PORT2 fornece a parte mais significativa.

A Port 0 no possui resistores de pull-up internos. Para obter nvel lgico 1 preciso conectar em cada pino resistores de 4k7 em relao ao +VCC. Esta a nica porta que pode ter +VCC diferente de 5V.
19

www.mecatronicadegaragem.blogspot.com.br

DESCRIO DOS PINOS


Port 1:
Pino Funes P1.5 P1.6 P1.7 MOSI - usado para gravao in-System (ISP) MISO - usado para gravao in-System (ISP) SCK - usado para gravao in-System (ISP)

20

www.mecatronicadegaragem.blogspot.com.br

DESCRIO DOS PINOS


Port 3:
Pino Funes P3.0 P3.1 P3.2 P3.3 P3.4 RXD - pino de entrada serial TXD - pino de sada serial
INT0 - interrupo externa 0 INT1 - interrupo externa 1

T0 - entrada externa do TIMER0

P3.5
P3.6 P3.7

T1 - entrada externa do TIMER1


WR - pulso para escrita em memria externa RD - pulso para leitura em memria externa

21

www.mecatronicadegaragem.blogspot.com.br

DESCRIO DOS PINOS

RST: Nvel alto nesse pino por dois ciclos de mquina enquanto o oscilador estiver funcionando, reinicia o sistema;

Ao energizar o sistema importante que seja resetado para o programa comear a ser executado desde o endereo 00H. interessante haver um boto para reset manual tambm.

22

www.mecatronicadegaragem.blogspot.com.br

DESCRIO DOS PINOS

ALE/ PROG : Adress Latch Enable (ALE) um pulso para travar (latch) a parte baixa do endereo durante o acesso memria externa. tambm o pino de entrada do pulso de programao (PROG) durante a operao de gravao da memria Flash interna.

Em operao normal, sem uso da memria externa, esse pino pulsado em uma frequncia de 1/6 do oscilador interno e pode ser usado como clock externo;

23

www.mecatronicadegaragem.blogspot.com.br

DESCRIO DOS PINOS

PSEN: Program Store Enable o pulso de habilitao para leitura de memria de programa externa; EA/VPP: External Acess Enable (EA). Habilitao de memria de programa externa. Deve ser conectado ao GND quando uso de programas em memria externa e em VCC quando for utilizada a Flash interna;

24

www.mecatronicadegaragem.blogspot.com.br

DESCRIO DOS PINOS

XTAL1, XTAL2: Pinos de entrada para configurao do circuito de clock. A frequncia do sistema ser igual a frequncia do cristal.

25

www.mecatronicadegaragem.blogspot.com.br

LINGUAGEM ASSEMBLY VS LINGUAGEM C


Assembly
Vantagens:

C
Vantagens:

Maior controle sobre hardware; Economia de memria de programa; Tempo de execuo de programa menor. Conjunto de mnmnicos extenso, tornando a tarefa de programar e interpretar programas enfadonha; Portabilidade reduzida, pois o Assembly de uma mquina diferente de outra.

Portabilidade elevada; Poucos comandos so necessrios para obter resultado; Facilidade para realizar clculos complexos. Cdigo gerado maior, consequentemente, maior ocupao de memria e maior tempo de execuo do programa.

Desvantagens:

Desvantagem:

26

www.mecatronicadegaragem.blogspot.com.br

LINGUAGEM ASSEMBLY VS LINGUAGEM C


Programa escrito em C:
#include <reg51.h> // Biblioteca padro 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

LINGUAGEM ASSEMBLY VS LINGUAGEM C


Programa em C aps compilao:
C:0x0000 C:0x0003 C:0x0004 . . . C:0x0800 C:0x0803 C:0x0806 C:0x0807 C:0x0808 C:0x0809 C:0x080A C:0x080D C:0x080E C:0x0811 020818 00 00 LJMP C:0818 NOP NOP C:0x0814 C:0x0816 C:0x0818 C:0x081A C:0x081B C:0x081C C:0x081E C:0x0821 B290 80E8 787F E4 F6 D8FD 758107 020800 CPL 0x90.0 SJMP C:0800 MOV R0,#0x7F CLR A MOV @R0,A DJNZ R0,C:081B MOV 0x81,#0x07 LJMP C:0800

2091FD 3091FD E4 FF FE 0F BF0001 0E BE03F8 BF84F5

JB 0x90.1,C:0800 JNB 0x90.1,C:0803 CLR A MOV R7,A MOV R6,A INC R7 CJNE R7,#0x00,C:080E INC R6 CJNE R6,#0x03,C:0809 CJNE R7,0x84,C:0809

Memria ocupada: 39 bytes

28

www.mecatronicadegaragem.blogspot.com.br

LINGUAGEM ASSEMBLY VS LINGUAGEM C


Programa com a mesma funo 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 aguardaBotao: JNB BOTAO, $ JB BOTAO, $ MOV R1, #60H delay: DJNZ R0, $ DJNZ R1, delay ; Inicia escrita do programa no endereo 0 da memria

; Testa se o botao foi pressionado ; Testa se o botao foi solto ; Carrega R1 com o valor 60 em hexadecimal
; Delay de aproximadamente 50ms (cristal 11,0592MHz) para ; tratar efeito bounce. Decrementa R0 e no prossegue ; 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

LINGUAGEM ASSEMBLY VS LINGUAGEM C


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

Memria ocupada: 16 bytes

Um simples programa em C ocupa 23 bytes de memria a mais que o mesmo programa escrito em assembly.
30

www.mecatronicadegaragem.blogspot.com.br

MEMRIA EXTERNA NO 8051

Alguns dispositivos da famlia 8051 no possuem memria de programa interna, sendo necessrio o uso de memria externa;

Para os que possuem, em determinadas aplicaes a memria interna insuficiente;


Nesses casos so utilizados circuitos de memria externa.

31

www.mecatronicadegaragem.blogspot.com.br

MEMRIA NO 8051

Atualmente grande parte dos microcontroladores possuem memria interna suficiente para a maioria das aplicaes; As aplicaes aqui descritas no requisitam o recurso de memria externa, por isso tais circuitos e programao no sero abordados.

32

www.mecatronicadegaragem.blogspot.com.br

AT89S52

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

Atualmente existem diversos dispositivos da famlia 8051 com perifricos e recursos extras, alm dos disponveis nas primeiras verses; A seguir a memria e registradores de funes especiais do AT89S52 sero brevemente descritos, no entanto, esta apresentao se limitar apenas aos recursos do 8051 tradicional.
33

www.mecatronicadegaragem.blogspot.com.br

DESCRIO

DO

AT89S52

8 Kbytes de memria de programa on-chip (Flash); 256 bytes de RAM de dados; 32 pinos de Entrada/Sada programveis; Modo de programao serial ISP (In-System Programmable) 3 Temporizadores/Contadores de 16 bits; Comunicao Serial; Watch Dog Timer programvel; Estruturas de interrupo com dois nveis de prioridade; Oscilador de clock on-chip; Operao de 0Hz a 33MHz; Proteo contra cpias (lock bit); Alimentao de 4 a 5,5V.

34

MEMRIA DE PROGRAMA NO AT89S52

www.mecatronicadegaragem.blogspot.com.br

O AT89S52 possui 8 Kbytes de memria de programa onchip (Flash). O programa executado a partir do endereo 0000H. Os primeiros endereos so reservados para rotinas de interrupo.

35

MEMRIA INTERNA DE DADOS NO AT89S52

www.mecatronicadegaragem.blogspot.com.br

O AT89S52 possui 256 bytes de RAM de dados (espao para variveis de programa); Os primeiros 128 bytes so para uso geral; Os 128 bytes restantes so reservados para funes especficas.

36

MEMRIA INTERNA DE DADOS NO AT89S52

www.mecatronicadegaragem.blogspot.com.br

Bancos de registradores: Pacotes de registradores que recebem os nomes R0, R1...R7. Para selecionar qual banco utilizar utiliza-se um dos registradores de funes especiais chamado PSW; Bit e byte enderevel: 128 bits que podem ser acessados individualmente

37

MEMRIA INTERNA DE DADOS NO AT89S52

www.mecatronicadegaragem.blogspot.com.br

A vantagem de utilizar as regies Banco de Registradores e Bit e Byte Endereveis ao invs da regio de Apenas Bytes Endereveis est no tamanho e velocidade de execuo da instruo.; Como na programao C j previsto o uso de memria e velocidade de execuo elevados, deixamos que o compilador se preocupe com isso.

38

MEMRIA INTERNA DE DADOS NO AT89S52

www.mecatronicadegaragem.blogspot.com.br

Registradores de Funes Especiais (RFE): So registradores reservados na memria para operaes especficas. No 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 necessrio. A funo da maioria dos RFE do 8051 sero estudadas no decorrer desta apresentao. O mapa da memria interna dos RFE do AT89S52 exibido no slide a seguir.
39

www.mecatronicadegaragem.blogspot.com.br

REGISTRADORES DE FUNES ESPECIAIS (RSF) NO AT89S52

40

www.mecatronicadegaragem.blogspot.com.br

KEIL

Antes de iniciar o estudo de programao, recomendvel conhecer algum programa de desenvolvimento e depurao de programas para o 8051;

Vrios cdigos sero exibidos e explicados, por isso importante test-los para melhor compreenso.

41

www.mecatronicadegaragem.blogspot.com.br

KEIL

Segue abaixo o link para um tutorial de introduo ao Keil, um programa onde possvel escrever, depurar e simular cdigos para diversos dispositivos da famlia 8051. Crditos - Gilson Yukio Sato:

Tutorial Keil uVision 4

Utilize o cdigo fonte do prximo slide para seguir instrues do tutorial.


42

www.mecatronicadegaragem.blogspot.com.br

KEIL
#include <reg51.h>
sbit pino_led = P1^0; pino_led = !pino_led;

//Biblioteca de nomes dos bits/bytes dos RFE do 8051


// Define o pino P1.0 como pino_led // Funcao para inverter estado do led

void troca_estado_led(void) {

}
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

LEITURA DE BOTO E ACIONAMENTO DE LED

O primeiro programa microcontrolado o simples e clssico acionamento de um LED atravs da leitura de um boto. A cada vez que o boto for pressionado o LED inverte seu estado. Se continuar pressionado o estado do LED continuar sendo invertido de acordo com a taxa de repetio do boto;

Na prtica botes apresentam o chamado efeito bounce (assim como todos os outros componentes eletromecnicos), que a sucessiva troca de estado lgico at atingir o estado final. Ocorre ao pressionar ou soltar o boto e dura de 10 a 50ms de acordo com a qualidade do componente;
Para tratar o efeito bounce pode ser inserido no cdigo um atraso depois que o boto for pressionado. Este atraso alm de tratar o efeito bounce, determina a taxa de repetio do boto.

44

www.mecatronicadegaragem.blogspot.com.br

LEITURA DE BOTO E ACIONAMENTO DE LED

45

www.mecatronicadegaragem.blogspot.com.br

LEITURA DE BOTO E ACIONAMENTO DE LED


Para ler um boto e inverter o estado de um LED preciso seguir a seguinte sequncia de passos:
1. 2.

Testar se o boto foi pressionado; Chamar uma rotina de atraso cujo perodo determina a taxa de repetio do boto; Inverter o estado do LED

3.

46

www.mecatronicadegaragem.blogspot.com.br

Leitura de boto e acionamento de LED

#include <reg51.h>

// Biblioteca padro de nomes dos RSFs do 8051

sbit LED = P0^0; sbit BOTAO = P0^1;

// Define LED como o pino 0 da P0 // 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); atraso_ms(500); LED = !LED; } }

// Aguarda o botao ser pressionado // Trata efeito bounce e determina taxa de repeticao do botao // Apaga/acende o LED
47

www.mecatronicadegaragem.blogspot.com.br

DISPLAY LCD INTERFACE 4 BITS

Os mdulos LCDs so interfaces de sada muito teis em sistemas microcontrolados. Estes mdulos podem ser grficos ou a caractere. Os LCDs a caractere so especificados em nmero de colunas por linhas, sendo os mais usuais 16x2, 16x1, 20x2, 20x4, 8x2;

Os mdulos podem ser encontrados com backlight (LEDs para iluminao 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

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 nmero de linhas e colunas; A interface pode ser de 4 ou 8 bits. O mais usual 4 bits por usar menos pinos. A diferena que para mandar instrues ou caracteres ao mdulo, deve-se enviar primeiro os 4 MSBs e depois os 4 LSBs. Por definio o mdulo inicia em 8 bits, ento para utilizar interface de 4 bits o primeiro comando deve ser para alterar a interface.

49

www.mecatronicadegaragem.blogspot.com.br

DISPLAY LCD INTERFACE 4 BITS

50

www.mecatronicadegaragem.blogspot.com.br

DISPLAY LCD INTERFACE 4 BITS

Instrues mais usuais

51

www.mecatronicadegaragem.blogspot.com.br

DISPLAY LCD INTERFACE 4 BITS


Detalhamento das instrues

52

www.mecatronicadegaragem.blogspot.com.br

DISPLAY LCD INTERFACE 4 BITS

53

www.mecatronicadegaragem.blogspot.com.br

DISPLAY LCD INTERFACE 4 BITS


Para ler ou escrever comandos no display LCD (4 bits) preciso seguir a seguinte sequncia de passos:
1.

Levar o pino R/W (Read/Write) a 0 para escrita, 1 para leitura. Aterra-se o pino se no h necessidade de monitorar a resposta do LCD;

2. 3. 4. 5.

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


Levar o pino RS (Register Select) para 0 ou 1 (instruo ou caractere); Levar o pino E (Enable) a 1 e em seguida a 0 para transferir os dados. Aguardar o tempo necessrio para transferir os dados e o mdulo executar o comando. 2ms so suficientes; Repetir os passos anteriores com os 4 LSBs (desloca-se a varivel responsvel pelo armazenamento dos dados 4 vezes para a esquerda.
54

6.

www.mecatronicadegaragem.blogspot.com.br

DISPLAY LCD INTERFACE 4 BITS

Como o display LCD inicia em 8 bits mas apenas 4 bits esto conectados, preciso enviar a primeira instruo de modo de utilizao 2 vezes. Na primeira vez so enviados apenas os 4 bits que informam que ser utilizada interface de 4 bits; A partir do segundo comando, quando o mdulo LCD j est operando em 4 bits, envia-se primeiro os 4 MSBs e depois os 4 LSBs. Envia-se ento o comando de modo de utilizao novamente;

As intrues de modo de utilizao e configurao do cursor devem estar na rotina de configurao do mdulo, e ser usada antes de comear a operar o display normalmente;
Quando o LCD energizado, executada a rotina de inicializao interna do display, por isso preciso adicionar um atraso na nossa rotina de configurao do LCD, para garantir que o mdulo no esteja ocupado no momento em que comea a receber comandos do microcontrolador. 10ms so suficientes.

55

www.mecatronicadegaragem.blogspot.com.br

Acionamento de display LCD interface 4 bits


// Biblioteca de nomes dos bits/bytes dos RFE do 8051 // Define DADOS_LCD como P1 // Pino de instrucao ou caractere do LCD. // Pino de enable do LCD // 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 56 } // 4 MSBs. A partir da segunda serao enviados primeiro os 4 MSBs e // depois os 4 LSBs #include <reg51.h> #define DADOS_LCD P1 sbit RS = P1^2; sbit E = P1^3; unsigned char i = 1;

// CONTINUA...

www.mecatronicadegaragem.blogspot.com.br

Acionamento de display LCD interface 4 bits


void config_LCD() { atraso_ms(10); cmd_LCD(0x28,0); cmd_LCD(0x28,0); cmd_LCD(0x0D,0); cmd_LCD(0x01,0); cmd_LCD(0x80,0); } // Funcao de configuracao do LCD // Aguarda execucao de inicializacao interna do display // Chaveia para modo 4 bits // Envia instrucao de modo de utilizacao // Cursor piscante // Limpa o display // 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_LCD(dados de 4 bits); while(1); }

// Escreve na segunda linha a esquerda

57

www.mecatronicadegaragem.blogspot.com.br

TECLADO MATRICIAL 4X4

Uma forma muito comum de entrada de dados em um sistema microcontrolado atravs de teclas (botes). Quando o nmero delas pequeno, cada uma pode ser associada a um pino de entrada do microcontrolador. Entretanto, quando o nmero de teclas se torna grande no recomendado desperdiar pinos de entrada. Utilizando um teclado matricial de 4x4 teclas, ao invs de se empregar 16 pinos para leitura das referidas teclas, emprega-se 8 pinos.

58

www.mecatronicadegaragem.blogspot.com.br

TECLADO MATRICIAL 4X4

Os botes so arranjados em matriz (colunas e linhas), e o teclado lido por varredura atravs 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 nvel lgico das colunas e verificar se esse nvel lgico aparece nas linhas (ou vice-versa). Se por exemplo houver alterao no nvel lgico de alguma linha significa que alguma tecla foi pressionada e, ento, com base na coluna habilitada e na linha, se sabe qual tecla foi pressionada.

59

www.mecatronicadegaragem.blogspot.com.br

TECLADO MATRICIAL 4X4

60

www.mecatronicadegaragem.blogspot.com.br

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 sequncia de passos:
1. 2.

Levar o nvel lgico da primeira coluna a 0;


Aguardar um tempo no muito pequeno para evitar leitura de rudos e nem muito grande a ponto de no detectar o pressionar de uma tecla. 50ms so suficientes; Testar cada linha em relao a essa coluna. Caso uma linha esteja em 0, um boto foi pressionado e deve-se retornar o valor referente ao boto dessa linha e coluna especficas; Levar essa coluna a nvel lgico 1 novamente; Repetir os passos anteriores para cada uma das colunas restantes.
61

3.

4. 5.

www.mecatronicadegaragem.blogspot.com.br

Varredura de Teclado Matricial 4x4

#include <reg51.h> #define DADOS_LCD P1

// Biblioteca de nomes dos bits/bytes dos RFE do 8051 // 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

// CONTINUA...

www.mecatronicadegaragem.blogspot.com.br

Varredura de Teclado Matricial 4x4


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 informao 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 } return tecla; setBit(P2,n); // Seta o bit da coluna zerado anteriormente // Retorna botao pressionado

main() { unsigned char tecla; P2 = 0xFF; while(1) { n = lerTeclado(); P0 = tecla; } }

// Por padrao todas as E/S's ja iniciam em 1 // Escreve na P0 o valor do botao pressionado

63

www.mecatronicadegaragem.blogspot.com.br

EXERCCIO PROPOSTO

Faa o programa que escreva no display LCD o caractere correspondente ao boto que for pressionado. O programa deve ter as seguintes restries:

Os caracteres devem aparecer um aps 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 posio da primeira linha.

64

www.mecatronicadegaragem.blogspot.com.br

INTERRUPES

So eventos internos ou externos que provocam a interrupo do fluxo normal do programa e o desvia para um endereo especfico da memria, para atender o evento que gerou a interrupo; As interrupes permitem que o processador foque em sua atividade principal sem precisar travar o programa em uma temporizao ou verificar constantemente perifricos e outras fontes de interrupo; O programa principal torna-se mais simples e eficiente.
65

www.mecatronicadegaragem.blogspot.com.br

INTERRUPES

Programa com uso de interrupes

Programa sem uso de interrupes

66

www.mecatronicadegaragem.blogspot.com.br

INTERRUPES

O 8051 prov 5 fontes de interrupo + reset (endereo 00H).

67

www.mecatronicadegaragem.blogspot.com.br

INTERRUPES

Para utilizar interrupes, preciso habilit-las. O RFE responsvel por esta funo o IE (Interrupt Enable). Para habilitar o uso das interrupes, deve-se setar EA (Enable All). Esse bit apenas permite o uso das interrupes, para efetivamente habilitar uma interrupo deve-se setar o bit correspondente.

ES: Enable Serial; ETi: Enable Timer i; EXi: Enable External i;

68

www.mecatronicadegaragem.blogspot.com.br

INTERRUPES

Na programao em Assembly alguns cuidados so necessrios: Desviar para um endereo de memria que no ser utilizado, caso a rotina de interrupo seja maior que 8 bytes; Salvar na pilha contedo de registradores utilizados na rotina de interrupo (A, B, R0, R1...); Retornar da interrupo. Em programao C, o compilador se encarrega desses cuidados.
69

www.mecatronicadegaragem.blogspot.com.br

INTERRUPES

Para utilizar interrupes em linguagem C deve-se:


1.

Habilitar as interrupes desejadas atravs do RFE IE; Configurar as fontes de interrupo desejadas tais como temporizadores, interrupes externas e comunicao serial; Escrever a rotina de interrupo de acordo com a sintaxe exibida no slide a seguir.

2.

3.

70

www.mecatronicadegaragem.blogspot.com.br

INTERRUPES
void nome_interrupo(void) interrupt nmero_interrupo { // rotina aqui }

nome_interrupo pode ser qualquer nome definido pelo programador; nmero_interrupo o nmero da interrupo de acordo com a tabela abaixo.

Interrupes no aceitam passagem nem retorno de variveis. Para usar uma varivel na rotina de interrupo, ela deve ser global.

71

www.mecatronicadegaragem.blogspot.com.br

PRIORIDADE DAS INTERRUPES

Ocasionalmente podem ocorrer mais de uma solicitao de interrupo ao mesmo tempo; Por padro o 8051 adota como prioridade a sequncia: EX0>ET0>EX1>ET1>ES

No entanto, possvel dar mxima prioridade a uma ou mais fontes de interrupo. O registrador responsvel por esta funo o RFE IP.

72

www.mecatronicadegaragem.blogspot.com.br

PRIORIDADE DAS INTERRUPES


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

PS: Priority Serial; PTi: Priority Timer i; PXi: Priority External i;

73

www.mecatronicadegaragem.blogspot.com.br

PRIORIDADE DAS INTERRUPES

Nada pode interromper uma interrupo de alta prioridade, nem mesmo outra interrupo de alta prioridade;

Uma interrupo de alta prioridade pode interromper uma interrupo de baixa prioridade, e quando terminar sua rotina, volta para o ponto em que parou na interrupo de baixa prioridade;
Se duas interrupes ocorrerem ao mesmo tempo, a de maior prioridade atendida primeiro. Se forem de igual prioridade, seguida a ordem padro do 8051.

74

www.mecatronicadegaragem.blogspot.com.br

PRIORIDADE DAS INTERRUPES


Habilitao das interrupes externa 0 e serial. A serial configurada como alta prioridade.
#include <reg51.h> main() { EA = 1; EX0 = 1; ES = 1; PS = 1; // Biblioteca de nomes dos bits/bytes dos RFE do 8051

// Habilita uso de interrupcoes // Habilita a interrupcao externa 0 // Habilita interrupcao da comunicacao serial // Configura interrupo 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

. . .

www.mecatronicadegaragem.blogspot.com.br

INTERRUPES EXTERNAS

Os pinos INT0 e INT1 podem ser utilizados com funo de pedido de interrupo por dispositivos externos; Alm de adequadamente habilitada no registrador IE, uma interrupo externa deve ser configurada para disparo por nvel ou por transio de nvel; Esta a funo dos bits IT0 e IT1 do RFE TCON.

76

www.mecatronicadegaragem.blogspot.com.br

INTERRUPES EXTERNAS

ITi (Bit de controle do tipo de interrupo): -1 configura a interrupo externa para ser disparada por transio de nvel 1 para 0; -0 configura a interrupo para ser disparada por nvel 0. IEi (Flag de transio da interrupo):

Em interrupo por nvel, so setadas quando o pino INTi 1 e resetadas quando INTi 0. Por transio, so setadas a cada pedido de interrupo e resetadas automaticamente na rotina de interrupo. Com interrupo desabilitada podem ser testadas via software, e precisam ser resetadas no programa no caso de interrupo por transio.

77

www.mecatronicadegaragem.blogspot.com.br

INTERRUPES EXTERNAS

78

www.mecatronicadegaragem.blogspot.com.br

INTERRUPES EXTERNAS

Para utilizar interrupes externas em linguagem C deve-se:


1.

Habilitar o uso de interrupes (bit EA); Habilitar as interrupes desejadas (bits EX0 e/ou EX1) e prioridade (bit IP);

2.

3.

Configurar disparo por nvel (bit ITi = 0) ou por transio (bit ITi = 1);
Escrever a rotina de interrupo de acordo com o slide 71.
79

4.

www.mecatronicadegaragem.blogspot.com.br

Interrupo externa 0 por nvel

#include <reg51.h> sbit BOTAO = P3^2;

// Biblioteca de nomes dos bits/bytes dos RFE do 8051 // 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; EX0 = 1; IT0 = 0;

// Habilita uso de interrupcoes // Habilita a interrupcao externa 0 // Configura disparo por nivel // Aguarda interrupcoes
80

while(1);

www.mecatronicadegaragem.blogspot.com.br

Interrupo externa 0 por transio

#include <reg51.h> sbit BOTAO = P3^2;

// Biblioteca de nomes dos bits/bytes dos RFE do 8051 // 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; EX0 = 1; IT0 = 1;

// Habilita uso de interrupcoes // Habilita a interrupcao externa 0 // Configura disparo por transicao // Aguarda interrupcoes
81

while(1);

www.mecatronicadegaragem.blogspot.com.br

Teste da flag de interrupo (por transio) com interrupes desabilitadas

#include <reg51.h> sbit BOTAO = P3^2; main() { EA = 0; IT0 = 1;

// Biblioteca de nomes dos bits/bytes dos RFE do 8051 // Define o pino P3.2 como BOTAO

// Desabilita uso de interrupcoes (por padrao esse bit ja e // inicializado em 0) // 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 }

82

www.mecatronicadegaragem.blogspot.com.br

Teste da flag de interrupo (por nvel) com interrupes desabilitadas

#include <reg51.h> sbit BOTAO = P3^2; main() { EA = 0; IT0 = 0;

// Biblioteca de nomes dos bits/bytes dos RFE do 8051 // Define o pino P3.2 como BOTAO

// Desabilita uso de interrupcoes (por padrao esse bit ja e // inicializado em 0) // Configura disparo por nvel (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

83

www.mecatronicadegaragem.blogspot.com.br

EXERCCIO PROPOSTO

A partir do circuito abaixo, faa o programa que determine qual das 8 linhas est solicitando interrupo e escreva esse valor na P1.

84

www.mecatronicadegaragem.blogspot.com.br

EXERCCIO PROPOSTO

Desenvolva um programa de segurana contra abertura de portas/janelas. O programa deve conter as seguintes funcionalidades:

Usar interrupo externa; Monitorar 8 portas/janelas; Acionar um alarme (representado por um LED) quando uma ou mais portas/janelas forem abertas; As portas/janelas que esto sendo violadas devem ser escritas em um display LCD; O alarme s deve parar quando uma senha pr-definida de 4 dgitos for escrita atravs 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

TEMPORIZADORES/CONTADORES

O 8051 prov dois temporizadores/contadores (T/C), que podem ser individualmente configurados para operao de temporizao ou contagem, em diferentes modos;

Um contador pode ser utilizado em operaes como contar peas em um processo industrial;
Um temporizador geralmente utilizado quando preciso gerar um perodo preciso de tempo.

86

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

Operando como contador, um pedido de interrupo solicitado aps o contador atingir um nmero predeterminado de pulsos negativos;

Como temporizador, o pedido de interrupo solicitado aps ser atingido um perodo 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

TEMPORIZADORES/CONTADORES
Gerao da base de tempo primria para os T/Cs do 8051 (modo temporizador)

88

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

Os RFE responsveis pela configurao dos T/Cs so o TMOD e o TCON; TCON

Possui as flags de pedido de interrupo e os bits para ligar/desligar a temporizao/contagem;

TMOD

Possui bits de controle de modo de acionamento da temporizao/contagem; modo de operao (temporizao ou contagem); e modo de temporizao/contagem. No enderevel por bit, portanto no possvel configurar os bits individualmente, preciso configurar todos de uma vez ou utilizar lgica OU/E para configurar os bits desejados.

89

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

90

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

Gatei

Determina o modo de habilitao do T/Ci: -0: A temporizao ocorre enquanto o bit TRi de TCON for 1 -1: A temporizao ocorre apenas enquanto o bit TRi de TCON for 1 e o pino INTi tambm for 1 Determina operao de temporizao ou contagem: -0: Modo temporizador -1: Modo contador Determinam o modo de temporizao/contagem:

C/Ti

M1 e M0

M1 M0
0 0 1 1 0 1 0 1

Modo de Operao
13 bits, sendo 8 bits no RFE THi e um prescaler de 5 bits no TLi 16 bits no par de RFE THi e TLi 8 bits com recarga automtica (contagem em THi e constante de recarga em TLi) T/C0: TL0 opera como T/C de 8 bits TH0 opera como temporizador de 8 bits T/C1: Trava a temporizao.

91

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES
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 habilitao da contagem est relacionada ao bit Gatei. Se resetado, o incio 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 nvel 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 recomea do ltimo valor atingido;

92

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES
Gate0 = 0

Gate0 = 1

93

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

Um pedido de interrupo solicitado aps a contagem atingir um estouro. O modo de contagem depende dos bits M1i e M0i.

M1 M0
0 0 1 0 1 0

Modo de Operao
Modo 0: 13 bits Modo 1: 16 bits Modo 2: 8 bits com recarga automtica

Modo 3 T/C0: TL0 opera como T/C de 8 bits TH0 opera como temporizador de 8 bits T/C1: Trava a temporizao.
94

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

Modo 0: 13 bits A contagem obtida atravs 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 so irrelevantes.

Lembrando que o sinal que incrementa os T/C proveniente do clock da CPU ( TCLKCPU ) dividido por 12, utiliza-se a seguinte equao para calcular a temporizao T desejada, onde n o valor inicial no RFE THi:

T (256 n) * 32 *12 *TCLKCPU


95

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

Modo 0: 13 bits

96

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

Modo 1: 16 bits A contagem obtida atravs 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 ( TCLKCPU ) dividido por 12, utiliza-se a seguinte equao para calcular a temporizao T desejada, onde n o valor inicial no par de RFE THi.TLi :

T (65536 n) *12 *TCLKCPU


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

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

Modo 1: 16 bits

98

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES
Modo 1: 16 bits Temporizao de 50ms utilizando um clock de 11,0592MHz

T (65536 n) *12 *TCLKCPU


T 0,05s TCLKCPU 1 11059200
0,05 *11059200 65536 n 12 46080 65536 n n 65536 46080 n 19456 n 4C 00(hexadecima l )
99

1 0,05 (65536 n) *12 * 11059200 12 0,05 (65536 n) * 11059200

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

Modo 2: 8 bits com recarga automtica A contagem obtida atravs de uma contagem crescente de 8 bits (0 a 255) no RFE TLi, enquanto o RFE THi mantm 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 ( TCLK ) dividido por 12, utiliza-se a CPU seguinte equao para calcular a temporizao T desejada, onde n o valor inicial nos RFE TLi e THi (recarga automtica):

T (256 n) *12 *TCLKCPU

100

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

Modo 2: 8 bits com recarga automtica

101

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES
Modo 2: 8 bits Temporizao de aproximadamente 200s utilizando um clock de 11,0592MHz

T (256 n) *12 *TCLKCPU


T 0,0002 s TCLKCPU 1 11059200
0,0002 *11059200 256 n 12 184,32 256 n n 256 184,32 n 72 (arredonda-se para um
valor inteiro)

1 0,0002 (256 n) *12 * 11059200 12 0,0002 (256 n) * 11059200

n 48(hexadecima l )

102

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

Modo 3: Temporizador dividido T/C0: TH0 e TL0 operam como temporizadores separados de 8 bits cada. O clculo para uma temporizao 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 endereo de interrupo do T/C1.

T/C1: No modo 3 congela sua atividade. A temporizao/contagem ainda pode ser utilizada nos outros modos, mas no pode solicitar interrupo nem habilitar/desabilitar a contagem pois os bits TF1, TR1 e o endereo de interrupo esto emprestados ao T/C0;

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

103

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

Modo 3: Temporizador dividido

104

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES
Modo 0 (13 bits): Conta de 0 a 8,888ms (cristal 11,0592MHz); Pouco usual, mantido para manter compatibilidade entre os microcontroladores da famlia 8051. Modo 1 (16 bits): Conta de 0 a 71ms (cristal 11,0592MHz); Mais utilizado para temporizaes maiores.
Modo 2 (8 bits): Conta de 0 a 277s (cristal 11,0592MHz); Utilizado para temporizaes menores e gerar baud rate. Modo 3 (Temporizador dividido): TH0 e TL0 contam de 0 a 277s (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 comunicao serial.

105

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES
A partir deste ponto no ser mais detalhado o modo 0 por no ser um modo de operao usual; O modo 3, apesar de no usual, ser discutido por no haver muitos exemplos de aplicao na literatura sobre o 8051.

106

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES
Temporizao: Para calcular o valor inicial a ser carregado nos RFE THi e TLi para uma determinada temporizao, deve-se utilizar a equao 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.

107

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES
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 boto entre o pino Ti e GND.
108

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

Para utilizar interrupes dos T/Cs em linguagem C deve-se:


1.

Habilitar o uso de interrupes (bit EA);

2.
3.

Habilitar as interrupes desejadas (bits ET0 e/ou ET1);


Configurar o RFE TMOD: Gate em 0 habilitao do T/C depende apenas do bit TR, em 1 depende de TR e do pino INT estar em nvel 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. Escrever a rotina de interrupo de acordo com o slide 71.
109

4.

www.mecatronicadegaragem.blogspot.com.br

TEMPORIZADORES/CONTADORES

As constantes utilizadas para as temporizaes dos cdigos a seguir foram calculadas considerando um cristal de 11,0592MHz

110

www.mecatronicadegaragem.blogspot.com.br

Interrupo do TC0 como temporizador em modo 1 ativado apenas pelo bit TR0
#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 // Aguarda interrupcao


111

while(1);

www.mecatronicadegaragem.blogspot.com.br

Interrupo do TC0 como contador em modo 1 ativado apenas pelo bit TR0
#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 // Aguarda interrupcao


112

while(1);

www.mecatronicadegaragem.blogspot.com.br

Interrupo do TC0 como temporizador em modo 1 ativado pelo bit TR0 e o pino INT0
#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 // Aguarda interrupcao


113

while(1);

www.mecatronicadegaragem.blogspot.com.br

Interrupo do TC0 como contador em modo 1 ativado pelo bit TR0 e o pino INT0
#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 transio 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 // Aguarda interrupcao


114

while(1);

www.mecatronicadegaragem.blogspot.com.br

Interrupo do TC0 como temporizador em modo 2 ativado apenas pelo bit TR0
#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 // Aguarda interrupcao


115

while(1);

www.mecatronicadegaragem.blogspot.com.br

Interrupo do TC0 como contador em modo 2 ativado apenas pelo bit TR0
#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 // Aguarda interrupcao


116

while(1);

www.mecatronicadegaragem.blogspot.com.br

Interrupo do TC0 como temporizador em modo 2 ativado pelo bit TR0 e o pino INT0
#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 // Aguarda interrupcao


117

while(1);

www.mecatronicadegaragem.blogspot.com.br

Interrupo do TC0 como contador em modo 2 ativado pelo bit TR0 e o pino INT0
#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 // Aguarda interrupcao


118

while(1);

www.mecatronicadegaragem.blogspot.com.br

TC0 em modo 3, TL0 como contador de 8 bits (interrupo do TC0) e TH0 como temporizador de 8 bits (interrupo do TC1). T/C1 utilizado para gerar um atraso de 1s (sem interrupo)
#include <reg51.h>
int i = 0;

// Biblioteca de nomes dos bits/bytes dos RFE do 8051

// 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); // ** Prximo slide explica essa instruo } TMOD = (0x0F & TMOD) | 0x30; // Trava TC1 alternando para modo // 3 sem afetar TC0
119

// CONTINUA...

www.mecatronicadegaragem.blogspot.com.br

TC0 em modo 3, TL0 como contador de 8 bits (interrupo do TC0) e TH0 como temporizador de 8 bits (interrupo do TC1). T/C1 utilizado para gerar um atraso de 1s (sem interrupo) Como a flag de interrupo TR1 esta emprestada ao TH0, deve-se testar diretamente os RFE TH1 e TL1; No 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 interrupo ao invs 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 interrupo com muitas instrues, deve-se testar um intervalo maior de tempo. Usando este recurso a temporizao no muito precisa.

Continuao do programa no prximo slide

120

www.mecatronicadegaragem.blogspot.com.br

TC0 em modo 3, TL0 como contador de 8 bits (interrupo do TC0) e TH0 como temporizador de 8 bits (interrupo do TC1). T/C1 utilizado para gerar um atraso de 1s (sem interrupo)
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(); 121 P2++; // Incrementa contagem binaria na P2 }
}

www.mecatronicadegaragem.blogspot.com.br

TC0 para gerar um atraso de 1ms*i com interrupes desabilitadas

#include <reg51.h> sbit LED = P0^0;

// Biblioteca padro de nomes dos RSFs do 8051 // 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); LED = !LED; } }

// Atraso de 1s // Apaga/acende o LED

122

www.mecatronicadegaragem.blogspot.com.br

EXERCCIO 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

COMUNICAO SERIAL

Uma necessidade comum em sistemas microcontrolados a troca de informao 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 transmisso de dados. Utiliza-se ento a comunicao serial, onde os bits so transmitidos um aps o outro em uma linha nica. A desvantagem que a comunicao serial mais lenta comparada a paralela.

Cada vez mais est sendo usada a interface USB ao invs dos padres mais antigos. Vrios microcontroladores suportam esse protocolo, inclusive microcontroladores da famlia 8051. Procure saber mais sobre essa tecnologia.

124

www.mecatronicadegaragem.blogspot.com.br

COMUNICAO SERIAL

O 8051 dispe de um canal de comunicao serial com diversos recursos como:


4 modos de operao; Full duplex; Programvel; Compatibilidade com o padro RS-232 (exceto pelos nveis de tenso); Pode trabalhar com interrupo.

Portanto, no preciso se preocupar em desenvolver uma comunicao serial a partir do zero, pois o 8051 faz isso por ns. Basta configurar essa programao de acordo com nossa necessidade.

125

www.mecatronicadegaragem.blogspot.com.br

COMUNICAO SERIAL
Para comunicao com dispositivos padro RS-232 utiliza-se conversores de nveis lgicos tais como o MAX232. Ele converte +5V para +12V e vice-versa, 0V para -12V e viceversa, que o padro da comunicao serial RS-232.

126

www.mecatronicadegaragem.blogspot.com.br

COMUNICAO SERIAL

Os registradores de transmisso/recepo da porta serial so acessveis atravs do RFE SBUF. Fisicamente existem dois SBUF mas para o software apenas um. Dependendo da instruo, 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.
x = SBUF; SBUF = x; // O byte recebido via serial e copiado para a variavel x // O byte da variavel x e transmitido para a porta serial
127

www.mecatronicadegaragem.blogspot.com.br

COMUNICAO SERIAL

O RFE responsvel pela configurao da porta serial o SCON. Neste registrador so configurados o modo de operao, deteco de erro, reconhecimento automtico de endereos em multiprocessamento e habilitao de recepo de dados; Ainda no SCON, esto presentes nono bit em recepo/transmisso (quando habilitados) e as flags de interrupo para recepo/transmisso; Alm do SCON, existem mais 2 bits que atuam na configurao da porta serial, localizados no RFE PCON. O baud rate nos modos 1 e 3 so 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

COMUNICAO SERIAL
FE/SM0:

FE (bit de deteco de erro) setado automaticamente quando detectado um bit de parada invlido. No 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 operao da serial. O bit SMOD0 do RFE PCON precisa estar em 0 para acessar SM0;

SM1: Referente ao modo de operao da serial;


SM2: Em 0 desabilita e em 1 habilita reconhecimento automtico de endereo em multiprocessamento. Pode ser usado nos modos 2, 3 e eventualmente no 1. No modo 0 precisa estar resetado;

REN: Habilita recepo de dados. O pino RX s ser efetivamente monitorado se REN for 1. Em 0 o pino RX pode ser usado para outra funo;
TB8 e RB8: Nonos bits de transmisso e recepo respectivamente. Utilizados nos modos 2 e 3;

129

TI e RI: flags de fim de transmisso e recepo respectivamente. No so zerados automaticamente na rotina de interrupo e devem ser resetados por software.

www.mecatronicadegaragem.blogspot.com.br

COMUNICAO SERIAL
Seleo do modo de operao da comunicao serial.

130

www.mecatronicadegaragem.blogspot.com.br

COMUNICAO SERIAL

Taxa de transmisso/recepo da comunicao serial (Baud Rate):

Nos modos 1 e 3 a taxa de comunicao serial determinada a partir do T/C1 (ou T/C2 em dispositivos que o possuam); Geralmente programa-se o temporizador em modo 2 (recarga automtica). Nesse caso a tabela do slide a seguir exibe os valores que devem ser armazenados em TL1 e TH1 para o baud rate desejado; No necessrio habilitar a interrupo de T/C1 nem resetar a flag TF1.
131

www.mecatronicadegaragem.blogspot.com.br

COMUNICAO SERIAL
Constantes de tempo para o T/C1 em modo recarga automtica de acordo com o baud rate desejado

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

132

www.mecatronicadegaragem.blogspot.com.br

COMUNICAO SERIAL

Ser detalhado apenas o modo 1 de operao da comunicao serial, sem usar deteco de erro ou reconhecimento automtico de endereos em multiprocessamento; suficiente para a maioria das aplicaes, porm, existem muitas outras peculiaridades acerca da comunicao serial que no sero tratadas aqui;

Para maiores informaes consulte a folha de dados e bibliografias complementares.

133

www.mecatronicadegaragem.blogspot.com.br

COMUNICAO SERIAL

A seguir ser exibido um programa simples de comunicao entre dois microcontroladores 8051 ambos com o mesmo cdigo;

A partir de dois botes o microcontrolador envia o cdigo para acender o LED correspondente ao boto pressionado no outro microcontrolador;
Observe que a interrupo no distingue transmisso de recepo, e preciso tratar esta situao no programa.

134

www.mecatronicadegaragem.blogspot.com.br

COMUNICAO SERIAL

135

www.mecatronicadegaragem.blogspot.com.br

Comunicao serial em modo 1 baud rate de 9600b/s

#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 interrupo da serial if(TI) { // TRANSMISSAO TI=0; // Reseta flag pois no e resetada automaticamente } if(RI) { // RECEPCAO RI=0 // Reseta flag pois no e resetada automaticamente P2=SBUF; // Acende LED correspondente atraves do valor recebido via serial atraso_ms(2000); P2=0xFF; // Aps 2 segundos apaga o LED 136 } } // CONTINUA...

www.mecatronicadegaragem.blogspot.com.br

Comunicao serial em modo 1 baud rate de 9600b/s

main() { SCON = 0x50; TMOD = 0x20; TL1 = 0xFD; TH1 = 0xFD; TR1 = 1; EA = 1; ES = 1;

// Configura scon em modo 1, recepcao habilitada // Habilita TC1 para gerar baud rate em modo recarga automatica // Baud rate 9600 // Recarga automatica para Baud rate 9600 // Ativa temporizacao // Habilita uso de interrupcoes // Habilita a interrupcao da serial // Se botao0 for pressionado aguarda um tempo para debounce // Transmite via serial codigo para acender LED correspondente // Se botao0 for pressionado aguarda um tempo para debounce // Transmite via serial codigo para acender LED correspondente
137

while(1) { if(!botao0) { atraso_ms(500); SBUF=0xFB; } if(!botao1) { atraso_ms(500); SBUF=0xF7; } }

www.mecatronicadegaragem.blogspot.com.br

COMUNICAO SERIAL

descrito a seguir um esboo de programa utilizando o T/C0 em modo 3 e o T/C1 como gerador de baud rate. TL0 como contador de 8 bits (interrupo do TC0) e TH0 como temporizador de 8 bits (interrupo do TC1).

138

www.mecatronicadegaragem.blogspot.com.br

T/C0 em modo 3 e T/C1 utilizado para gerar baud rate para a comunicao serial
#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 interrupo da serial if(TI) { // TRANSMISSAO TI=0; // Reseta flag pois no e resetada automaticamente // ESCREVA SEU CODIGO AQUI } if(RI) { // RECEPCAO RI=0 // Reseta flag pois no e resetada automaticamente // ESCREVA SEU CODIGO AQUI 139 } } // CONTINUA...

www.mecatronicadegaragem.blogspot.com.br

T/C0 em modo 3 e T/C1 utilizado para gerar baud rate para a comunicao serial
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

www.mecatronicadegaragem.blogspot.com.br

EXERCCIO PROPOSTO

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

141

www.mecatronicadegaragem.blogspot.com.br

CONSIDERAES FINAIS

Foram apresentadas as funcionalidades bsicas do 8051 clssico e exemplos de interface com teclado matricial e display de caracteres. Uma vez que compreendidos estes conceitos no difcil estudar diferentes tipos de microcontroladores; Os dispositivos da famlia 8051 mais recentes possuem outros recursos que atendem necessidades mais modernas; Esta apresentao apenas uma introduo aos microcontroladores. Procure estudar no s outros dispositivos 8051 mas tambm outras famlias de microcontroladores. Bons estudos!
142

www.mecatronicadegaragem.blogspot.com.br

REFERNCIAS

Atmel 8051 Microcontrollers Hardware Manual: Manual do fabricante. MELO, dson. Arquitetura Padro 8051 de Microcontroladores: Uma Introduo Apostila. Instituto Federal de Santa Catarina, 1 ed., Departamento de Eletrnica, 2005. S, Marcio Cardoso de. Programao 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 Eletrnica, 2009. 8051 Teoria. Disponvel em: http://www.u8051.com.br/aulas/8051_Teoria.pdf - Acesso em 29/08/2012. 8051 Tutorial. Disponvel em: http://www.8052.com/tut8051 - Acesso em 29/08/2012.
143