EEL7030 – Microprocessadores


Semestre 2022/2
Cursos: Engenharia Eletrônica, Engenharia Elétrica, Engenharia de Produção Elétrica
Número de créditos: 4
Professor: Eduardo Augusto Bezerra
Pré-requisito: EEL5105 – Circuitos e Técnicas Digitais


Horários das aulas

  • Turma 4202A (Lab.) Seg 13:30-15:10 – Prof. Eduardo Bezerra
  • Turma 4202B (Lab.) Qua 08:20-10:00 – Prof. Raimes Moraes
  • Turma 4202C (Lab.) Qua 10:10-11:50 – Prof. Gabriel Bolacell
  • Turma 4235A (Lab.) Ter 13:30-15:10 – Prof. Gabriel Bolacell
  • Turma 4235B (Lab.) Qua 16:20-18:00 – Prof. Gabriel Bolacell
  • Turma 10213 (Lab.) Qua 08:20-10:00 – Prof. Raimes Moraes
  • Turmas 4235AB (Teoria) Seg 15:10-16:50 – Prof. Eduardo Bezerra
  • Turmas 4202ABC/10213 (Teoria) Ter 08:20-10:00 – Prof. Raimes Moraes

Ementa

Arquiteturas de microprocessadores; programação de microprocessadores: tipo e formatos de instruções, modos de endereçamento; linguagens Assembly ou C; memória; entrada/saída; dispositivos periféricos; interrupção; acesso direto a memória; barramentos padrões; ferramentas para análise, desenvolvimento e depuração; projetos.


Objetivos

Abordar conceitos teóricos e ferramentas de programação que habilitem o profissional a analisar e desenvolver sistemas microcontrolados

Objetivos Específicos:

  • Na teoria: explorar a arquitetura e a programação de microprocessadores e microcontroladores, com ênfase em conceitos que independem da inovação tecnológica;
  • No laboratório: realizar atividades para a utilização e fixação dos conhecimentos teóricos, compreendendo o emprego de aplicativos para programar microcontroladores, bem como, depurar e simular a execução do código.

Metodologia

• Aulas expositivas sobre a teoria;
• Aulas práticas nas quais exemplos são apresentados e os discentes são motivados a resolver exercícios propostos sob a supervisão do professor;
• Estudo individual para fixação do conteúdo abordado nas aulas expositivas;
• Trabalho individual ou em grupo nos quais os acadêmicos devem resolver exercícios propostos nos roteiros de laboratório.
• Ao final de algumas aulas de laboratório, os alunos realizarão testes por meio da plataforma Moodle para que o professor e alunos possam avaliar o aprendizado.

 


Avaliação

MF = (MT + ML) / 2
Onde:
MF = Média final
MT = Média da Teoria = ( 0,4 * (T1 + T2) + 0, 2 * MINITESTES);
T1 = Prova teórica 1
T2 = Prova teórica 2
ML = Média do Laboratório = (L1 + L2) / 2
L1 = Prova de laboratório 1
L2 = Prova de laboratório 2
MINITESTES = Média das notas dos Minitestes realizados nas aulas de laboratório (com conteúdo da teoria e laboratório)

Condições para a aprovação: [frequência >= 75%] e [MF >= 6,0].

A média final (MF) é a média aritmética da nota das provas de laboratório (ML) com a soma ponderada das notas de provas teóricas e de Minitestes.

A MF será arredondada para o meio ponto mais próximo (meio ponto superior, nos casos das frações 0,25 e 0,75). Os alunos com MF maior ou igual a 6,0 e frequência não inferior a 75% nas aulas serão aprovados.

Método de avaliação:

As avaliações T1, T2, L1, L2 e MINITESTES serão realizadas no horário da aula através do Moodle.

Controle de frequência:

A frequência será contabilizada conforme a presença nas aulas da teoria e laboratório. Em conformidade com decisão do colegiado, não há prova de recuperação nesta disciplina.

Reposição das notas:

– Nos casos previstos no regulamento da graduação (Art. 74) o aluno deverá solicitar à chefia do EEL a reposição da avaliação.

 


Monitoria

