A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Prática laboratorial com o 80C51

Apresentações semelhantes


Apresentação em tema: "Prática laboratorial com o 80C51"— Transcrição da apresentação:

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

11 Carta de circuito impresso

12 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)

13 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)

14 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

15 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

16 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

17 Uso da aplicação HyperTerminal

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

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

20 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 assembly mov 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

21 Fluxo de dados no TASM O TASM é um table-driven cross assembler:

22 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)

23 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:

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

25 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?)

26 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)

27 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

28 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)

29 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

30 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

31 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

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

33 Organização das rotinas a desenvolver
Modelo de organização:

34 Organização da subrotina de gestão do sistema

35 Exemplo de funcionamento
Inicialização e passagem à forma de onda seguinte:

36 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)

37 Diagrama esquemático

38 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

39 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 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

40 Interrupções da porta série (chegou um carácter)
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

41 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

42 Configuração do HyperTerminal

43 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

44 A plataforma móvel

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

46 ; 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

47 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)

48 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)

49 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”)

50 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

51 Rotina int_tc0.a51 (atendimento int. T/C 0)
Esta rotina é executada em resultado de uma instrução CALL, quando se detecta que TF0 = 1 O T/C 0 é que permite cadenciar a sequência de passos (os motores são controlados pela porta 2) As combinações de passo estão armazenadas nas “tabelas de passo” (existe uma tabela para cada tipo de movimento: frente, trás, esquerda, direita) Ao terminar o movimento o T/C 0 é desactivado

52 KEIL: Resultado produzido
L51 LINKER/LOCATOR V /12/01 22:52:02 PAGE 1 (...) INPUT MODULES INCLUDED: C:\JMF\PUBLIC~1\MP\DIVERSOS\LOGO\INICIO.OBJ (INICIO) C:\JMF\PUBLIC~1\MP\DIVERSOS\LOGO\INT_TC0.OBJ (INT_TC0) C:\JMF\PUBLIC~1\MP\DIVERSOS\LOGO\INT_PS.OBJ (INT_PS) C:\JMF\PUBLIC~1\MP\DIVERSOS\LOGO\INTERPR.OBJ (INTERPR) LINK MAP OF MODULE: C:\JMF\PUBLIC~1\MP\DIVERSOS\LOGO\LOGO (INICIO) TYPE BASE LENGTH RELOCATION SEGMENT NAME * * * * * * * D A T A M E M O R Y * * * * * * * REG H H ABSOLUTE "REG BANK 0" * * * * * * * C O D E M E M O R Y * * * * * * * CODE H H ABSOLUTE 0003H H *** GAP *** CODE BH H ABSOLUTE 000EH H *** GAP *** CODE H H ABSOLUTE 0047H H *** GAP *** CODE H H ABSOLUTE 0074H CH *** GAP *** CODE H H ABSOLUTE 0121H FH *** GAP *** CODE H H ABSOLUTE ****************************************************************************** >> * RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 0184H BYTE (18%) * LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S) (JMP INICIO) (JMP INT_TC0) INT_PS.A51 INT_TC0.A51 INICIO.A51 INTERPR.A51

53 Conclusão Objectivo principal do capítulo: Proporcionar os recursos mínimos que facilitem a passagem à prática laboratorial com o 87C51 Pistas para a continuação do estudo: Aprofundar o conceito de monitor residente Sistemas de desenvolvimento


Carregar ppt "Prática laboratorial com o 80C51"

Apresentações semelhantes


Anúncios Google