Documente Academic
Documente Profesional
Documente Cultură
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.
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
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
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
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
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
20
www.mecatronicadegaragem.blogspot.com.br
P3.5
P3.6 P3.7
21
www.mecatronicadegaragem.blogspot.com.br
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
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
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
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
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
www.mecatronicadegaragem.blogspot.com.br
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
28
www.mecatronicadegaragem.blogspot.com.br
; 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
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
Alguns dispositivos da famlia 8051 no possuem memria de programa interna, sendo necessrio o uso 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
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
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
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
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
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
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:
www.mecatronicadegaragem.blogspot.com.br
KEIL
#include <reg51.h>
sbit pino_led = P1^0; pino_led = !pino_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
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
45
www.mecatronicadegaragem.blogspot.com.br
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
#include <reg51.h>
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
// 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
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
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
50
www.mecatronicadegaragem.blogspot.com.br
51
www.mecatronicadegaragem.blogspot.com.br
52
www.mecatronicadegaragem.blogspot.com.br
53
www.mecatronicadegaragem.blogspot.com.br
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.
6.
www.mecatronicadegaragem.blogspot.com.br
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
// CONTINUA...
www.mecatronicadegaragem.blogspot.com.br
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); }
57
www.mecatronicadegaragem.blogspot.com.br
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
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
60
www.mecatronicadegaragem.blogspot.com.br
3.
4. 5.
www.mecatronicadegaragem.blogspot.com.br
// 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
// CONTINUA...
www.mecatronicadegaragem.blogspot.com.br
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
66
www.mecatronicadegaragem.blogspot.com.br
INTERRUPES
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.
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
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
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
73
www.mecatronicadegaragem.blogspot.com.br
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
// 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
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
// 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
// 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
// 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
// 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
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:
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 :
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
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):
100
www.mecatronicadegaragem.blogspot.com.br
TEMPORIZADORES/CONTADORES
101
www.mecatronicadegaragem.blogspot.com.br
TEMPORIZADORES/CONTADORES
Modo 2: 8 bits Temporizao de aproximadamente 200s utilizando um clock de 11,0592MHz
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;
103
www.mecatronicadegaragem.blogspot.com.br
TEMPORIZADORES/CONTADORES
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
n = 65 536 c
Obs: lembre-se de converter n para hexadecimal e substituir o MSB em THi e o LSB em TLi.
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
2.
3.
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
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.
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
// 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; } }
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
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;
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
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;
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
#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
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
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
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