Horários de atendimento do monitor Dimas Lasmar Ribeiro:

LABSDG – Terça-feira, 10:10-12:10
LABSDG – Quarta-feira, 13:30-16:00
LABSDG – Quinta-feira, 08:00-10:00 e 18:00-19:00
LABSDG – Sexta-feira, 13:30-18:00

Email: dim.ufsc@gmail.com

 

Horários de atendimento do monitor Ramiro Gurgel Neto:

LABSDG – Segunda-feira, 13:30-15:30
LABSDG – Terça-feira, 13:30-17:30
LABSDG – Quinta-feira, 13:30-17:30
LABSDG – Sexta-feira, 10:10-12:10

Email: gurgelramiro@gmail.com

 

O monitor Gabriel Goulart Muller irá realizar atendimentos também de forma remota visando flexibilizar dias/horários. Horários preferências do Gabriel:

Segunda-feira: 17:00-20:00
Terça-feira: 17:00-20:00
Quarta-feira: 18:00-20:00
Quinta-feira: 16:00-20:00

Email: ggoulartm@gmail.com

 


Legislação

https://prograd.ufsc.br/files/2012/11/Resolu%C3%A7%C3%A3oNormativa-17CUn97_atualizada-em-2018_04_03.pdf


Referências

BIBLIOGRAFIA BÁSICA

Moraes R (2020), “Introdução aos Microcontroladores: 8051”, apostila. (Disponível no Moodle)

BIBLIOGRAFIA COMPLEMENTAR

Microcontrolador 8051:
Zelenovsky R, Mendonça A (2005), “Microcontroladores: Programação e Projeto com a Família 8051″. MZ Editora, Rio de Janeiro-RJ. (Não disponível BU UFSC Florianópolis) Disponível em: https://st3.ning.com/topology/rest/1.0/file/get/2053782944?profile=original

Atmel (2007), “Atmel 8051 Microcontrollers Hardware Manual”. (Não disponível BU UFSC Florianópolis) Disponível em: http://ww1.microchip.com/downloads/en/DeviceDoc/doc4316.pdf
Keil (2020), “Cx51 User´s Guide”, (Não disponível BU UFSC Florianópolis) Disponível em:

http://www.keil.com/support/man/docs/c51/

Microcontrolador ARM Cortex:
Martin T (2009), “The Insider’s Guide To The STM32 ARM Based Microcontrollers” (Não disponível BU UFSC Florianópolis) Disponível em: http://www.emcu.it/InsideCORTEX-1221142709.pdf

STMicroelectronics (2015),“RM0090 Reference manual” (Não disponível BU UFSC Florianópolis) Disponível em: http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00071990.pdf


Projeto de placa com 8051

  • Lab. 1 – Primeiro circuito: “Pisca LED”. [PDF] [PPT]
  • Lab. 2 – Displays de 7-segmentos. [PDF] [PPT]
  • Lab. 3 – Escrita em LCD. [PDF] [PPT]
  • Lab. 4 – Interrupção externa. [PDF] [PPT]
  • Lab. 5 – Temporizadores/contadores. [PDF] [PPT]
  • Lab. 6 – Comunicação serial. [PDF] [PPT]

Material para consulta


Organização das aulas

EEL7030-2022-2

Plano de Ensino – EEL7030-2022/2

Aula 1 – Apresentação do plano de ensino. Introdução a evolução dos computadores.
Aula 2 – 8051: Introdução à arquitetura do 8051 e código de máquina.
Aula 3 – 8051: Introdução à arquitetura e linguagem C. Interação com dispositivo externo (display de 7-segmentos).
Aula 4 – 8051: Acesso à memória em linguagem C com ponteiros e interação com dispositivo externo (LCD).
Aula 5 – 8051: Interrupções externas – Parte I.
Aula 6 – 8051: Interrupções externas – Parte II.
Aula 7 – 8051: Modelos de memória e campos opcionais de declaração de função.
Aula 8 – 8051: Temporizadores/contadores.
Aula 9 – 8051: Interface Serial – Parte I.
Aula 10 – 8051: Interface Serial – Parte II.
Aula 11 – 8051: Linguagem C – Structs, funções, in-line.
Aula 12 – Exercícios de revisão para a prova.
Aula 13 – Microcontrolador ARM: introdução

