1 / 53

Prática laboratorial com o 80C51

Prática laboratorial com o 80C51. Organização: Requisitos e modelo funcional de um sistema mínimo Da especificação à prática de projecto Comunicação com o PC Um gerador de formas de onda. Requisitos de um sistema mínimo.

Télécharger la présentation

Prática laboratorial com o 80C51

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Prática laboratorial com o 80C51 • Organização: • Requisitos e modelo funcional de um sistema mínimo • Da especificação à prática de projecto • Comunicação com o PC • Um gerador de formas de onda

  2. Requisitos de um sistema mínimo • Considerando que o sistema mínimo pretendido tem por objectivo principal dar apoio à prática laboratorial, os requisitos de partida foram os seguintes: • Simplicidade, para permitir uma compreensão em pormenor de todos os aspectos • Disponibilidade de entradas e de saídas, para permitir alguma variedade nos trabalhos práticos a realizar • Empregar componentes acessíveis e com baixo custo

  3. Modelo funcional • Carga do programa a executar: via RS 232C, a partir de um PC onde é gerado o código objecto • Entrada / Saída: • Analógica, entre -5 V e +5 V, a que correspondem a escrita de 00 e FFH, respectivamente, no conversor D/A (relação linear entre os códigos escritos no D/A e o valor da saída) • Quatro entradas digitais e quatro saídas digitais

  4. Modelo funcional (cont.) • A memória externa resume-se a uma NVRAM (MP – para o código recebido via RS 232C – e MD), estando o “monitor residente” na MP interna do C • Alocação de endereços:

  5. Modelo funcional (cont.) • Repare-se que o modelo funcional descrito nos permite desde já a escrita de código: (qual o efeito deste segmento de código?)

  6. Da especificação à prática de projecto • A passagem à prática de projecto faz-se através do seguinte conjunto de passos: • Definição do diagrama de blocos da solução global • Realização do bloco descodificador do sistema • Criação do diagrama esquemático • Realização da carta de circuito impresso

  7. Diagrama de blocos

  8. Descodificador do sistema • Sinais gerados pelo descodificador: • Para a NVRAM: /mem_rd e /mem_cs • Para a escrita no conversor D/A: da_cs • Especificação “tipo-PALASM”: (seria desejável a sua implementação como uma PAL?)

  9. Diagrama esquemático • (apresentado na transparência seguinte) Reparar em particular nos seguintes aspectos: • Filtragem nas entradas digitais • Forma como está implementada a comunicação RS 232C • Implementação do bloco descodificador • Tratamento da saída do conversor D/A • Ligação das entradas digitais não usadas

  10. Carta de circuito impresso

  11. Comunicação com o PC • Libertar-nos do ciclo “programar EPROM / experimentar / corrigir / apagar EPROM / repetir” • Os programas a executar são escritos em assembly no PC, onde é produzido o código objecto, que é por sua vez transferido via RS 232C para o sistema • A transferência do código objecto pode por exemplo ser efectuada através da aplicação HyperTerminal (acessórios do Windows 95)

  12. O monitor residente e a comunicação com o PC • Permite transferir o código objecto para execução na NVRAM (cujo sinal de /OE resulta do AND entre os sinais /PSEN e /RD do 87C51) • O código objecto deve estar em formato Intel Hex e o porto série do PC configurado para 9600 bps, 8 bits, sem paridade e com um stop bit • São apenas necessárias as ligações (RxD-TxD), (TxD-RxD) e (Gnd-Gnd)

  13. O monitor residente: Protocolo de transferência • Ao ser reinicializado, o 87C51 envia “=“ para o PC • O PC pode então enviar: • O código de “Escape” (1BH), se pretender reinicializar o sistema (que nesse caso responderá com “=“) • O código do programa a executar • No final da transferência, o 87C51 envia “:” para o PC, a que se segue uma indicação do tipo de erro, se algum tiver ocorrido

  14. Protocolo de transferência: Tipos de erros • Códigos de erro (em hexadecimal): • 01: Caracteres não hexadecimais • 02: Erro de formatação • 04: Código de verificação incorrecto • 08: Não foram recebidos dados • 10: Excedeu-se a capacidade de memória • 20: Erro na verificação dos dados em memória

  15. Protocolo de transferência: Execução do programa • Após a recepção correcta, o 87C51 envia ao PC um checksum que resulta da soma de todos os bytes de dados que foram recebidos, truncada para 16 bits • O PC poderá então dar a ordem para execução do código, enviando a seguinte sequência de caracteres: “/<endereço>” (e.g. “/8000” para começar em 8000H) • Se o endereço for aceite, o 87C51 enviará um “@” ao PC e iniciará a execução do programa como indicado

  16. Uso da aplicação HyperTerminal

  17. Uso da aplicação HyperTerminal (cont.)

  18. Uso da aplicação HyperTerminal (cont.)

  19. Geração do código objecto • A geração do código objecto é feita por um cross-assembler, que lê um ficheiro com o código fonte (escrito em assembly) e produz o ficheiro com o código objecto (por exemplo, à instrução assemblymov 2,#5AH corresponde o código objecto 74, 5A) • O TASM é um cross-assembler do tipo shareware que ilustra bem as funções associadas a uma aplicação deste tipo

  20. Fluxo de dados no TASM • O TASM é um table-driven cross assembler:

  21. Formato Intel Hex (ASCII) • :LLAAAATTDD...CC (conteúdo de cada linha) • “:” representa o início da sequência • “LL” indica o número de bytes de dados presentes • “AAAA” representa o endereço de 16 bits que deve ser usado para iniciar o armazenamento do código objecto • “TT” representa o tipo de sequência (00: Dados; 01: Fim) • “DD...” são os bytes de dados • “CC” é um código de verificação (checksum)

  22. Geração de uma onda em dente de serra • Retomando o gerador de dente de serra, e invocando o TASM (tasm -51 serra.asm), obtemos:

  23. Geração de uma onda em dente de serra (cont.)

  24. Geração de uma onda em dente de serra (cont.) • A forma de onda gerada produz o efeito esperado: (considerado que o relógio do 87C51 é de 11,0592 MHz, qual seria o valor esperado para a frequência da onda em dente de serra?)

  25. Um gerador de formas de onda • A consideração de um exemplo mais complexo irá permitir-nos: • Consolidar os conhecimento adquiridos acerca do microcontrolador 80C51 • Discutir as questões relacionadas com a metodologia de desenvolvimento de aplicações • Ilustrar algumas questões associadas com o projecto de circuitos mistos (analógicos e digitais)

  26. Caracterização funcional • Pretende-se a seguinte funcionalidade: • Forma de onda seleccionável (triangular, dente de serra ascendente e dente de serra descendente) • Deve estar prevista a possibilidade de se acrescentarem posteriormente mais formas de onda • Frequência ajustável • Valores máximo e mínimo ajustáveis de forma independente dentro da excursão máxima possível

  27. Interface com o utilizador • Pretende-se um interface com 3 teclas e 4 leds: • A tecla “Função” desloca de forma circular a função seleccionada (o led aceso) • As teclas “+” e “-” permitem incrementar / decrementar o parâmetro associado à função seleccionada (se for a forma de onda, significa passar à seguinte / anterior)

  28. Condições iniciais • Após a (re)inicialização, o gerador de formas de onda pretendido deve passar ao seguinte modo: • A função activa deve ser a de selecção de forma de onda (aceso o led da esquerda) • A forma de onda na saída deve ser a triangular • A frequência deve estar no meio da escala • O valor máximo deve ser de +2,5 V • O valor mínimo deve ser de -2,5 V

  29. Exemplo de uso • Serra ascendente, mantendo a frequência inicial e com limites de +5 V e 0 (após ligar a alimentação): • Carregar em “+” até aparecer a serra ascendente • Carregar em “Função” duas vezes, para seleccionar o ajuste do valor máximo (aceso o led “Valor máximo”) • Carregar em “+” até que o valor máximo seja de +5 V • Carregar em “Função” uma vez (passa ao valor mínimo) • Carregar em “+” até que o valor mínimo seja de 0 V

  30. Atribuição de recursos • Analisando os recursos disponíveis no nosso sistema mínimo, podemos fazer a seguinte atribuição: • (saídas digitais e respectivos leds) P1.0: Forma de onda; P1.1: Frequência; P1.2: Valor máximo; P1.3: Valor mínimo • (entradas digitais e respectivas teclas) P1.4: Tecla Função; P1.5: Tecla +; P1.6: Tecla - • Havendo apenas uma saída analógica, a atribuição deste recurso está feita por natureza

  31. Atribuição de recursos (cont.) • Resulta deste modo a seguinte disposição:

  32. Organização das rotinas a desenvolver • Modelo de organização:

  33. Organização da subrotina de gestão do sistema

  34. Exemplo de funcionamento • Inicialização e passagem à forma de onda seguinte:

  35. Gerador de formas de onda: Implementação alternativa • Nesta implementação alternativa, introduziremos as seguintes diferenças: • Pretende-se o menor número possível de componentes • Controlo remoto (via RS-232C, em vez de ser através de um painel frontal) • Usaremos as interrupções do T/C 0 para determinar o ritmo de actualização da saída do conversor D/A (e por conseguinte a frequência das formas de onda geradas)

  36. Diagrama esquemático

  37. Código do novo gerador de formas de onda • Uma vez que o controlo de funcionamento tem agora lugar via RS-232C e a actualização da saída do conversor D/A é cadenciada pelo T/C 0, temos as seguintes rotinas para escrever: • Inicialização do sistema • Atendimento das interrupções da porta série • Atendimento das interrupções do T/C 0

  38. Rotina de inicialização do sistema Inicialização de parâmetros: - Valor máximo: 75% - Valor mínimo: 25% - Forma de onda: triangular - Declive inicial: ascendente Inicialização do microcontrolador: - Periférico série: modo 1, recepção habilitada - T/C 0 e T/C 1: T/C 0 – modo 2, ints habilitadas, TH0 a meio da escala; T/C 1 – modo 2, ints inibidas, TH1 para 9.600 bps - Interrupções: Habilita PS e T/C 0, com prioridade mais elevada para a PS - Activa dos dois T/C Espera pelos pedidos de interrupção

  39. Interrupções da porta série (chegou um carácter) 0023H Inc. código da forma de onda Inc. valor de TH0 Inc. valor máximo Inc. valor mínimo Limpa RI RETI RETI RETI RETI S S S S Carácter “+”? Acção “Forma de onda”? Acção “Frequência”? Acção “Valor máximo”? Acção “Valor mínimo”? S N N N N N RETI N Carácter “-”? Acção “Forma de onda”? Acção “Frequência”? Acção “Valor máximo”? Acção “Valor mínimo”? S N N N N S S S S Guarda código ASCII em R6 Dec. código da forma de onda Dec. valor de TH0 Dec. valor máximo Dec. valor mínimo RETI RETI RETI RETI RETI

  40. Interrupções do T/C 0 (actualiza a saída do D/A) 000BH N N N Forma de onda triangular? Forma de onda serra ascendente? Forma de onda serra descendente? S S S Se não atingiu o máximo, incrementa; caso contrário, passa para o valor mínimo Se não atingiu o mínimo, decrementa; caso contrário, passa para o valor máximo RETI RETI Declive ascendente? N Aplica nível DC a meio da escala S RETI Se não atingiu o máximo, incrementa; caso contrário, passa para descendente e decrementa Se não atingiu o mínimo, decrementa; caso contrário, passa para ascendente e incrementa RETI RETI

  41. Configuração do HyperTerminal

  42. Controlo de uma plataforma móvel • Pretende-se neste caso implementar um interpretador para a linguagem (pseudo-) LOGO que foi descrita no capítulo 6 do livro recomendado • No cap. 6 é apresentado um microprocessador dedicado para implementar esta linguagem, mas agora queremos usar um AT89C51 • A escrita do código LOGO deve ser feita no PC e o respectivo código objecto enviado via RS232C

  43. A plataforma móvel

  44. O accionamento com motores passo-a-passo Formas de onda nas quatro fases (movimento para a frente): A 0 1 1 0 … B 1 0 0 1 … C 0 0 1 1 … D 1 1 0 0 … Tabela em memória para o movimento para a frente: P2.7 … P2.0 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0

  45. ; opcode das instruções LOGO: front equ 66h ; f back equ 62h ; b left equ 6Ch ; l right equ 72h ; r setout0 equ 20h ; espaço setout1 equ 21h ; ! setout2 equ 22h ; " setout3 equ 23h ; # rstout0 equ 30h ; 0 rstout1 equ 31h ; 1 rstout2 equ 32h ; 2 rstout3 equ 33h ; 3 jpin0 equ 70h ; p jpin1 equ 71h ; q jpin2 equ 72h ; r jpin3 equ 73h ; s jp equ 6Ah ; j halt1 equ 68h ; h halt2 equ 68h ; h Controlo do movimento • As instruções existentes dividem-se por quatro grupos principais: • Movimento • Actuação das saídas • Salto • Paragem

  46. Rotinas existentes • Existem quatro rotinas principais: • Inicialização do sistema – inicio.a51 • Interpretador que executa o código LOGO – interpr.a51 • Atendimento das interrupções pedidas pela porta série – int_ps.a51 • Atendimento das interrupções pedidas pelo T/C 0 – int_tc0.a51 (neste caso o atendimento não é automático, sendo monitorizado o valor da flag TF0 e executada a rotina de atendimento através de uma instrução CALL)

  47. Rotina inicio.a51 (inicialização do sistema) • Após a inicialização dos registos, dos contadores, da porta e do sistema de interrupções, limita-se a esperar que cheguem caracteres via RS232C ; Uso dos registos: ; > R0- apontador para a tabela LOGO na recepção RS232C (armazenar) ; > R1- apontador para a tabela LOGO no execução (para ler a instrução) ; > R2- não é usado nesta implementação ; > R3- Unidades de deslocamento (UD) requeridas para o movimento ; > R4- factor multiplicativo (factm) entre cada UD e o número de passos ; > R5- não é usado nesta implementação ; > R6- usado na leitura das tabelas de passo (contém o offset) ; > R7- usado na leitura das tabelas de passo (contém o índice)

  48. Rotina interpr.a51 (interpretador LOGO) • O código LOGO (designado por “tabela LOGO”) está armazenado entre 30H (ENDINI) e 7FH (ENDFIN) • A execução deve ser suspensa se for atingido o endereço final • Qualquer código ilegal deve ser tratado como NOP (“no operation”)

  49. Rotina int_ps.a51 (atendimento int. porta série) • Recebe o código LOGO e a ordem para o executar • HALT ocupa dois bytes que só surgem neste caso (serve também para marcar o fim da recepção) • À chegada de HALT, deve acontecer o seguinte: • Reinicializa R0 (apontador para a tab. LOGO na recepção) e R1 (apontador para a tab. LOGO na execução) • Inicia a interpretação (execução) do código LOGO recebido • Se atingir o ENDFIN deixa de incrementar R0

More Related