Lab. 1 – Roteiro 1: Ferramentas de desenvolvimento e código de máquina.
Lab. 2 – Roteiro 1: Exercícios – pisca LED.
Lab. 3 – Roteiro 2: Interação com dispositivo externo – display de 7 segmentos.
Lab. 4 – Roteiro 3: Interação com dispositivo externo – LCD.
Lab. 5 – Roteiro 4: Interrupções externas.
Lab. 6 – Correção da prova.
Lab. 7 – Roteiro 5: Temporizadores / Contadores; exercícios.
Lab. 8 – Roteiro 6: Interface serial.
Lab. 9 – Roteiro 7: Exemplos C; Uso de Struct (Estrutura) em C; Link C e Assembly.
Lab. 10 – Roteiro 8: ARM: Ferramentas de desenvolvimento e Portas de I/O.


Material utilizado nas aulas da teoria – semestre 2022/2

Semana Conteúdo das aulas
1
  • Apresentação da disciplina, usando os slides de introdução identificados como Seção 1 no Moodle, identificado como Aula 1 no Plano de Ensino.
  • Exemplos de programas em C, e o equivalente em Assembly do 8051. Revisão da linguagem C, e introdução à programação em linguagem de montagem do 8051.
  • Ambiente de desenvolvimento: Keil e EdSim51.
  • Apresentação dos slides sobre introdução à arquitetura do 8051 e linguagem C, identificados como Seção 2 no Moodle.
  • Desenvolvimento em aula de dois programas em C, usando o compilador no Keil, e simulando no EdSim51:
    • programa para piscar um LED conectado a uma porta do 8051, com rotina de atraso.
    • programa para acender segmentos de um display de 7-segmentos.
2
  • Aula 2 do Plano de Ensino. Considerando os slides identificados como Seção 2 no Moodle, resolver em aula os exercícios propostos baseados em

https://what-when-how.com/8051-microcontroller/io-programming-in-8051-c/

  • Considerando o circuito da figura, escrever programas em C para o 8051 para:
  1. Apresentar a contagem de 0 a 255 nos LEDs conectados na porta P1.
  2. Ler o valor indicado pelas chaves (switches) da porta P0, aguardar 1/2 segundo, e enviar o valor lido para a porta P2.
  3. Ler o valor indicado pelas chaves (switches) da porta P0. Se o valor for menor do que 100, enviar esse valor para a porta P1, caso contrário, enviar para a porta P2.
  4. Alternar o bit P2.4 entre ‘0’ e ‘1’ continuamente, sem alterar os valores dos demais bits da porta P2.
  5. Monitorar o bit P0.5 da porta P0 (switch 5). Se for um valor alto (‘1′), enviar 55H para P1, caso contrário, enviar AAH para P2.
  6. O sensor de uma porta está conectado no pino 1 da porta P0 (P0.1). Monitorar o sensor da porta, e quando a porta abrir, acionar um alarme (buzzer) conectado no bit 7 (P1.7) da porta P1.
  7. Escrever nos LEDs das portas P2 P1 os números da sequencia de Fibonacci, iniciando por 1 (ex. 1, 1, 2, 3, 5, 8, …). Considerar P2 e P1 como um registrador de 16 bits, com capacidade para apresentar contagens de, no máximo, 0xFFFF (65.535). Assim, P2.7 é o bit mais significativo do registrador de 16 bits, ou seja, bit 15, e o bit P1.0 é o bit menos significativo.

Screenshot from 2022-05-04 11-38-37

3
  • Aula 3 do Plano de Ensino. Exercícios considerando os slides identificados como Seção 2 no Moodle.
  • Possível solução para o exercício 7 da aula anterior: fibonacci.c
  1. ​apresentar a inicial do seu primeiro nome no display 7-seg DISP 0.
  2. armazenar as iniciais do seu nome e sobrenome nos registradores R1 e R0 do Banco 1, respectivamente. A seguir, o programa deverá permanecer em um laço infinito apresentando os valores armazenados em R1 e R0 (do Banco 1) nos displays de 7-seg DISP 1 e DISP 0, respectivamente.
  3. permanecer em um laço infinito realizando a leitura da chave SW7, conectada no bit P2.7. Se esse bit for 0, ler o valor definido pelas chaves SW6..SW0, e armazenar esse valor na primeira posição da RAM interna bit endereçável (endereço 20H). Caso contrário, se o bit P2.7 for 1, ler o padrão armazenado na posição 20H da RAM interna, e apresentar esse valor no display 7-seg DISP 0.
  4. implementar um módulo de identificação de anos bissextos para os calendários de 2000 a 2127. Inicialmente, salvar nos 128 bits da memória bit endereçável (endereços 0x20 a 0x2F) a informação sobre um ano desse intervalo ser bissexto ou não. Se o ano for bissexto, a respectiva posição de memória deverá receber 1, caso contrário deve receber 0. Assim, considerando o endereço 0x20^0 (bit 0 da posição 0x20 de memória) como sendo o ano 2000, e a posição 0x2F^7 (bit 7 da posição 0x2F de memória) o ano de 2127, o conteúdo dessa memória está listado a seguir. Após a memória bit endereçável ser inicializada, o programa deverá permanecer em um laço infinito realizando a leitura do valor definido pelas chaves SW6..SW0. O valor 0x00 nas chaves representa o ano 2000, e o valor 0x7F o ano 2127. Após consultar o respectivo bit da memória, se o ano indicado nas chaves for bissexto, o programa deverá apresentar o número 2 em DISP 1, e o número 9 em DISP 0. Se o ano não for bissexto, deverá ser apresentado o número 2 em DISP 1, e o número 8 em DISP 0. Os números 29 e 28 representam o número de dias do mês de fevereiro do ano indicado nas chaves.

7 6 5 4 3 2 1 0

2FH: 1 0 0 0 1 0 0 0

2EH: 1 0 0 0 1 0 0 0

2DH: 1 0 0 0 1 0 0 0

2CH: 1 0 0 0 1 0 0 0

2BH: 1 0 0 0 1 0 0 0

2AH: 1 0 0 0 1 0 0 0

29H: 1 0 0 0 1 0 0 0

28H: 1 0 0 0 1 0 0 0

27H: 1 0 0 0 1 0 0 0

26H: 1 0 0 0 1 0 0 0

25H: 1 0 0 0 1 0 0 0

24H: 1 0 0 0 1 0 0 0

23H: 1 0 0 0 1 0 0 0

22H: 1 0 0 0 1 0 0 0

21H: 1 0 0 0 1 0 0 0

20H: 1 0 0 0 1 0 0 0

 

  • Considerando o circuito apresentado na figura, reescrever os programas anteriores.
4 Aula 4 do Plano de Ensino. Considerando os slides identificados como Seção 3 no Moodle:

  1. Implementar os exercícios da aula anterior, usando o LCD no Edsim51 como dispositivo de saída, no lugar dos displays de 7-segmentos.
  2. Considerando o circuito do Edsim51, escrever um programa em C para classificar em ordem crescente, usando ponteiros, os valores armazenados em um vetor na RAM interna. Após concluir a ordenação, apresentar os valores no LCD.
  3. Considerando o circuito apresentado na figura, escrever um programa em C para o 8051 para apresentar um relógio digital no LCD, no formato HH:MM:SS. A informação no LCD (HH:MM:SS) deve ser atualizada a cada 1 segundo.
5 Aula 5 do Plano de Ensino. Visando entender os conceitos sobre interrupções externas apresentados nos slides identificados como Seção 4 no Moodle, resolver os exercícios a seguir.

 

1. Considerando o circuito da figura, escrever um programa em C para o 8051 que permaneça em um laço infinito apresentando uma contagem no display 1 de 7-segmentos. A contagem deve ser crescente, e ao ocorrer uma interrupção externa 0 (INT0, pin P3.2), O valor contigo nas chaves ligadas na parte baixa da porta P1 deve ser lido, e utilizado para reinicializar a contagem. O vídeo a seguir apresenta o funcionamento esperado do programa:

 

2. No circuito da figura existem dois botões do tipo push-button conectados nos pinos P3.2 e P3.3 visando acionar as interrupções externas 0 e 1 (por borda de descida). Os pinos da porta P2 estão conectados aos 7-segmentos de todos os displays, e também nos 8 pinos de dados do LCD. O pino 0 da porta P0 (P0.0) está conectado no pino EN do LCD, e o pino 1 da porta P0 (P0.1) está conectado no pino RS do LCD. Escrever um programa em C para o 8051 que deverá permanecer em um laço infinito atualizando (refresh) o valor apresentado no display 1 de 7-segmentos, e mantendo os demais displays de 7-segmentos desligados. Quando ocorrer uma interrupção externa 0 (INT0), o valor existente nas 4 chaves deverá ser apresentado no LCD. Quando ocorrer uma interrupção externa 1 (INT1), o valor existente nas 4 chaves deverá ser apresentado no display 1 de 7-segmentos.

 

3. Considerando o circuito da figura, escrever um programa em C para o 8051 para implementar um cronômetro. O cronômetro deverá utilizar os displays de 7-segmentos do circuito para apresentar os minutos (MM), os segundos (SS), e os centésimos de segundo (CC), iniciando em 00:00:00 até chegar em 59:59:99, quando deverá voltar para 00:00:00. O cronômetro deverá ser iniciado (start) e pausado (pause) utilizando o botão conectado no pino 12 do 8051 (P3.2), que é a entrada da interrupção 0 (INT0), acionada por borda de descida. Inicialmente, o mostrador (displays de 7-seg) deverá apresentar o valor 00:00:00. Ao pressionar o botão INT0, a contagem do evento em questão inicia (ex. início de uma prova de natação). Ao pressionar o botão novamente, a contagem deve ser congelada, possibilitando assim verificar o tempo medido da atividade em questão (ex. nadador mais rápido). Sempre que o botão for pressionado, a contagem deverá continuar do ponto onde havia parado. A interrupção externa 1 (INT1) poderá ser utilizada para zerar o cronômetro, bastando para isso incluir um botão no circuito da figura, e a respectiva rotina de tratamento da interrupção INT1 no programa. O vídeo a seguir apresenta o funcionamento esperado do programa:

6
  • Aula 6 do Plano de Ensino. Resolução dos exercícios sobre interrupções externas das aulas anteriores, utilizando os conceitos apresentados nos slides identificados como Seção 4 no Moodle.
7
  • Aula 7 do Plano de Ensino. Considerando os conceitos sobre organização de memória no 8051 introduzidos nos slides identificados como Seção 5 no Moodle, realizar a análise do programa exemplo memoria.c, visando o entendimento da organização da memória do 8051 conforme o mapa de memória apresentado nos slides do Moodle.
  • Revisão para a Prova P1: explicação e resolução de exercícios das aulas anteriores.
  • Exemplo de questão da Prova P1: Ao executar o programa fatorial.c, qual o valor contido nas variáveis i, n e valfat, logo após o for da função fatorial ter concluído a primeira rodada de execuções da instrução valfat *= i. Considerar que P3 = 0x07.
8
  • Prova 1
9
  • Aula 8 do Plano de Ensino. Timers/counters do 8051.
  • Revisão dos periféricos vistos até o momento: P0, P1, P2, P3, Controlador de Interrupções.
  • Periférico Counter/Timer: usa registradores IE, TMOD e TCON.
  • Funcionamento do Counter/Timer nos 4 modos.
  • Exercício: considerando um 8051 com um cristal de 11,0592 MHz, desenvolver um programa em C para fazer um LED piscar em uma frequência de 1 segundo. Discussão da solução.
  • Exercício: alterar a rotina de atraso do exercício 3 (cronômetro) da Semana 6, visando usar o timer do 8051 para gerar um delay mais preciso.
  • Resolução de exercícios do Roteiro do Laboratório 5, visando configurar os timers/counters nos diversos modos de operação.
  • Exercícios adicionais:
  1. Um relé eletrônico funciona mediante pulsos em sua entrada de controle e está conectado à porta P2.0 de um 8051. Um pulso com duração de 15 ms faz o dispositivo ligar e outro com duração de 60 ms faz o dispositivo desligar. Para o acionamento e desligamento do relé o microcontrolador 8051 recebe em sua porta P1 os comandos AAh e 55h, respectivamente. Implementar um programa em C para o 8051 capaz de ler os dados da porta P1 e que possa atuar no relé eletrônico de acordo com o dado recebido. (Usar temporização baseada em um dos timers e clock de 12 MHz).
  2. Um sistema fotosensor baseado no 8051 deve gerar um sinal para acionar uma câmera fotográfica através da medição da largura de um pulso presente na entrada INT0. Considerando que um pulso de 160ms corresponde a uma velocidade de 10Km/h, implementar um programa em C para o 8051 capaz de acionar a câmera fotográfica caso a velocidade seja superior a 80 Km/h. Utilizar um dos temporizadores internos do 8051 para medir a largura do pulso e acionamento na P1.0 com lógica positiva. Considerar um clock de 12 MHz.
  3. Implementar um programa em C para o 8051 que simule um frequencímetro. Isto deverá ser feito através da contagem de pulsos que o sinal digital de entrada possui em um intervalo de 1 segundo. Utilizar os temporizadores internos do 8051 para temporização e contagem e utilizar uma das entradas do contador como entrada do sinal digital cuja frequência deseja-se medir. O início da contagem deve ser efetuada mediante um pulso negativo presente no bit 0 da porta (P1.0). Considerar um clock de 12 MHz.
10
  • Aula 9 do Plano de Ensino:
    • Comunicação paralela x serial
    • RS-232C: padrão que define a interface física, níveis lógicos, conectores, pinagem.
    • Conexão para transferência de dados entre dois dispositivos via comunicação serial.
    • IE – Interrupt Enable Register – bit ES.
    • SCON – Serial Port Control Register.
    • Cálculo da taxa de transferência (baud rate).
11
  • Aula 10 do Plano de Ensino:
    • Exercício, envio de dados via porta serial de um 8051 para um computador com Linux (Desktop, Notebook, Raspberry Pi).
12
  • Aula 11 do Plano de Ensino.
  • Revisão do uso de struct na linguagem C. Foi apresentado o seguinte exemplo:
struct Pessoa {
                 unsigned char nome[20];
                 unsigned char idade;
                 unsigned int RG;
          } aluno, professor;
  • a partir desse exemplo foi realizada uma discussão com a turma. Foram realizados questionamentos sobre a quantidade de memória ocupada pelas variáveis aluno e professor. A seguir, aluno foi declarado como um vetor, e verificou-se novamente a quantidade de memória ocupada pelas variáveis. Ao se ocupar mais memória interna do que o disponível no 8051, foi utilizado xdata para forçar o uso da memória externa. unsigned char nome[20] foi substituído por unsigned char *nome, visando mostrar a diferença entre o uso de um vetor e ponteiro na declaração de string, e o impacto disso na alocação de memória para o programa.
  • Desenvolvimento junto com a turma do exemplo existente nos slides, que utiliza struct para configuração dos parâmetros necessários para realizar comunicação serial. Foram definidos alguns tipos de comunicação serial com, por exemplo, comunicação assíncrona com uma taxa de 9600 bps, 8 bits de dados, e sem paridade. A struct foi utilizada para agrupar os parâmetros utilizados na configuração do registrador SCON do 8051. Nos exemplos também foram utilizados outros registradores necessários para configuração da comunicação serial, tais como o TMOD (timer 1), e o PCON (bit SMOD).
13
  • Aula 11 do Plano de Ensino.
  • Desenvolvimento junto com os alunos de um programa utilizando structs para configuração do periférico timer/counter do 8051. O programa foi utilizado para configurar o periférico em vários modos diferentes (ex. como temporizador, como contador, e nos modos 0, 1, 2 e 3).
14
  • Aula 12 do Plano de Ensino.
  • Dúvidas para a P2.
15
  • Prova 2
16
  • Vista de prova
  • Aula 13 do Plano de Ensino.
 17
  • Reposição