Microcontroladores Família MCS51
|
|
|
- Ruy da Rocha Paiva
- 10 Há anos
- Visualizações:
Transcrição
1 Microcontroladores Família MCS51 Colégio Técnico de Campinas COTUCA Disciplina TDM II- Departamento Eletroeletrônica
2 1- Conceitos Básicos Um sistema computador é constituído por três blocos de base ligados através de três barramentos como se pode ver na figura 1. Figura 1 Diagrama de blocos de um computador. Os três blocos de base são: a unidade central de processamento (CPU), as memórias de programa e de dados e o sistema de comunicação com o exterior (sistema E/S). A ligação entre os blocos de base é feita através de três barramentos: barramento de dados, barramento de endereços e barramento de controle. A unidade central de processamento divide-se funcionalmente em duas unidades: a unidade de processamento de dados (CPU) e a unidade de controle e é responsável pela execução do programa. A unidade de controle decodifica e controla a execução das instruções gerando os comandos que permitem o processamento da informação de acordo com o programa que está sendo executado. O registrador program counter (PC) e o registrador de status fazem também parte da unidade de controle. A unidade de processamento de dados faz o processamento da informação e é constituída por uma unidade aritmética e lógica e por um conjunto variável de registradores com funções genéricas. A estrutura descrita designa-se estrutura de Von Neumann. 1.1 Conceitos de microprocessador Designa-se por microprocessador um circuito integrado que implemente as funções de uma unidade central de processamento. O primeiro microprocessador, designado 4004, surgiu em 1971 tendo sido produzido pela empresa Intel. Antes dessa data as unidades centrais de processamento eram implementadas recorrendo a diversos componentes. 1.2 Conceitos de microcontrolador Designa-se por microcontrolador um circuito integrado que implementa um sistema computador. Um microcontrolador é constituído por um microprocessador e um ou mais dos seguintes dispositivos: memória, temporizador/contador, conversor A/D, conversor D/A, controlador DMA, porta paralela, porta série, circuitos para interface com memória externa, nomeando apenas os blocos mais comuns. A principal aplicação dos microcontroladores são os sistemas embarcados, em que o microcontrolador é programado para cumprir determinada função sendo colocado junto do sistema com que vai interagir. Estes componentes são utilizados para estas funções porque são pequenos, versáteis e (quase) auto-suficientes. Como exemplos típicos de microcontroladores de 8 bits podem referir-se os microcontroladores das famílias seguintes: família MCS-51 da Intel, família M68HC11 da Motorola e família PIC da Microchip.
3 2 - Família MCS-51 A arquitetura básica da família MCS-51 é constituída por uma unidade central de processamento de 8 bits otimizada para aplicações de controle, 64 Kbytes de espaço de endereçamento para a memória de programa, 64 Kbytes de espaço de endereçamento para a memória de dados, 4 Kbytes de memória de programa interna, 128 bytes de memória de dados interna, 32 linhas entrada/saída bidirecionais endereçáveis individualmente. Dois temporizadores/contadores de 16 bits, uma UART (universal asynchronous receiver transmiter) full duplex, uma estrutura de interrupções com 5 fontes de interrupção correspondentes a 5 vetores de interrupção com dois níveis de prioridades cada e um circuito oscilador para gerar o sinal de relógio. O diagrama de blocos da arquitetura de base da família MCS-51 pode ser visto na figura 2. Figura 2- Arquitetura do microcontrolador 80C51. As diferenças deste microcontrolador para outros membros da família MCS-51 relacionam-se fundamentalmente com a quantidade de memória interna (memória de programa e memória de dados) e com as capacidades de E/S de cada um. Na tabela 1 apresentam-se algumas das características de alguns dos microcontroladores da família MCS-51.
4 Tabela 1- Tabela comparativa das características de alguns microcontroladores da família MCS Organização da memória A memória de dados e a memória de programa têm espaços de endereçamento diferentes cada um com 64 Kbytes, organizados segundo os mapas de memória da figura Memória de programa Figura 3- Mapas de memória do microcontrolador 80C51. A memória de programa é uma memória do tipo ROM, por isso sobre ela só se efetuam operações de leitura. Este memória pode ser interna e/ou externa e ocupa no máximo 64 Kbytes. O acesso à memória de programa externa faz-se recorrendo ao sinal /PSEN (Program Strobe Enable) que deverá ser ligado ao pino de output enable da memória. O sinal aplicado ao pino /EA do microcontrolador determina qual o tipo de acesso a ser feito para os 4 Kbytes inferiores da memória de
5 programa. Se /EA = 0, para endereços a partir de 0000H o acesso é feito à memória de programa externa, se /EA = 1, o acesso é feito è memória de programa interna para endereços de 0000H até 0FFFH, sendo feito o acesso à memória de programa externa para endereços mais elevados Memória de dados A memória de dados é do tipo RAM podendo ser lida ou escrita pelo microcontrolador. Esta memória pode ser interna e/ou externa. O espaço de endereçamento associado à memória de dados é de 64 Kbytes Memória de programa externa O acesso à memória de programa externa faz-se recorrendo aos sinais /RD (Read) e /WR (Write) fornecidos pelo microcontrolador para controle da operação da memória. O endereçamento pode fazer-se recorrendo a um mínimo de um e máximo de dois bytes. Para acesso à memória de programa externa utiliza-se a porta P0 como barramento multiplexado de endereços/dados (byte menos significativo). A porta P2, caso seja necessária a sua utilização, funciona como barramento de endereços (byte mais significativo) Memória de dados interna A memória de dados interna encontra-se dividida em 3 blocos distintos, de acordo com o mapa da figura 4. O acesso à memória de dados interna faz-se utilizando endereços de 8 bits. Figura 4- Memória de dados interna. A área de memória superior contém os registrradores com funções especiais, SFRs (Special Function Registers). O acesso a esta área de memória faz-se utilizando endereçamento direto. A função de cada um destes registradores será analisada em detalhe no item 5. A área de memória superior representada na figura 4 a tracejado não está implementada no microcontrolador 80C51 existindo apenas nos dispositivos com 256 bytes de RAM interna. O acesso a esta área de memória é feito utilizando endereçamento indireto sendo uma região de uso genérico. A parte inferior da memória de dados interna encontra-se dividida em três regiões distintas como se pode ver no mapa da figura 5. O acesso pode ser feito utilizando endereçamento direto ou indireto. Figura 5- Espaço inferior da memória de dados interna.
6 Os 32 bytes inferiores destinam-se aos quatro bancos de oito registradores designados R0 a R7. A seleção do banco de registrradores é feita recorrendo aos bits RS1 (Register Select) e RS0 do registrador PSW (Program Status Word). Segue-se uma área de 16 bytes (128 bits) endereçáveis bit a bit sendo a restante área de uso genérico Esquemas de montagem para acesso à memória externa As ligações à memória externa fazem-se utilizando os sinais de controle disponibilizados pelo microcontrolador Memória de programa externa No exemplo apresentado na figura 6 considera-se que toda a memória de programa é externa e por isso o pino /EA do microcontrolador é ligada a terra. O endereçamento é feito utilizando 16 bits o que implica a utilização para endereçamento da porta P2 (além da porta P0). O sinal ALE (Address Latch Enable) utiliza-se para fazer a desmultiplexagem do barramento P0 permitindo que o byte menos significativo do endereço fique disponível através da latch durante a fase de acesso à memória. O sinal /PSEN controla a operação da memória sendo a leitura dos dados feita através de P Memória de dados externa Figura 6- Acesso à memória de programa externa. A figura 7 apresenta um esquema de montagem para acesso à memória de dados externa. Neste exemplo considerou-se que toda a memória de programa é interna (/EA = VCC). Utiliza-se o esquema de demultiplexagem referido anteriormente. Os sinais /RD e /WR são utilizados para fazer o controle da memória. Caso não seja necessário acessar a todo o espaço de endereçamento pode recorrer-se só à utilização de alguns dos bits da porta P2 (além da porta P0) para fazer o endereçamento da memória. A troca de dados faz-se através da porta P0. Figura 7- Acesso à memória de dados externa.
7 4 - Registradores com funções especiais (SFRs) Os registradores com funções especiais encontram-se mapeados na parte superior da memória de dados interna e são acessados utilizando endereçamento direto. A tabela 2 apresenta o símbolo, o nome, o endereço e o tipo de endereçamento para cada SFR do microcontrolador 80C51. Símbolo Nome End. [Hexadecimal] Endereçamento ACC Acumulador E0 Bit B Registrador B F0 Bit PSW Program Status Word D0 Bit SP Stack Pointer 81 Registrador DPTR Data Pointer [2 bytes] DPL Byte menos significativo 82 Registrador DPH Byte mais significativo 83 Registrador P0 Porta 0 80 Bit P1 Porta 1 90 Bit P2 Porta 2 A0 Bit P3 Porta 3 B0 Bit IP Interrupty Priority Control B8 Bit IE Interrupty Enable Control A8 Bit TMOD Timer/Counter mode Control 89 Registrador TCON Timer/Counter Control 88 Bit TH0 Timer/Counter 0 high byte 8C Registrador TL0 Timer/Counter 0 low byte 8A Registrador TH1 Timer/Counter 1 high byte 8B Registrador TL1 Timer/Counter 1 low byte 8D Registrador SCON Serial control 98 Bit SBUF Serial Data Buffer 99 Registrador PCON Power Control 87 Registrador Registrador acumulador Tabela 2 Registradores com funções especiais. O registrador acumulador serve de interface com a unidade aritmética e lógica da CPU. Nos programas deve ser referido por [A]. Este registrador pode ser endereçado bit a bit Registrador B Este registrador é utilizado durante as operações de divisão e multiplicação em conjunto com o registrador acumulador. Para outras operações pode ser tratado como um registrador comum. É endereçável bit a bit Registrador Program Status Word O registrador PSW corresponde ao registrador de status da arquitetura de Von Newman e contém informação sobre a execução dos programas. O registrador é apresentado em detalhe na figura 8. Figura 8- Registrador PSW.
8 O bit mais significativo do registrador (PSW.7) designa-se CY (carry flag) e reflete a condição de carry no oitavo bit do acumulador. O bit seguinte (PSW.6), designado AC (Auxiliary Carry flag), reflete a condição de carry no quarto bit do registrador acumulador. O bit PSW.5 designa-se F0 e utiliza-se como flag de uso genérico. Os bits PSW.4 e PSW.3 são os bits de seleção do banco de registradores, designados RS1 e RS0 respectivamente. A seleção é feita de acordo com a tabela 3. Tabela 3- Seleção do banco de registradores. O bit PSW.2 designa-se OV e reflete a condição de overflow. O bit PSW.1 não tem nome atribuído e representa uma flag a ser definida pelo utilizador. Finalmente o bit PSW.0, designado P, reflete a paridade do registrador acumulador. O bit P é colocado no nível lógico 1 se o número de 1s no acumulador for impar e nos outros casos o bit P é colocado no nível lógico Registrador Stack Pointer Contém o endereço do topo da stack. A stack é uma estrutura de dados do tipo LIFO (last-in-first-out) utilizada para guardar informação de modo temporário Registrador Data Pointer Conjunto de dois registradores de 8 bits, DPL e DPH, que contêm um endereço de 16 bits. Este registrador tem três aplicações principais: fazer procura em tabelas no espaço de memória de programa utilizando a instrução MOVC Implementar saltos multi-direcionais utilizando a instrução acesso à memória de dados externa, utilizando a instrução MOVX A,@DPTR ou a instrução Registradores associados às Portas P0 a P3 são os registradores associados aos latches das portas de E/S P0, P1, P2 e P3, respectivamente Registradores para controle de interrupções IP e IE são os registradores que permitem fazer a seleção de prioridades e a ativação das interrupções, respectivamente Registradores dos temporizadores/contadores TH0, TL0 e TH1, TL1 são os registradores que contém as contagens dos temporizadores/contadores 0 e 1 respectivamente. TMOD e TCON são os registradores de controle e status dos temporizadores/contadores. O primeiro permite fazer a programação do modo de operação e no segundo encontram-se bits relacionados com o controle do funcionamento dos temporizadores/contadores.
9 4.9 - Registradores da porta série SBUF representa dois registradores distintos um de recepção e outro de transmissão. A utilização de um ou de outro é selecionada automaticamente pelo hardware da porta série dependendo do contexto em que SBUF está a ser referido na instrução do programa (leitura ou escrita). SCON é o registrador de controle e status da porta série Registrador Power Control O registrador power control permite efetuar a programação do modo de operação do microcontrolador Registrador Program Counter O registrador program counter (PC) embora não seja referido na tabela, pois não pode ser diretamente acessado pelo programador, é um registrador de 16 bits que contém o endereço da próxima instrução a executar. Depois de efetuado o reset do microcontrolador o conteúdo deste registrador é zero. 5 - Modos de endereçamento A codificação das instruções da família MCS-51 é feita utilizando um byte para o código de operação (opcode) e 0 a 2 bytes para informação sobre os operandos. Os modos de endereçamento utilizam-se para especificar os operandos necessários para cada instrução. A família MCS-51 dispõe de 10 modos de endereçamento divididos por três classes: modos de endereçamento de dados, modos de endereçamento relativos a saltos e modos de endereçamento relativos a bits Modos de endereçamento de dados Existem cinco modos de endereçamento de dados: registrador inerente, direto, imediato, indireto e indexado Registrador inerente O modo de endereçamento registrador inerente utiliza-se para os registradores em que não é necessário especificar nenhum byte adicional para designar o operando. O registrador a operar é codificado no código de operação da instrução. Os registradores para os quais este método de codificação é feito são os seguintes: R0 a R7, A, PSW, SP e PC. Este modo de endereçamento caracteriza-se pelo tipo de codificação explícita que fornece para todas as instruções que utilizem os registradores referidos. Este modo de endereçamento pode coexistir na mesma instrução com os outros modos de endereçamento de dados referidos nos pontos seguintes. Exemplos: Direto MOV R1,#25 INC R0 ; coloca o valor 25 no registrador R1 ; adiciona 1 ao conteúdo do registrador R0 Este modo de endereçamento utiliza-se para acessar a memória de dados interna. A codificação da instrução é feita com um byte para o código de operação da instrução e um byte adicional para especificar o endereço a acessar. Como a especificação do endereço se faz num único byte a gama de endereços possível é de 0 a 255. A gama de endereçamento referida permite acessar a toda a área de
10 memória de dados interna podendo especificar-se o acesso a um registrador ou a uma variável. Exemplos de operação sobre variáveis em RAM interna: MOV 23H,A ADD A,40H ; copia o conteúdo do acumulador para a posição de ; memória cujo endereço é 23H. ; soma o conteúdo da posição de memória 40H ao ; acumulador. Exemplos de operação sobre SFRs: MOV B0H,A ; coloca o conteúdo do acumulador à saída da porta P3. Este estilo de programação, embora correto, não é muito claro e facilita a ocorrência de erros. Sempre que sejam referidos SFRs deve optar-se pela utilização do seu nome simbólico, o que torna o código mais perceptível evitando a ocorrência de erros. O assembler do MCS-51 permite a utilização de nomes simbólicos para os SFRs. MOV P3,A ; coloca o conteúdo do acumulador à saída da porta P3 ; recorrendo ao nome simbólico do registrador associado ; a porta 3. O assembler procede à tradução do nome simbólico para o endereço correspondente Imediato O modo de endereçamento imediato permite especificar um valor numérico constante. As constantes a especificar podem ter 8 bits ou 16 bits. Os valores de 16 bits só podem ser usados em conjunto com o registrador DPTR. Em assembly os valores numéricos imediatos são precedidos do caractere #. Exemplos: MOV A,#22 ; carrega o acumulador com o valor 22. ADD A,#30 ; soma 30 ao acumulador MOV DPTR,#20F0H ; carrega o valor hexadecimal 20F0 ; no registrador DPTR Indireto No modo de endereçamento indireto a instrução especifica um registrador que contém o endereço do operando. Tanto a memória de dados interna como a externa podem ser endereçadas deste modo. Este modo de endereçamento é útil no acesso a arrays. Só os registradores R0, R1 e DPTR podem ser utilizados como ponteiros de dados. R0 e R1 são ponteiros de 8 bits e DPTR é um ponteiro de 16 bits. O registrador a utilizar é precedido do Exemplos: ADD A,@R1 A MOVX A,@DPTR ; adiciona o conteúdo da posição de memória ; pontada por R1 ao acumulador. ; guarda o conteúdo do acumulador na posição de ; memória apontada por R0. ; copia o conteúdo da posição de memória externa ; apontada por DPTR para o acumulador.
11 Indexado Este modo de endereçamento só é permitido para acesso à memória de programa, por isso só é utilizado para leitura. Destina-se ao acesso a tabelas e a instruções de salto. No acesso a tabelas um registrador de 16 bits (DPTR ou PC) contém o endereço base da tabela e o acumulador é carregado com o número de entrada na tabela. O endereço da entrada na tabela é calculado somando ao valor do registrador o valor do acumulador. Na instrução JMP o endereço do destino é calculado como a soma do ponteiro base (DPTR ou PC) e do valor do acumulador. Exemplos: MOVC A,@A+DPTR MOVC A,@A+PC ; coloca no registrador PC o valor igual à soma do ; conteúdo dos registradores DPTR e acumulador e ; continua a execução do programa a partir desse ; endereço. ; carrega o conteúdo da posição de memória ; apontada pela soma dos registradores acumulador ; e DPTR no acumulador. ; carrega o acumulador com o conteúdo da posição ; de memória cujo endereço é a soma dos ; registradores acumulador e PC Modos de endereçamento relativos a saltos São três os modos de endereçamento relativos a saltos: relativo, absoluto e longo Relativo Este modo de endereçamento é utilizado com instruções de salto condicional. O deslocamento (offset) do salto é de 8 bits, tendo uma gama de 128 a 127 bytes, e calcula-se tendo por referência o primeiro byte depois da instrução de salto. Quando o salto é executado o deslocamento é somado ao conteúdo do registrador PC para formar o endereço de destino. O destino do salto é normalmente especificado utilizando um rótulo (label) sendo o assembler que calcula o valor do deslocamento efetivo de acordo com as regras descritas. Exemplos: JZ et1 JNC et2 ; salta para a instrução com o rótulo et1 se o ; valor no acumulador for nulo. ; salta para a instrução com o rótulo et2 se a ; flag de carry do registrador PSW for igual a Absoluto Este modo de endereçamento é utilizado com as instruções ACALL e AJMP. São especificados os 11 bits menos significativos da instrução de destino. Os 5 bits mais significativos são iguais aos 5 bits mais significativos do registrador PC. Devido ao fato de só ser possível especificar 11 bits do endereço de destino só são permitidos saltos dentro da página corrente de 2 Kbytes da memória de programa. O endereço absoluto é normalmente especificado recorrendo a um rótulo que o assembler traduz. Exemplos: ACALL et3 ; chama a sub-rotina que tem início na posição ; dada por et3 AJMP ciclo1 ; faz com que a instrução com o rótulo ciclo1 ; seja executada a seguir à instrução corrente.
12 Longo Colégio Técnico de Campinas Cotuca Disciplina - TDM II Este modo de endereçamento utiliza-se com as instruções LCALL e LJMP. É especificado um endereço de 16 bits para destino do salto. O endereço longo é normalmente referido no programa recorrendo a um rótulo. Exemplos: LCALL et5 ; chama a sub-rotina cujo início corresponde à ; posição de memória ao rótulo et5. LJMP ciclo2 ; faz com que a instrução como rótulo ciclo2 ; seja executada a seguir a esta instrução Modos de endereçamento relativos a bits Os modos de endereçamento relativos a bits são dois: bit inerente e bit direto Bit inerente O modo de endereçamento bit inerente utiliza-se com instruções booleanas que operam com o bit carry flag do registrador PSW. O bit carry flag é codificado no código de operação não sendo necessário nenhum byte adicional para codificar o operando. Exemplos: SETB C ; coloca CY = 1. CLR C ; coloca CY = 0. CPL C ; complementa CY Bit direto Este modo de endereçamento utiliza-se com instruções booleanas que necessitam que o bit a operar seja identificado através de um byte adicional quando é feita a codificação da operação, para além do byte utilizado para o código de operação. São endereçáveis bits no espaço de RAM interna entre 20H e 2FH e bits da maioria dos SFRs. Endereços de bit entre 0 e 127 definem bits na área de memória de dados interna que pode ser endereçada bit a bit. Endereços de bit entre 128 e 255 correspondem a bits dos SFRs que são endereçáveis individualmente.
13 Figura 9 - Mapa de endereços de bit em memória interna. A linguagem assembly do MCS-51 especifica que o endereçamento a bit pode ser feito de três modos: pelo número ou expressão correspondente ao endereço direto do bit (0-255), pelo nome ou endereço do registrador que contém o bit seguido de um ponto e da posição do bit no registrador (0-7) ou pelo símbolo predefinido do bit em assembly. Nome do Posição do BIT Registrador PSW CY AC FO RS1 RS0 OV P P3 RD WR T1 T0 INT1 INT0 TXD RXD TCON TF1 TR1 TF0 TR0 IE1 IT1 TE0 IT0 SCON SM0 SM1 SM2 REN TB8 RB8 TI RI IE EA ES ET1 EX1 ET0 EX0 IP PS PT1 PX1 PT0 PX0 Exemplos: Tabela 4 - Símbolos dos bits dos registradores de controle e status. CLR PSW.6 SETB TR1 SETB 08H ; coloca a 0 o bit 6 (auxiliary carry) do registrador ; PSW. ; coloca a 1 o bit 6 do registrador TCON. ; coloca a 1 o bit 0 da posição de memória de dados ; interna 21H, correspondente ao endereço de bit 08H.
14 5.4 - Espaço de memória de dados / modos de endereçamento A área de memória de dados a acessar relaciona-se diretamente com o modo de endereçamento a utilizar. Assim para a área de memória de dados externa utilizase endereçamento indireto através dos registradores DPTR, R0 ou R1. Para a parte inferior (128 bytes menos significativos) da área de memória de dados interna, utilizam-se os modos de endereçamento direto ou indireto e para a parte superior da área de memória de dados interna (128 bytes mais significativos correspondentes aos SFRs) utiliza-se o modo de endereçamento direto. Finalmente para as áreas de memória interna acessíveis bit a bit utiliza-se o modo de endereçamento bit direto, a menos que a instrução atue sobre o bit de carry, sendo nesse caso utilizado o modo de endereçamento bit inerente. 6 - Conjunt o de Instruções O conjunto de instruções de qualquer microcontrolador pode dividir-se em cinco grupos fundamentais de operações: operações de transferência, operações aritméticas, operações lógicas (por vezes estes dois grupos são considerados em conjunto), operações sobre variáveis booleanas e operações de salto. A família MCS-51 não constitui exceção, podendo o seu conjunto de instruções ser dividido nos cinco grupos referidos. As operações pertencentes a cada grupo são apresentadas em seguida. As notações utilizadas pela família MCS-51 na apresentação do seu conjunto de instruções são as seguintes: Rn Registradores R0-R7 do banco de registradores selecionado. direto endereço de uma posição de memória (8 bits) do espaço de endereçamento direto (RAM de dados interna ou posição de memória de dados interna (8 bits) endereçada indiretamente através dos registradores R0 ou R1. #dados constante de 8 bits incluída na instrução. #dados16 constante de 16 bits incluída na instrução. end16 endereço de destino de 16 bits. end11 endereço de destino de 11 bits. Rel byte de deslocamento com sinal (complemento para 2) Operações de Transferência O grupo de operações de transferência é constituído pelas operações que permitem a transferência ou troca de informação entre duas posições de memória. Existem operações para transferência de código (MOVC), para manipulação da stack (PUSH e POP) e para troca de dados entre o acumulador e um registrador ou byte direto (XCH). As operações pertencentes a este grupo de instruções são apresentadas na tabela de SET de Instruções no final da apostila. Na tabela são apresentados os mnemônicos da operação, utilizadas para a escrita do programa, a descrição sumária da operação, o número de bytes que a operação ocupa depois de codificada e o número de períodos do oscilador necessários para a execução da operação Operações Aritméticas O grupo de operações aritméticas inclui operações para adição (ADD e ADDC), subtração (SUBB), incremento (INC), decremento (DEC), multiplicação (MUL), divisão (DIV) e ajuste decimal (DA). De acordo com a arquitetura da unidade aritmética e lógica, um dos operandos das operações aritméticas tem que estar colocado no registrador acumulador, sendo o resultado apresentado no mesmo registrador (adição e subtração). No caso das operações de multiplicação e de divisão o segundo operando tem que estar colocado no registrador B. O resultado da operação de multiplicação é de 16 bits sendo o byte menos significativo apresentado no acumulador e o byte mais significativo no registrador B.
15 Na operação de divisão o quociente é colocado no acumulador e o resto no registrador B. A operação de ajuste decimal utiliza-se o ajuste para BCD do valor contido no acumulador. Verificar este conjunto de instruções no final da apostila Operações Lógicas As operações lógicas do conjunto de instruções são as operações AND, OR, XOR, clear (CLR), complemento (CPL), rotação simples para a direita ou para a esquerda (RL, RR), rotação com carry, para a esquerda ou para a direita (RLC, RRC) e troca de nibbles (conjunto de 4 bits) no acumulador Operações sobre variáveis booleanas Este grupo de operações dispõe de instruções para colocar um bit a zero (CLR) ou a um (SETB), para complementar (CPL), para efetuar a operação AND ou OR entre um bit e a flag de carry, para transferência de um bit para a flag de carry ou da flag de carry para um bit e operações de salto condicional baseadas no teste da flag de carry (JC, JNC) ou no teste de um bit (JB, JNB) Operações de salto As instruções do grupo de operações de salto permitem alterar o fluxo de execução do programa. Existem instruções para chamada de rotinas (ACALL, LCALL), retorno de rotinas (RET) e de rotinas de serviço a interrupções (RETI), salto incondicional (AJMP, LJMP) e salto condicional (JZ, JNZ, CJNE, DJNZ). Existe ainda uma instrução que não produz nenhum resultado (NOP). A instrução de salto condicional JZ e JNZ permite o salto com base no teste do valor da flag de zero. A instrução CJNE compara o valor contido no acumulador, num registrador ou numa posição de memória acessível indiretamente, com o valor imediato ou com o byte direto referido na instrução e salta se os valores forem iguais. A instrução DJNZ decrementa o registrador ou byte direto e salta se o resultado da operação de decremento for zero Exercícios Resolvidos 1- Considere uma tabela com 50 elementos de 8 bits. A tabela está armazenada na memória de programa com início no endereço 1000H. Escreva uma seqüência de instruções que carregue o nono elemento da tabela no acumulador. MOV DPTR,#1000H MOV A,#8 MOVC A,@A+DPTR ; colocar endereço base no DPTR. ; colocar 8 no acumulador. ; utilizar endereçamento indexado para transferir ; o nono elemento da tabela para o acumulador. 2- Escrever uma seqüência de instruções para trocar o conteúdo das posições de memória 40H e 30H. MOV A,40H ; colocar conteúdo do endereço 40H (end. direto) em A. MOV B,30H ; colocar conteúdo do endereço 30H em B. MOV 30H,A ; guardar conteúdo de A na posição 30H. MOV 40H,B ; guardar conteúdo de B na posição 40H. 3- Adicione o conteúdo das posições de memória 40H e 30H e deixe o conteúdo no acumulador. MOV A,30H ; colocar o conteúdo do endereço 30H em A. ADD A,40H ; somar o conteúdo do endereço 40H a A. 4- Subtrair o conteúdo da posição de memória 40H e o carry ao conteúdo da posição de memória 30H.
16 MOV A,30H ; colocar o conteúdo do endereço 30H em A. SUBB A,40H ; subtrair o conteúdo do endereço 40H e o carry a A. 7- Temporização da unidade central de processamento A temporização da CPU faz-se recorrendo ao circuito oscilador do microcontrolador ou através de um sinal de relógio externo. Quando se utiliza o circuito oscilador à montagem recomendada segue o esquema da figura 10. Torna-se necessária a utilização de dois capacitores e um cristal oscilador como componentes externos. O cristal deve respeitar a especificação de freqüência máxima permitida e o valor dos capacitores depende do tipo de cristal utilizado e pode ser determinado consultando o datasheet do microcontrolador a utilizar. Figura 10- Esquema de montagem do circuito temporizador utilizando o oscilador interno do microcontrolador. Se o sinal de relógio for fornecido a partir do exterior pode utilizar-se o esquema da figura 11. Figura 11- Esquema de montagem do circuito temporizador para dispositivos HMOS ou CHMOS, utilizando um sinal de relógio externo Ciclos máquina e execução de instruções A execução de uma instrução implica a realização de uma série de operações base sobre o hardware que não podem ser executadas num único período de oscilação. Um ciclo máquina corresponde ao número mínimo de períodos do oscilador de que o microcontrolador necessita para executar uma instrução. Na família MCS-51 um ciclo máquina encontra-se dividido em 6 estados S1 a S6, cada um com duração de dois períodos do oscilador. Assim um ciclo máquina corresponde a um total de doze períodos do oscilador. O sinal ALE é ativado durante os estados S1 e S4 de cada ciclo máquina apresentado por isso uma freqüência igual a 1/6 da freqüência do oscilador.
17 8- O assembly da família MCS-51 Um programa em linguagem assembly MCS-51 é constituído por linhas de que podem ser: instruções da linguagem assembly. comentários. diretivas para o assembler. Cada linha contendo instruções em assembly está dividida em 4 campos alguns dos quais podem estar vazios. Esses campos são: campo da etiqueta ou rótulo. campo da operação. campo dos operandos (0 a 3 operandos). campo de comentário. O campo da etiqueta [ou rótulo]; é facultativo e consiste num identificador que constitui a etiqueta seguida de [:]. Os campos da operação e dos operandos estão diretamente relacionados, pois o número de operandos a utilizar depende da operação. Estes campos são constituídos pelas operações descritas no conjunto de instruções seguindo o formato apresentado nas tabelas 5 a 9 (onde são apresentados os tipos de operandos permitidos para cada operação). O campo de comentário é facultativo e inicia-se com [;]. Podem existir linhas que contenham apenas comentários que deverão iniciar-se por [;]. Designa-se por programa assembler ou simplesmente assembler o programa que traduz o código em linguagem assembly para código máquina, que corresponde ao código que a CPU consegue processar. Cada assembler tem as suas particularidades próprias e as suas limitações sendo sempre necessária a consulta do manual a ele associado quando durante a fase de programação do código. As linhas de diretivas para o assembler correspondem a ordens para o assembler sobre o modo como ele vai efetuar a tradução do código escrito em assembly para código máquina. Em seguida são apresentadas as diretivas utilizadas pelos assemblers da família MCS-51, devendo notar que nem todos os assemblers utilizam todas as diretivas descritas, por isso a consulta da documentação relacionada com o assembler é indispensável Diretivas do assembler Existem oito tipos de diretivas: para controle de segmentos. para definição de símbolos. para inicialização de memória. para reserva de memória. para ligação do programa. para controle de endereços. para definição de macros. outras diretivas. Em seguida serão apresentadas as diretivas correspondentes a cada tipo Diretivas para controlo de segmentos Designa-se por segmento um bloco de memória de código ou de dados criado pelo assembler. As diretivas para controle de segmentos servem para criar e selecionar segmentos. Estão definidas cinco classes de memória que podem ser utilizadas na definição ou criação do segmento:
18 BIT bit em memória interna. Endereços até de 0 a 255. CODE memória de código. Endereços de 0000H a 0FFFFH. DATA memória de dados acessíveis através de endereçamento direto. Endereços de 0 a 255 (posições genéricas de 0 a 127 e SFRs de 128 a 255). IDATA memória de dados interna. Endereços de 0 a 255. XDATA memória de dados externa. Endereços de 0000H a 0FFFFH. As diretivas deste tipo são apresentadas na tabela 5. Exemplos: Tabela 5- Diretivas para controle de segmentos. mprogr SEGMENT CODE ; define o segmento de código mprogr. RSEG mprogr ; ativa o segmento mprogr. dd1 SEGMENT DATA ; define o segmento de dados dd1. mprog1 SEGMENT CODE AT 1000H ;define o segmento de código mprogr1 com ; início no endereço 1000H. xdd SEGMENT XDATA PAGE ; define o segmento de dados externos xdd ; alinhado com uma página de 256 bytes. BSEG AT 20H ; define um segmento absoluto de bit com ; início no endereço 20H Diretivas para definição de símbolos As diretivas para atribuição de símbolos atribuem determinado valor a um símbolo. As diferenças entre as várias diretivas deste tipo relacionam-se com o tipo de valor a atribuir ao símbolo. A lista das diretivas deste tipo é apresentada na tabela 6. Exemplos: Tabela 6- Diretivas para definição de símbolos. pt_leitura SET R1 ; utilizar R1 como pt_leitura. falso EQU 0 ; utilizar falso para representar 0. flag1 BIT 50H ; utilizar o bit cujo endereço é 50H como flag1. restart CODE 00H ; faz restart igual à memória de código 00H. PORT1 DATA 90H ; atribui a PORT1 o valor 90H correspondente ; ao endereço do registrador associado ao porto P1.
19 Diretivas para inicialização de memória As diretivas para inicialização de memória permitem inicializar em memória de código posições de 8 ou 16 bits. A tabela 7 apresenta as diretivas disponíveis com esta função. Exemplos: Tabela 7- Diretivas para inicialização de memória. segmento1: DB 7EH,60H,6DH,79H ; inicializa 4 posições de 8 bits, com início ; na posição cujo endereço corresponde à ; etiqueta segmento1, com os valores ; indicados. prompt: DB Ola, como esta! ; neste caso a inicialização é feita com ; os códigos ASCII ; correspondentes aos caracteres entre. tab_salto: DW end1, end2, end3 ; inicializa o segmento de ; código com os endereços ; correspondentes às etiquetas ; end1, end2 e end Diretivas para reserva de memória Este tipo de diretivas serve para reservar espaços de memória de 1 ou de 8 bits. As diretivas deste tipo são apresentadas na tabela 8. Exemplos: Tabela 8- Diretivas para reserva de memória. DBIT 9 DS 25 ; reserva nove bits. ; reserva 25 bytes no segmento ativo Diretivas para ligação do programa As diretivas para ligação do programa utilizam-se quando o programa a desenvolver se encontra distribuído por vários módulos. Como os módulos necessitam de partilhar informação torna-se necessário identificar a origem da informação (quando externa) ou qual a informação que vai ser partilhada. As diretivas deste tipo utilizam-se para essas funções e encontram-se na tabela 9. Tabela 9- Diretivas para ligação do programa.
20 Exemplos: Colégio Técnico de Campinas Cotuca Disciplina - TDM II PUBLIC s1, s2, s3 ; torna públicos os símbolos s1, s2 e s3. EXTRN CODE(s1, s2) ; declara que os símbolos s1 e s2 estão definidos noutro ; módulo. NAME módulo1 ; especifica que o módulo objeto a se deve chamar ; módulo Diretivas para controle de endereços Estas diretivas servem para determinar o endereço em que o código deve ser posicionado e para seleção do banco de registradores a utilizar. Estas diretivas encontram-se na tabela 10. Exemplos: Tabela 10- Diretivas para controle de endereços. ORG 2000H ; posiciona o contador de localização no endereço 2000H ORG reset ; em que reset é um símbolo predefinido correspondendo a um ; dado endereço. USING 2 ; seleciona o banco de registradores número Diretivas para definição de macros Este tipo de diretivas permite definir macros. Designa-se por macro um conjunto de instruções reunidas sob uma determinada etiqueta utilizando diretivas específicas. Quando a etiqueta é referida no programa o assembler procede à sua substituição pelo código referido anteriormente. Nem todos os assemblers suportam a utilização de macros. Estas diretivas são apresentadas na tabela 11. Tabela 11- Diretivas para definição de macros. Uma macro define-se do seguinte modo: nome_macro: MACRO ard1, arg2,..... ENDM ; comentário Outras diretivas A única diretiva listada neste ponto serve para assinalar o fim do módulo e por isso corresponde sempre à última linha de um programa em linguagem assembly. O seu formato é apresentado na tabela 12.
21 9- Reset Tabela 12- Outras diretivas. O reset do microcontrolador efetua-se colocando o pino RST no nível lógico 1 durante pelo menos dois ciclos máquina (24 períodos do oscilador). Na tabela 13 é apresentado o conteúdo dos SFRs depois do reset. Tabela 13- Valor dos SFRs depois do reset. O esquema de montagem recomendado para power-on reset do microcontrolador é apresentado na figura Estrutura e operação das portas E/S Figura 12- Circuito para power-on reset. O 8051 possui 4 portas de entrada/saída, designados P0 a P3, todas elas bidirecionais. As portas são constituídas por uma latch, um driver de saída e um buffer de entrada. As latches correspondem aos SFRs P0 a P3.
22 10.1- Funções alternativas das portas E/S As portas P0, P2 e P3 têm funções específicas associadas à utilização de certas configurações ou blocos de hardware. A porta P0 é utilizada como barramento de endereços/dados nos acessos à memória externa. Esta porta serve para endereçar o byte menos significativo do endereço. A porta P2 é utilizada como barramento de endereços nos acessos à memória externa quando o endereçamento é de 16 bits. Esta porta endereça o byte mais significativo do endereço. A porta P3 é multifuncional estando os seus bits associados a diferentes blocos internos de hardware. As funções alternativas da porta P3 são apresentadas na tabela 14. Tabela 14- Funções alternativas da porta P Estrutura dos pinos E/S Os esquemas elétricos de um bit de cada um das portas são apresentados nas figuras 13, 14, 15 e 16. Figura 13- Esquema elétrico de um bit da porta P0.
23 Figura 14- Esquema elétrico de um bit da porta P1. Figura 15- Esquema elétrico de um bit da porta P2. Figura 16- Esquema elétrico de um bit da porta P3. A estrutura dos pinos E/S não é igual para todos eles. As portas P0 e P2 têm multiplexadores para redirecionar o pino para os barramentos de endereços ou dados, quando são utilizados para acesso à memória externa. As portas P1, P2 e P3 possuem pull-ups internos pelo que dispensam a utilização de pull-ups externos em circuitos de entrada. A porta P0 tem saídas open-drain devido à sua utilização como barramento multiplexado de endereços e dados. A operação das portas como entradas implicam a colocação das latches associadas às portas a 1, quando não estão sendo usadas para funções alternativas, para que os driver de saída sejam desativados. Algumas instruções para leitura das portas atuam sobre a latch, outras sobre o pino. As instruções que atuam sobre a latch, são instruções do tipo readmodify-write e encontram-se listadas na tabela 15.
24 Tabela 15- Instruções do tipo read-modify-write. Durante o acesso externo o conteúdo do registrador associado a P2 não é alterado e o conteúdo do registrador associado a P0 é colocado a 1. Os pinos de P3 ficam controlados pela função alternativa quando o conteúdo do registrador P3 é colocado a Utilização das portas E/S como entradas Podem utilizar-se diversos dispositivos de entrada como sejam interruptores, conversores A/D, teclado, entre outros. De seguida apresentam-se alguns exemplos de interfaces com dispositivos de entrada Interface com um DIP switch Um DIP switch consiste num conjunto de interruptores. Para a interface sugere-se o esquema de montagem da figura 17, que deve ser repetida para cada um dos interruptores utilizados na montagem. Figura 17- Esquema de montagem para interface com DIP switch. A montagem apresentada utiliza-se para portas que não tenham pull-ups internos. Caso a porta utilizado na ligação tenha pull-ups internos não é necessário colocar os resistores no circuito. Supondo que as ligações foram feitas para um DIP switch com 8 interruptores e que se utilizou a porta P2 para a ligação ao microcontrolador, o código para configuração da porta como entrada e para leitura do valor colocado à entrada é o seguinte. MOV P2,#FFH ; configuração da porta P2 como entrada. MOV A,P2 ; leitura da porta P Interface com um teclado Existem diversos tipos de teclados: mecânicos, capacitivos, de efeito de Hall ou de membrana. Cada um destes tipos de teclados apresenta características distintas e requer um modo de processamento e hardware de interfaces diferentes.
25 Consideremos um teclado mecânico. Os teclados mecânicos quando são pressionados apresentam à saída uma série de pulsos e não uma única transição, como se pode ver na figura 18. Este fenômeno designa-se por contact bounce e pode durar de 5ms a 20ms. Figura 18- Ilustração do fenômeno de contact bounce. Para tornar obvio este problema é necessário usar uma das várias técnicas de deboucing, que podem ser implementadas utilizando hardware (circuito set-reset, porta CMOS, circuito RC, entre outros) ou por software. Neste exemplo o deboucing será feito por software. O algoritmo a utilizar num programa para leitura do teclado deverá seguir os passos seguintes: 1- Procura no teclado para determinar se alguma tecla foi pressionada. 2- Debouncing. 3- Consultam-se uma tabela para determinar o código ASCII associado à tecla pressionada (se necessário). A implementação da rotina para procura no teclado da tecla premida depende do modo como é feito a interface com o microcontrolador e do número de teclas disponíveis. O debouncing por software pode ser implementado através do algoritmo seguinte: 1- Espera X ms (X depende do tempo que o contacto leva a estabilizar). 2- Lê de novo o sinal associado à tecla. 3- Se o sinal estiver no nível lógico zero a tecla foi pressionada. Caso contrário a tecla não foi pressionada. Implementação de um salto de acordo com a decisão anterior. A rotina para determinação do código ASCII correspondente à tecla pressionada pode ser implementada colocando em memória de código a tabela com os códigos correspondentes às teclas existentes. Esta tabela pode ser acedida através da instrução MOVC A,@A+DPTR, colocando o índice de acesso, de acordo com a tecla pressionada, em A. O código base para implementação desta rotina é apresentado de seguida. tabela: DB... ; definição da tabela. Os caracteres devem ser ; colocados entre aspas. conv: MOV DPTR,#tabela ;coloca em DPTR o endereço base da tabela. MOVC A,@A+DPTR ;lê código ASCII da tabela. LCALL display ;chamada da rotina que faz o display do caractere. RET Utilização dos portos I/O como saídas Podem utilizar-se como dispositivos de saída LEDs, displays de sete segmentos, LCDs, motores, conversores D/A entre outros. Em seguida são apresentados exemplos de interfaces para alguns dos dispositivos de saída referidos.
26 Interface com LEDs O LED permite de um modo simples a visualização do valor de um dado pino de saída. A interface pode ser implementada recorrendo ao esquema da figura 19. Figura 19- Esquema de montagem para interface com LEDs. As resistências utilizam-se para limitar a corrente nos LEDs. O seu valor deve ser calculado tendo em conta as características dos LEDs utilizados. Não é necessário nenhum tipo de configuração para utilizar uma porta como saída. A ativação dos pinos como saída faz-se escrevendo para a latch associada ao pino. Por exemplo, o código necessário para acender os LEDs L1 e L3 e para apagar o LED L2 do circuito anterior seria: MOV P1,# Interface com um display de sete segmentos Um display de 7 segmentos permite a visualização de dígitos entre 0 e 9. Este circuito tem sete entradas correspondentes aos 7 segmentos que podem ser manipulados de modo a permitir a visualização dos dígitos de acordo com a tabela 16. Tabela 16- Tabela de conversão BCD para 7 segmentos. O esquema para interface entre o microcontrolador e o display é apresentado na figura 20. O buffer é utilizado no caso da porta do microcontrolador não fornecer corrente suficiente para fazer o drive do display.
27 Figura 20- Esquema de montagem para interface com um display de 7 segmentos. Código para escrita do dígito 6 no display: Interface com LCD MOV P1,#5FH O esquema de montagem para a interface depende do tipo de dispositivo LCD a utilizar. Como exemplo apresenta-se na figura 21 uma interface com o LCD LM015 que pode servir de modelo para o desenvolvimento de interfaces para outros LCDs. Figura 21- Esquema de montagem para interface com o LCD LM015. O LCD recebe dois tipos de informação: ordens, para posicionamento do cursor, por exemplo, e dados. A seleção do tipo de informação faz-se através do pino RS do LCD. A latch é utilizada para fazer a desmultiplexagem do barramento do microcontrolador fornecendo o sinal para o pino RS. O decodificador de endereços é utilizado para fazer a seleção do LCD. O LM015 inclui um circuito de driving interno por isso não é necessária a colocação de buffers externos. Algoritmo para escrita no LCD: 1- Inicialização do display. 2- Envio dos códigos ASCII dos caracteres a serem mostrados. O código a desenvolver para implementar cada um dos passos do algoritmo anterior depende do LCD, do seu conjunto de instruções e do modo de operação.
28 11- Acesso à memória externa Num sistema com microcontrolador podem existem dois tipos de memória externa: memória de programa e memória de dados. Nos acessos à memória externa a porta P0 utiliza-se como barramento multiplexado de endereços/dados (byte menos significativo). Durante o acesso externo a latch associada a P0 é escrita com 1s e a porta não pode ser utilizado para outros fins. Quando o endereçamento da memória externa é feito a 16 bits a porta P2 é utilizado como barramento de endereços para endereçar o byte mais significativo. O sinal ALE deve ser usado para capturar o endereço para uma latch, de acordo com o esquema proposto na figura Acesso à memória de programa externa O acesso à memória de programa externa é feito quando o sinal /EA está ativo para os endereços contidos no registrador PC que excedem a capacidade de memória interna do microcontrolador. O comando de leitura é dado pelo sinal /PSEN. O endereçamento é sempre feito a 16 bits, pelo que a porta P2 fica dedicado a esta função. O diagrama temporal típico de um acesso à memória de programa externa é apresentado na figura 22. A.D.- amostragem dados Figura 22- Diagrama temporal do acesso à memória de programa externa Acesso à memória de dados externa O acesso à memória de dados externa pode ser de leitura ou de escrita. Os sinais de comando para essas operações são /RD, para leitura, e /WR, para escrita. O endereçamento pode ser de 16 bits ou 8 bits com i=0 ou i =1). Com endereçamento de 8 bits a porta P2 pode ser usado para fins genéricos, podendo utilizar-se algumas das suas linhas para fazer paging da memória, caso seja necessário. A figura 7 apresenta uma interface para acesso à memória de dados externa. As figuras 23 e 24 apresentam os diagramas temporais típicos para os acessos de leitura e escrita, respectivamente, à memória de dados externa. Figura 23- Diagrama temporal do acesso à memória de dados ciclo leitura.
29 Figura 24- Diagrama temporal do acesso à memória de dados ciclo escrita. 12- Temporização / Contagem Todos os microcontroladores incluem um bloco de hardware que possui capacidades para fazer temporização ou contagem. Este bloco é de extrema importância tendo em consideração as aplicações típicas dos microcontroladores (sistemas de controle de tempo real). O bloco de temporização/contagem permite criar atrasos com determinada duração, impor instantes de amostragem, medir a largura do pulso de um dado sinal, medir a freqüência de um sinal periódico ou contar o número de ocorrências de um dado evento, entre outras. Na função de temporização o registrador de contagem associado ao temporizador é incrementado a um ritmo fixo dependente da freqüência de oscilação aplicada ao o microcontrolador. Na função de contagem o registrador de contagem é incrementado em resposta a uma transição num sinal externo aplicado a um pino específico Temporização/ contagem na família MCS-51 A família MCS-51 possui dois tipos de blocos temporizadores/contadores: os Timers 0 e 1 e o Timer 2. Na função de temporização são contados ciclos de máquina, ou seja, a taxa de contagem é de f OSC /12, sendo f OSC a freqüência de oscilação aplicada ao microcontrolador. Na função de contagem, o incremento é feito na ocorrência de uma transição de 1 para 0 no sinal externo aplicado. O reconhecimento dessa transição demora dois ciclos de máquina, sendo por isso a taxa máxima de contagem igual à fosc/ Timers 0 e 1 Os Timers 0 e 1 são temporizadores/contadores de 16 bits com quatro modos de operação possíveis. Os registradores de contagem a eles associados são TH0, TL0, TH1 e TL1. Associado a cada temporizador/contador existe ainda uma flag de overflow que é ativada por hardware quando se excede a capacidade de contagem do registrador de contagem. Na ocorrência da condição de overflow o registrador de contagem passa a conter zeros e a contagem prossegue a partir desse valor. O registrador TMOD permite fazer a seleção tipo de função e do modo de operação de cada um dos temporizadores/contadores. Este registrador não é endereçável bit a bit. Este registrador é apresentado na figura 25. Figura 25- Registrador TMOD (endereço 89H).
30 O bit GATE permite determinar o modo como o temporizador/contador é iniciado ou parado. Para GATE = 0, a contagem será iniciada quando o bit de controle TRx = 1. Este bit encontra-se no registrador TCON. Para GATE = 1, a contagem é iniciada se o sinal no pino /INTx estiver no nível lógico alto e, simultaneamente, TRx = 1. No primeiro caso diz-se que a ativação é feita por software e no segundo por hardware. O bit C/T permite fazer a seleção do tipo de função do bloco. Para C/T = 0 a função ativa é de temporização, para C/T = 1 a função ativa é de contagem. Os bits M1 e M0 permitem fazer a seleção do modo de operação de acordo com a tabela 17. Tabela 17- Seleção do modo de operação dos Timers 0 e 1. TCON é o registrador de controle dos Timers 0 e 1. Este registrador é endereçável bit a bit. A figura 26 apresenta o registrador TCON. Figura 26- Registrador TCON (endereço 88H). Só os quatro bits mais significativos estão relacionados com os temporizadores/ contadores, por isso só esses bits serão referidos neste momento. O bit TF1 é a flag de overflow do Timer 1. Este bit é colocado a 1 pelo hardware quando ocorre a condição de overflow no registrador de contagem do Timer 1. TR1 é o bit de controle de início/parada de operação do Timer 1. TF0 é a flag de overflow do Timer 0. TR0 é o bit de controle de início/parada de operação do Timer 0. As flags de overflow são colocadas a zero durante o processo de atendimento à interrupção do temporizador/contador. Caso não esteja a ser utilizada a interrupção respectiva é necessário proceder à colocação da flag a 0 por software. No modo de operação 0 o registrador do temporizador/contador é configurado como um registrador de 13 bits, utilizando o registrador THx (byte menos significativo da contagem) e os 5 bits menos significativos de TLx. A flag de overflow é ativada quando a capacidade do registrador de contagem é excedida. A contagem é iniciada quando TRx = 1 e GATE = 0. Se GATE = 1 o controle da contagem do temporizador/contador é feito através da entrada externa /INTx, o que facilita a medição da largura de pulsos. Na figura 27 apresenta-se o diagrama de blocos do Timer 1 no modo 0. Figura 27- Diagrama de blocos da operação do Timer 1 no modo 0.
31 No modo de operação 1 o funcionamento é análogo ao modo 0, mas com o registrador de contagem de 16 bits, utilizando os registradores TLx (byte menos significativo) e THx (byte mais significativo). No modo de operação 2 o registrador de contagem é configurado para 8 bits (TLx) com recarga automática. A condição de overflow ativa a flag respectiva e faz a recarga do valor contido no registrador THx em TLx. O valor de THx permanece inalterado. Na figura 28 é apresentado o diagrama de blocos do Timer 1 no modo 2. Figura 28- Diagrama de blocos do Timer 1 no modo de operação 2. No modo de operação 3, TL0 e TH0 funcionam como temporizadores separados. TL0 utiliza os bits de controle do Timer 0: GATE, C/T, TR0, /INT0 e TF0. TL0 e pode ser utilizado como temporizador ou como contador. TH0 tem a função exclusiva de temporização e utiliza os bits de controle TR1 e TF1. O Timer 1 pode continuar a ser usado como temporizador nos modos 0, 1 e 2, mas não pode provocar interrupções nem atuar sobre a flag TF1, podendo ser utilizado para gerar a taxa de transmissão da porta série ou em qualquer aplicação que não necessite de usar interrupções. Este modo destina-se a aplicações que requerem um temporizador ou contador extra de 8 bits. Na figura 29 apresenta-se o digrama de blocos do Timer 0 no modo 3. Figura 29- Diagrama de blocos da operação do Timer 0 em modo Aplicações dos Timers 0 e 1 Os Timers 0 e 1 utilizam-se para criação de atrasos, imposição de períodos de amostragem, medição da largura de pulsos, medição da freqüência ou período de uma forma de onda periódica, contagem de eventos externos, entre outras. Criação de atrasos De seguida é apresentado o método de cálculo utilizado para determinar o número de contagens a efetuar para gerar um atraso de X segundos. Utilizasse o modo de operação 1 por ser aquele que permite realizar uma contagem maior, mas o método não depende do modo utilizado. Freqüência de contagem = f OSC /12 período = 12/f OSC. Atraso de X segundos X/12/f OSC contagens.
32 Se o valor obtido for menor ou igual que a capacidade de contagem do modo utilizado ( para o modo 1, por exemplo) então o atraso pode ser gerado diretamente pelo Timer 0 ou Timer 1 nesse modo. Caso contrário, ou se utiliza um modo de contagem com maior capacidade (se não se tratar do modo 1), ou o atraso tem que ser gerado com base num submúltiplo do valor desejado, tendo em conta o número de overflows do temporizador necessário ara perfazerem o valor total desejado. O valor inicial a colocar no registrador de contagem do temporizador desejado é igual à capacidade máxima do registrador menos de contagens necessárias para gerar o atraso. De seguida são apresentados alguns exemplos: 1- Considere que dispõe de um 80C51 cujo cristal oscilador é de 12 MHz. Escreva uma rotina para gerar um atraso de 20ms. Período de contagem = 12/12MHz = 1us 20ms 20ms/1us = contagens < utilização direta de um dos temporizadores em modo 1. Escolhe-se o Timer 1. Valor para o registrador de contagem do Timer 1 = = = B1DFH. Código da rotina que provoca o atraso: atr20ms: espera: MOV TMOD,# B ; Timer 1 em modo 1. CLR TF1 ; limpa a flag de overflow. MOV TH1, #B1H ; coloca byte superior em TH1. MOV TL1, #DFH ; coloca byte inferior em TL1. SETB TR1 ; inicia operação do Timer 1. JNB TF1, espera ; espera até TF1 = 1. RET Para criar atrasos superiores a 65,5ms é necessário programar o Timer 0 ou 1 para gerar um atraso que seja submúltiplo do valor desejado e contar o número de overflows do temporizador até se obter o valor desejado.. 2- Considere o mesmo microcontrolador do exemplo anterior utilizado o mesmo cristal. Escreva uma rotina que gere um atraso de 1s. Como o atraso pedido é superior a 65.5ms a implementação não é direta. Algoritmo: 1- Escrever um ciclo que gere um atraso de 50ms. 2- Repetir o ciclo 20 vezes. Código: ct_ciclo SET R2 ; R2 utilizado como contador de ciclos. atr1s: MOV ct_ciclo, #20 ; definição do número de iterações. CLR ET1 ; disable interrupção Timer1. CLR TF1 ; limpar TF1. MOV TMOD, #10H ; programação do Timer 1 no modo1. MOV TH1, #3CH ; inicialização do registrador de contagem MOV TL1, #AFH ; com o valor
33 rep: espera: SET TR1 CLR TF1 MOV TH1, #3CH MOV TL1, #AFH JNB TF1, espera DJNZ ct_ciclo, rep RET ; início contagem. ; limpeza da flag TF1. ; repete inicialização ; registrador de contagem ; cada vez que há overflow. ; espera até TF1=1. ; espera que o ciclo se realize 20 vezes. Medição da largura de impulsos Nesta aplicação é necessário ligar ao pino /INT1 ou /INT0 o sinal que se pretende medir. Programa-se o bloco com a função de temporização com o bit GATE = 1 para que a contagem seja permitida apenas enquanto o sinal externo se encontra no nível lógico alto. A contagem inicia-se quando o sinal passa ao nível lógico alto e termina quando o nível lógico se alterar. No caso do nível lógico do pulso ser diferente é necessário colocar um inversor externo entre o sinal e o pino do microcontrolador. Utilizando o modo de operação 1, se a duração do pulso for menor ou igual a o seu valor é obtido diretamente (em ciclos máquina) nos registradores de contagem. Se a duração do pulso for maior que tem que se considerar o número de overflows ocorridos para obter o valor final. A conversão do valor em ciclos máquina para segundos faz-se recorrendo a alguns cálculos simples. O método descrito para determinação da largura de um impulso recorre à utilização de interrupções pelo que será apenas apresentado o algoritmo do procedimento a utilizar. Serão utilizadas duas variáveis, uma para contar o número de ocorrências da condição de overflow (ct_count) e outra para indicar o fim do pulso (f_imp). Estas variáveis são atualizadas dentro das rotinas de serviço à interrupção. No exemplo utiliza-se o Timer 1. Algoritmo: 1- Configurar o Timer 1 para operar no modo 1 e selecionar função de temporização. Colocar TF1 = 0 e inicializar os registradores de contagem do Timer 1 a zero. 2- Inicializar ct_count a 0 e f_imp a Selecionar a interrupção por flanco descendente do pino /INT1. 4- Ativar a interrupção por overflow do Timer 0. Ativar a interrupção externa /INT1. 5- Iniciar operação do Timer Escrever uma rotina de serviço à interrupção por overflow do Timer 1 que incremente ct_count. 7- Escrever uma rotina de serviço de interrupção /INT1 que decremente f_imp. 8- Espera até que f_imp seja igual a 0. A largura do pulso é dada por larg_imp = (cont_ovf x cont_timer) (em ciclos máquina) em que larg_imp representa a largura do pulso, cont_ovf representa a contagem do número de overflows do Timer e cont_timer representa o valor contido nos registradores de contagem do temporizador. Medição da freqüência de um sinal periódico A freqüência corresponde, por definição, ao número de ciclos por segundo de um dado sinal. Para medir freqüência utiliza-se um dos temporizadores/contadores na função de contador, inicializando-se os registradores de contagem a 0. Utiliza se o sinal exterior como relógio do contador. O outro temporizador/contador gera um atraso de 1s. A contagem obtida ao fim de 1s corresponde à freqüência do sinal (em Hz). Em seguida é apresentado um exemplo.
34 3- Utilize os Timers 0 e 1 para medir a freqüência de um sinal desconhecido. Suponha que a freqüência é inferior a Hz. O Timer 0 será utilizado para fazer a contagem de ciclos e o Timer 1 para definir o intervalo de 1s. Deve proceder-se à ligação do sinal externo ao pino T0. Algoritmo: 1- Configurar Timer 0 para operar como contador em modo 1 sem sinal externo de gating. 2- Configurar Timer 1 para operar como temporizador em modo 1 sem sinal externo de gating. 3- Inicializar registradores de contagem de Timer 0 a Utilizar Timer 1 para criar um a atraso de 1s. Colocar o valor 3CAFH nos registradores de contagem do Timer 1 para criar um atraso de 50ms. 5- Esperar 1s. Parar a contagem do Timer 1. O valor contido nos registradores de contagem do Timer 1 corresponde à freqüência do sinal. Código: t1_ovc SET R0 freq_1 SET R1 freq_h SET R2 ; registrador para guardar a contagem de overflow. ; byte inferior da freqüência. ; byte superior da freqüência. rep: esp: ORG 0000H ; início do programa principal. SETB P3.4 ; ativação da função T0. MOV TMOD,#15H ; configura Timers 0 e 1. MOV t1_ovc,#20 ; inicializa a variável t1_ovc a 20. MOV TH0,#0 ; inicializa TH0 = 0. MOV TL0,#0 ; inicializa TH0 = 0 MOV TH1,#3CH ; valores iniciais de contagem para geração de um MOV TL1,#AFH ; atraso de 50ms. CLR ET1 ; desativa a interrupção do Timer 1. SETB TR1 ; inicia operação de Timer 1. SETB TR0 ; inicia operação de Timer 0. CLR TF1 ; TF1 = 0. MOV TH1,#3CH MOV TL1,#AFH JNB TF1,esp ; espera ativação da flag TF1. DJNZ t1_ovc,rep ; espera até que o atraso de 50ms seja repetido 20 MOV freq_l, TL0 MOV freq_h, TH0 END ; vezes. ; guarda byte inferior do valor obtido. ; guarda byte superior do valor obtido Timer 2 O Timer 2 é um temporizador/contador de 16 bits, com aplicações diferentes das dos Timers 0 e 1 e que, para além destes, integra alguns dos microcontroladores da família MCS-51 (8052, entre outros). Este temporizador/contador pode ser utilizado para temporização ou contagem e possui três modos de operação distintos. Os registradores de contagem designam se TH2 e TL2 e existem ainda dois registradores adicionais RCAP2L e RCAP2H, designados registradores de captura. A seleção da função e do modo de operação deste temporizador faz-se nos registradores T2CON e T2MOD. T2CON é endereçável bit a bit. T2MOD não é endereçável bit a bit. Os registradores T2CON e T2MOD são apresentados nas figuras 30 e 31, respectivamente.
35 Figura 30- Registrador T2CON (endereço C8H). TF2 é a flag de overflow do Timer 2. Esta flag é ativada na ocorrência da condição de overflow nos registradores de contagem do Timer 2. TF2 tem que ser desativada por software. Se RCLK = 1 ou TCLK = 1, a flag nunca é ativada. EXF2 é a flag externa do Timer 2. EXF2 é ativada quando é feita uma captura ou recarga devida à ocorrência de uma transição negativa no sinal aplicado no pino T2EX, se EXEN2 = 1. RCLK é a flag do relógio de recepção, quando igual a 1 faz com que a porta série utilize a condição de overflow do Timer 2 para relógio de recepção, quando programada nos modos de operação 1 e 3. Se RCLK = 0 o relógio de recepção da porta série é dado pelo overflow do Timer 1. TCLK é a flag do relógio de transmissão. Esta flag tem significado semelhante à RCLK referindo-se à transmissão. EXEN2 é a flag de ativação externa do Timer 2. Quando igual a 1 permite a captura ou recarga do valor dos registradores de contagem na ocorrência de uma transição negativa no pino T2EX (se o Timer 2 não estiver ser utilizado como relógio da porta série). EXEN = 0 faz com que as transições em T2EX sejam ignoradas. TR2 é o bit de controle do arranque/parada do Timer 2. TR2 = 1 provoca o arranque enquanto que TR2 = 0 faz a parada. C/T2 é o bit de seleção da função do Timer 2. CP/RL2 é a flag de captura/recarga. Quando a 1 provoca a captura dos valores contidos nos registradores de contagem para os registradores de captura na ocorrência de uma transição negativa no pino T2EX se EXEN2 = 1. Se CP/RL2 = 0, é feita a recarga do valor contido nos registradores de captura para os registradores de contagem quando ocorre a condição de overflow no temporizador ou quando ocorre uma transição negativa no pino T2EX se EXEN2 = 1. Quando RCLK = 1 ou TCLK = 1 este bit é ignorado e é forçada a recarga quando ocorre overflow. Figura 31- Registrador T2MOD (endereço C9H). T2OE é o bit de output enable do Timer 2 e DCEN o bit de ativação da contagem decrescente. Os modos de operação do Timer 2 são definidos através da programação dos bits referidos na tabela 18. Tabela 18- Modos de operação do Timer 2. No modo de auto-recarga, o Timer 2 pode fazer contagens crescentes ou decrescentes. Se DCEN = 0, a contagem é crescente e se EXEN2 = 0, a flag TF2 é ativada por overflow do registrador de contagem. A condição de overflow provoca ainda a carga do valor de 16 bits contido em RCAP2H e RCAP2L nos registradores de contagem TH2 e TL2. Se EXEN2 = 1, a carga dos valores contidos em RCAP2H e RCAP2L é feita na ocorrência da condição de overflow ou quando ocorre uma transição de 1 para 0 na entrada externa T2EX. Esta transição ativa a flag EXF2.
36 A ativação de TF2 e/ ou EXF2 pode ser usada para gerar interrupções, se necessário. A figura 32 apresenta o diagrama de blocos do Timer 2 em modo de auto-recarga para DCEN = 0. Figura 32- Diagrama de blocos do Timer 2 no modo de auto-recarga para DCEN = 0. No modo de auto-recarga, para DEN = 1, a contagem pode ser crescente ou decrescente. Se o sinal aplicado no pino T2EX estiver no nível lógico baixo, a contagem é crescente e a flag TF2 é ativada quando ocorre overflow. Esta condição provoca ainda a carga dos valores contidos em RCAP2H e RCAP2L nos registradores TH2 e TL2, respectivamente. Se o sinal aplicado no pino T2EX estiver no nível lógico alto, a contagem é decrescente. A condição de underflow ocorre quando o valor nos registradores de contagem igualar o valor contido nos registradores RCAP2H e RCAP2L. Esta condição ativa a flag de TF2 e provoca a carga do valor 0FFFFH nos registradores de contagem TH2 e TL2. A figura 33 apresenta o diagrama de blocos do Timer 2 no modo de captura para DCEN = 1. Figura 33- Diagrama de blocos do Timer 2 em modo de auto recarga para DCEN = 1. No modo de captura, se EXEN2 = 0, o Timer 2 comporta-se como um temporizador de 16 bits com ativação da flag TF2 na ocorrência da condição de overflow. Se EXEN2 = 0, o Timer 2 comporta-se como descrito na situação anterior. A ocorrência uma transição do nível lógico alto para o nível lógico baixo na entrada externa T2EX provoca a captura do valor contido nos registradores de contagem TH2 e TL2 para os registradores de captura RCAP2H e RCAP2L, respectivamente. A transição referida ativa a flag T2EX do registrador T2CON. A ativação das flags TF2 e EXF2 pode ser utilizada para gerar pedidos de interrupção. A figura 34 apresenta o diagrama de blocos do Timer 2 no modo de captura.
37 Figura 34- Diagrama de blocos do Timer 2 em modo de captura. No modo para geração de taxas de transmissão a ativação de RCLK ou TCLK força a porta série a utilizar a flag de overflow do Timer 2 para relógio de recepção ou transmissão, respectivamente, quando programada nos modos 1 ou 3. Nos casos dos bits RCLK e/ou TCLK estarem à zero será o overflow do Timer 1 a determinar a taxa da recepção e/ou transmissão da porta série. A figura 35 apresenta o diagrama de blocos do Timer 2 no modo de geração de taxas de transmissão ou recepção. Figura 35- Digrama de blocos do Timer 2 em modo de geração de taxas de transmissão. Saída de relógio programável O Timer 2 pode ser utilizado para gerar um sinal de relógio com duty-cycle de 50% com freqüência compreendida entre 61HZ e 4MHz (para uma freqüência de operação de 16MHz). Esta função corresponde à função alternativa do pino P1.0 (8052). A programação do Timer 2 como gerador de relógio faz-se colocando C/T2 = 0 e T2OE = 1. O início da operação do temporizador faz-se através de TR2. A freqüência do sinal gerado depende da freqüência de oscilação do microcontrolador e do valor de reload dos registradores de captura RCAP2H e RCAP2L, sendo a relação entre ambos dados por: F CLOCK = f OSC /[4*(65536 RCAP2H,RCAP2L)] em que f CLOCK representa a freqüência do sinal de relógio e f OSC representa a freqüência do oscilador do microcontrolador. Neste modo não é gerada nenhuma interrupção. É possível utilizar simultaneamente o Timer 2 para gerador de taxa
38 de transmissão e gerador de relógio, mas a freqüência dos dois tipos de operação não é independente Aplicações do Timer 2 O Timer 2 pode ser utilizado em todas as aplicações descritas para os Timers 0 e 1 e ainda para medição do período de um sinal desconhecido. O modo de captura pode utilizar-se para recolha do tempo de chegada de determinado evento, geração de interrupções. Medição do período de um sinal desconhecido A medição é feita capturando dois flancos descendentes consecutivos do sinal, como se pode ver na figura 36. Figura 36- Medição do período de um sinal. A diferença entre os dois valores capturados determina o período em ciclos máquina. Para sinais muito lentos, o overflow do Timer 2 pode ocorrer várias vezes antes de se verificar a segunda transição sendo necessário contar o número de ocorrências da condição de overflow para determinar corretamente o período do sinal. O cálculo do período faz-se utilizando as expressões seguintes: Se flanco2 flanco1 período = n OVF * dif Se flanco2 < flanco1 (n OVF -1) * dif em que flanco1 representa o tempo capturado quando ocorreu a primeiro transição, flanco 2 representa o tempo capturado quando ocorreu a segunda transição, n OVF representa o número de ocorrências de overflow entre a detecção dos dois flancos e dif= é igual a flanco 2 flanco 1. O Timer 2 deve ser programado do seguinte modo: 1- Limpar TF2 e EXF2 (registrador T2CON). 2- Limpar RCLK e TCLK. 3- Colocar EXEN2 a 1 para permitir a captura dos valores captura. 4- Limpar C/T2 para escolher a função de temporizador. 5- Colocar CP/RL2 a 1 para permitir a captura no flanco descendente da transição do sinal no pino T2EX. 6- Colocar TR2 a 1 para iniciar a operação do Timer 2. O programa principal deve esperar pela ocorrência da primeira transição e colocar o valor dos registradores de contagem a 0. Depois deve esperar pela ocorrência da segunda transição e de seguida efetuar os cálculos descritos. Paralelamente deve implementar-se uma rotina de serviço à interrupção por overflow do Timer 2 que incremente a variável n OVF. Contagem de eventos durante um dado período de tempo Se o evento se manifestar através da alteração do nível lógico de um dado sinal pode-se utilizar o algoritmo seguinte para proceder à contagem de evento, depois de se ter procedido à ligação do sinal ao pino T2EX.
39 1- Programar o Timer 2 para o modo de captura. 2- Programar outro Timer para gerar o intervalo de medição. 3- Contar o número de vezes que a flag TF2 é ativada durante o intervalo referido e limpar a flag de cada vez que ela é ativada. Geração de sinal de relógio Em seguida apresenta-se um exemplo de aplicação do Timer 2 para geração de um sinal de relógio. 1- Utilize o Timer 2 para geração de um sinal de relógio com duty-cycle de 50% com freqüência igual a 4KHz. Assuma que f OSC = 12KHz. Utilizando a equação dada calcula-se o valor a colocar nos registradores RCAP2H e RCAP2L. Para f = 4KHz o valor obtido para os registradores de captura é FD12H. 13- Porta série MOV T2CON,#04H ; seleciona o modo e ativa o Timer 2. MOV T2MOD,#02H ; ativa a saída do Timer 2. MOV RCAP2H,#FDH MOV RCAP2L,#12H SETB P1.0 ; ativa função alternativa de P1.0. A família MCS-51 dispõe de um bloco de hardware que implementa uma ligação série com o exterior. Esse bloco de hardware designa-se UART (Universal Asynchronous Receiver-Transmitter) e faz a transferência de um byte de informação de cada vez. A trama enviada é constituída por um start bit, os bits de dados e um stop bit. A ligação série fornecida é full duplex, ou seja, permite transmissão e recepção simultâneas. A UART da família MCS-51 permite ainda que seja iniciada a recepção de um segundo byte antes de o byte recebido anteriormente ter sido lido. A interface com este bloco de hardware faz-se através do um único registrador designado SBUF que, dependendo do contexto de utilização permite o acesso ao registrador de transmissão ou ao registrador de recepção da porta série. O acesso físico aos dois registradores é feito pelo hardware dependendo do tipo de operação executada sobre SBUF. Se a operação for de leitura é acessado o registrador de recepção, caso a operação seja de escrita é acessado o registrador de transmissão. SCON é o registrador de programação e estado Sereia da porta série. Este registrador é endereçável bit a bit. A sua estrutura é apresentada na figura 37. Figura 37- Registrador SCON (endereço 98H). Os bits SM0 e SM1 servem para fazer a seleção do modo de operação da porta série de acordo com a tabela 19. SM0 SM1 Modo Descrição Taxa de Transmissão Registrador de deslocamento F OSC / UART 8 bits Variável UART 9 bits F OSC /64 ou F OSC / UART 9 bits Variável Tabela 19- Modos de operação da porta série.
40 O bit SM2 permite a comunicação multiprocessador nos modos 2 e 3. Nos modos 2 e 3 se SM2 = 1, RI não é ativado se o nono bit de dados recebido for igual a 0. No modo 1 se SM2 = 1, RI só é ativado se o stop bit recebido for válido. No modo 0 SM2 deve ser igual a 0. O bit REN permite ativar a recepção de bytes. REN = 1 ativa recepção. Se REN = 0 a recepção de informação não é permitida. TB8 é o nono bit de dados a ser transmitido nos modos 2 e 3. RB8 é o nono bit de dados recebido nos modos 2 e 3. No modo 1, se SM2 = 0, RB8 representa o stop bit recebido. No modo 0 não é utilizado. TI é a flag de transmissão. Esta flag é colocada a um no início do envio do stop bit indicando que a UART está pronta para uma nova transmissão. RI é a flag de recepção. Esta flag é ativada depois de a informação recebida ter sido colocada no registrador de recepção, indicando que a informação está disponível para leitura Modos de operação Como referido na tabela 19, existem 4 modos de operação possíveis para a porta série. Em todos os modos a transmissão é iniciada por qualquer instrução que utilize o registrador SBUF como destino. A recepção é iniciada pela condição RI = 0 e REN = 1, para o modo 0 e pela chegada de um start bit se REN = 1, para os outros modos de operação Modo de operação 0 Neste modo de operação a informação entra e sai através do pino RXD. O pino TXD apresenta o relógio de deslocamento. São transmitidos/recebidos 8 bits, sendo o bit menos significativo o primeiro a ser enviado (ou recebido). A taxa de transmissão é fixa e igual a (1/12) * f OSC. Sendo f OSC a freqüência do oscilador do microcontrolador Modo de operação 1 Neste modo são transmitidos, através do pino TXD, ou recebidos, através do pino RXD, 10 bits: 1 start bit (0), 8 bits de dados, 1 stop bit (1). Na recepção o stop bit é colocado no bit RB8 do registrador SCON. A taxa de transmissão é variável e determinada pela taxa de overflow do Timer 1, do Timer 2, ou de ambos Modo de operação 2 No modo 2 a informação é transmitida através do pino TXD e recebida através do pino RXD. A trama é composta por 11 bits: 1 start bit (0), 8 bits de dados, 1 nono bit de dados programável (TB8) e 1 stop bit (1). O bit TB8 pode ser colocado a 0 ou a 1, podendo ser-lhe atribuído o valor do bit de paridade P do registrador PSW. Na recepção o nono bit de dados recebido é colocado em RB8 e o stop bit é ignorado. Neste modo a taxa de transmissão é fixa podendo ser igual a 1/32 * f OSC ou a 1/64 * f OSC Modo de operação 3 Este modo é essencialmente igual ao modo 2 podendo a taxa de transmissão ser programável. São transmitidos, através do pino TXD, ou recebidos, através do pino RXD 11 bits: 1 start bit (0), 8 bits de dados, 1 nono bit de dados programável e 1 stop bit (1). A taxa de transmissão é controlada pela taxa de overflow do Timer 1 ou do Timer 2 podendo ser projetada para o valor desejado.
41 13.2- Taxas de transmissão No modo o a taxa de transmissão é fixa e igual à f OSC /12. No modo 2 a taxa de transmissão depende do valor do bit SMOD do registrador PCON. O valor da taxa de transmissão é dado pela expressão seguinte: Taxa de transmissão no modo 2 = 2 SMOD * (f OSC /64). Nos modos 1 e 3 a taxa de transmissão é determinada pela taxa de overflow do Timer 1 (ou do Timer 2) e pelo valor do bit SMOD. A taxa de transmissão é dada pela expressão seguinte: Taxa de transmissão nos modos 1 e 3 = 2 SMOD * (taxa de overflow do Timer 1) Utilização do Timer 1 para gerar a taxa de transmissão Na maioria das aplicações para geração de taxa de transmissão é utilizado o modo de auto-recarga para o temporizador. Caso se utilize esse modo à expressão que permite a determinação do valor a colocar no registrador de contagem do Timer 1 é a seguinte: Taxa de transmissão dos modos 1 e 3 = (2 SMOD /32) * (f OSC /(12*(256-TH1)) Nesta aplicação a interrupção do Timer 1 deve ser desligada. No caso de se pretenderem taxas de transmissão muito baixas pode-se ativar a interrupção do Timer 1 e configurá-lo no modo 1, usando a interrupção para fazer a recarga do valor inicial de contagem por software. A tabela 20 apresenta os valores de programação do Timer 1 para o conjunto de taxas de transmissão mais utilizadas em conjunto com a interface RS-232. Tabela 20- Valores comuns de taxas de transmissão geradas pelo Timer Utilização do Timer 2 para gerar a taxa de transmissão A programação do Timer 2 deve ser feita colocando os bits TCLK e RCLK do registrador T2CON a 1. A taxa de transmissão pode ser diferente da taxa de recepção. O Timer 2 pode ser configurado como contador ou temporizador sendo normalmente configurado como temporizador. Nesta aplicação a flag TF2 não é ativada e o pino T2EX não tem ligação com o Timer 2 podendo ser usado para gerar uma interrupção externa. A programação dos registradores de contagem do Timer 2 faz-se recorrendo à seguinte expressão:
42 Taxa de transmissão dos modos 1 e 3 = f OSC /[32 *( (RCAP2H,RCAP2L)] em que (RCAP2H,RCAP2L) é o valor contido nos registradores RACP2H e RCAP2L (total de 16 bits). A tabela 21 apresenta os valores de programação do Timer 2 para o conjunto de taxas de transmissão mais utilizadas em conjunto com a interface RS-232. Tabela 21- Valores comuns de taxas de transmissão geradas pelo Timer 2. Na escolha do Timer 1 ou 2 para a geração de taxas de transmissão é necessário ter em conta a precisão de cada um deles. Por exemplo, para gerar 9,6 KHz o Timer 1 é mais preciso que o Timer Comunicações multiprocessador Os modos de operação 2 e 3 da porta série destinam-se a comunicações multiprocessador. O nono bit de dados recebido é colocado em RB8 e a porta pode ser programada de modo que se RB8 = 1 seja gerada uma interrupção. A programação faz-se colocando o bit SM2 do registrador SCON a 1. O bit SM2 não afeta o modo 0 e no modo 1 pode ser utilizado para verificar a validade do stop bit Aplicações da porta série De seguida serão apresentadas algumas aplicações para cada modo da porta série Aplicações do modo 0 O modo 0 utiliza-se para a comunicação com dispositivos periféricos que tenham interfaces série Aplicações do modo 1 Este modo utiliza-se para comunicação com a interface RS-232. Como as polaridades elétricas e os níveis de tensão diferem da porta série para a interface RS-232 somos necessários um circuito que proceda à conversão dos níveis de tensão. Esse circuito, por exemplo, a MAX232 da MAXIM, deve ser colocada entre a porta série do microcontrolador e a ligação RS-232 do PC. Em seguida apresentam-se alguns exemplos de programação da porta série para operar neste modo: 1 Escreva uma rotina que inicializa a porta série para operar com os parâmetros seguintes: taxa de transmissão de 9600 bits/s, 1 start bit, oito bits de dados e 1 stop bit, permissão para receber e transmitir e interrupções inativas. Considere que a freqüência do oscilador do microcontrolador é de MHz.
43 Inic: Colégio Técnico de Campinas Cotuca Disciplina - TDM II CLR IE.4 ; desativa a interrupção da porta série. ANL TMOD,#0FH ; programação do Timer 1 para gerar a ORL TMOD,#20H ; taxa de transmissão desejada. MOV TL1,#FDH ; valor de recarga. MOV TH1,#FDH; ANL PCON,#7FH ; SMOD = 0; MOV SCON,#50H ; inicialização da porta série. RET 2 - Escreva uma rotina que leia um caractere da porta série utilizando o método de polling. Assuma que a porta foi inicializada como indicado no exemplo anterior. get_char: JNB RI, get_char ; verificação (poll) da flag RI. MOV A,SBUF ; leitura do caractere. CLR RI RET 3 Escrever uma rotina que envie pela porta série o caractere contido no acumulador. Assuma que a porta foi inicializada como indicado no exemplo anterior. put_char: esp: MOV SBUF,A JNB TI,esp CLR TI RET ;envio do caractere. ; verificação da flag TI. 4 Escrever uma rotina que envie uma string terminada com um caractere nulo pela porta série. O endereço de início da string é fornecido pelo registrador DTPR. put_string: exit: MOVX A,@DPTR JZ exit LCALL put_char INC DPTR AJMP put_string RET ; leitura do caractere. ; teste do fim da string. ; envia caractere. ; próximo caractere. 5 Escrever uma sub-rotina que receba uma string através da porta série. O endereço da posição de memória onde a string deve ser armazenada é dado pelo registrador DPTR. A string é terminada pelo caractere carriage return (CR). get_string: go: CR EQU 0DH LCALL get_char CJNE A,#CR,go MOV A,#0 RET INC DPTR AJMP get_string ; código ASCII do caractere CR. ; recebe caractere ; teste do fim da string? ; termina a string com ; o caractere null. ;guarda o caractere recebido.
44 O método de polling só deve ser usado quando o microcontrolador não tem outras tarefas para executar. A outra abordagem possível utiliza interrupções e será analisada posteriormente Aplicação dos modos 2 e 3 Estes modos utilizam-se para comunicação entre vários microcontroladores. Nestes sistemas um dos microcontroladores funciona como unidade de controle e é designado master, os restantes designam-se slaves. O master comanda o funcionamento de todo o sistema. Cada slave possui um endereço único normalmente de 8 bits. O endereçamento e a informação são enviados pelo mesmo canal de comunicação e torna-se necessário distinguir cada um dos casos. A distinção fazse recorrendo ao nono bit de dados da trama enviada para a porta série. Se esse bit for igual a 1 o caractere deve ser considerado como um endereço, se for igual a 0 o caractere deve ser considerado como informação. A comunicação entre processadores deve seguir um protocolo bem definido. Consideremos um sistema multiprocessador em que o master pretende enviar informação para um dos vários processadores slave. O algoritmo a seguir segue os seguintes passos: Para o master: 1- Primeiro é enviado um byte de endereçamento que identifica um dos vários slaves. 2- De seguida é enviada a informação. Para os slaves: 1- Quando é enviado um byte de endereçamento gera-se uma interrupção em cada um dos slaves que analisam o byte de endereço. 2- Se o endereço recebido corresponde ao endereço do slave, esse slave coloca SM2 a 0 e prepara-se para receber a informação que se segue. 3- Os slaves não endereçados não alteram o valor de SM2 e ignoram os dados seguintes. 14- Interrupções Entende-se por interrupções acontecimentos que necessitam que o processador interrompa o fluxo normal do programa e execute determinado serviço em resposta ao acontecimento. As interrupções podem classificar-se quanto à sua origem: internas ou externas, e quanto à possibilidade de poderem ser ignoradas: mascaráveis ou não mascaráveis. As interrupções internas são geradas dentro do circuito integrado, por exemplo, uma interrupção por ocorrência de overflow num temporizador. Por contraponto as interrupções externas são geradas fora do circuito integrado e sinalizadas através de um sinal ligado a um pino específico do microcontrolador. As interrupções dizem-se mascaráveis quando podem ser ignoradas pelo processador. Neste caso é possível fazer a programação, através do valor de bits específicos contidos num registrador próprio, de quais as interrupções que devem (ou não) ser mascaradas. As interrupções que não podem ser ignoradas pelo processador são designadas interrupções não mascaráveis. As interrupções utilizam-se para coordenação de atividades E/S e em aplicações críticas em termos temporais. O serviço à interrupção é prestado através da execução de uma rotina específica designada rotina de serviço da interrupção. Essa rotina deve ser colocada num endereço específico designado vetor de interrupção. A cada interrupção pode ser atribuído um nível de prioridade que, no caso de ocorrer mais do que uma interrupção simultaneamente serve para decidir qual das interrupções é atendido primeiro. Normalmente a prioridades mais elevadas corresponde um serviço mais rápido.
45 A programação de um sistema utilizando interrupções implica, além da escrita do programa principal, a escrita da rotina de serviço à interrupção, a inicialização da tabela de vetores de interrupção, que no caso dos vetores serem fixos não é necessária e a ativação do serviço da interrupção através do bit de enable correspondente no registrador próprio. É importante referir que o serviço de interrupções implica algum overhead devido ao processo de comutação entre a operação normal e o serviço da interrupção Interrupções do MCS51 O microcontrolador 8051 possui cinco fontes de interrupção distintas: duas interrupções externas, associadas aos sinais dos pinos INT0 e INT1, duas interrupções por overflow dos temporizadores/contadores, associadas às flags TF0 e TF1 e uma interrupção associada à porta série. As fontes de interrupção referidas são apresentadas na figura 38. Figura 38- Fontes de interrupção do Na família MCS-51 todas as interrupções são mascaráveis. As interrupções podem ser individualmente ativadas/desativadas recorrendo à programação do registrador IE. Este registrador é endereçável bit a bit. Qualquer um dos bits do registrador IE, quando igual a 1, implica a ativação da interrupção respectiva. Se o bit estiver a 0 a interrupção associada está desativada. Figura 39- Registrador IE (endereço A8H). O bit EA desativa todas as interrupções. Se este bit estiver ativo, a ativação de cada uma das interrupções depende do seu bit de ativação individual. O bit EA é utiliza-se para fazer a desativação global das interrupções. O bit ES controla a interrupção da porta série. Os bits ET1 e ET0 controlam as interrupções do Timer 1 e 0, respectivamente e os bits EX1 e EX0 controlam as interrupções externas 1 e 0, respectivamente. A família MCS-51 permite definir dois níveis de prioridade, que podem ser atribuídos individualmente a cada uma das interrupções através do registrador IP. Este registrador é endereçável bit a bit. A colocação de um destes bits a 1 implica a atribuição do nível de prioridade alta, enquanto que a sua colocação a 0 implica a atribuição do nível de prioridade baixo. Figura 40- Registrador IP (endereço B8H).
46 PS é o bit de prioridade da interrupção da porta série. PT1 e PT0 são os bits de prioridade das interrupções dos Timers 1 e 0, respectivamente. PX1 e PX0 são os bits de prioridade das interrupções externas 1 e 0. A estrutura de interrupções da família MCS-51 permite que todas as flags que geram interrupções possam ser colocadas a 1 ou a 0 por software, gerando a interrupção respectiva ou cancelando-a Interrupções externas As interrupções externas associadas aos pinos /INT0 e /INT1 podem ser sensíveis ao nível do sinal (nível baixo), ou à sua transição (flanco descendente). A programação do tipo de acontecimento que provoca a interrupção é feita no registrador TCON cuja composição se repete na figura 41. Figura 41- Registrador TCON. Apenas serão referidos neste capítulo os bits associados às interrupções. Os bits associados ao controle dos Timers 0 e 1 já foram referidos anteriormente. TF1 e TF0 são as flags de overflow do Timer 1 e 0, respectivamente. Estas flags são ativadas por hardware e são também desativadas por hardware quando o processador salta para a rotina de serviço de interrupção respectiva. No caso de não estarem sendo utilizada a interrupção as flags não são desativadas automaticamente sendo necessário fazê-lo por software. IE1 e IE0 são as flags de flanco das interrupções externas 1 e 0, respectivamente. Estas flags são ativadas por hardware quando é detectado um flanco descendente no sinal correspondente. IE1 e IE0 são desativadas quando a interrupção respectiva é processada. IT1 e IT0 são os bits de controle do tipo das interrupções externas 1 e 0. Estes bits são programados por software para especificar que a interrupção externa é ativa no flanco negativo (1) ou no nível baixo do sinal (0). No caso da interrupção ser sensível à ocorrência de um flanco, a flag associada é desativado por hardware quando a interrupção é processada. Caso a interrupção seja sensível ao nível do sinal é a fonte de sinal que controla a flag. Como os pinos associados às interrupções externas são amostrados uma vez em cada ciclo máquina, uma entrada baixa ou alta deve manter-se pelo menos por 12 períodos do oscilador para garantir que é detectada. Se a interrupção for ativada por um flanco, o sinal externo tem manter o nível alto durante pelo menos um ciclo máquina e depois manter o nível baixo pelo menos durante um ciclo máquina para garantir que a transição é detectada. No caso de a interrupção ser ativado por nível, o sinal externo tem que manter o nível baixo até que o pedido de interrupção seja gerado. Depois esse sinal tem que ser desativado antes que a rotina de serviço à interrupção termine para que não seja gerado um novo pedido de interrupção Interrupções associadas aos Timers 0 e 1 As interrupções associadas aos Timers 0 e 1 são geradas pelas flags TF0 e TF1 que são ativadas quando ocorre overflow nos Timers 0 e 1, respectivamente. A flag que gerou a interrupção é desativada por hardware quando a interrupção é servida Interrupção da porta série Esta interrupção resulta do OR lógico das flags RI e TI, o que significa que a rotina de serviço à interrupção tem que determinar qual das flags deu origem à
47 interrupção. Nenhuma das flags é desativada por hardware quando a interrupção é servida e por isso é necessário proceder à sua desativação por software dentro da rotina de serviço à interrupção Estrutura de prioridades Como já foi referido existem dois níveis de prioridade: nível alto e nível baixo. Uma interrupção de baixa prioridade só pode ser interrompida por uma interrupção de alta prioridade. Uma interrupção de alta prioridade não pode ser interrompida por nenhuma outra. Se dois pedidos de interrupção forem recebidos simultaneamente, o pedido de prioridade mais elevada é servido primeiro. Se forem recebidos simultaneamente pedidos de interrupção com o mesmo nível de prioridade, a interrupção servida depende da seqüência de polling interna prédefinida, de acordo com a tabela Tratamento das interrupções Tabela 22- Seqüência de polling. As flags de interrupção são amostradas no estado S5P2 de cada ciclo máquina. O processo de polling é executado no ciclo máquina seguinte e o sistema de interrupções gera uma instrução de salto para a rotina de serviço à interrupção apropriada. O pedido de interrupção é servido através da execução da instrução de salto, gerada por hardware. Essa instrução coloca o conteúdo do registrador Program Counter (mas não o do registrador Program Status Word) na stack e carrega no registrador Program Counter o vetor da interrupção a ser atendida. A instrução de salto gerada por hardware pode ser bloqueada por uma destas condições: estar sendo atendido corrente não ser o ciclo final na execução da instrução em curso (para assegurar a instrução em curso será executada até ao fim) ou a instrução em progresso ser RETI ou qualquer ciclo de escrita para o registrador IE e IP. Os vetores de interrupção são fixos e os seus valores são apresentados na tabela 23. Tabela 23- Endereços dos vetores de interrupção. Depois de executado o salto para o vetor de interrupção, a execução prossegue até ser encontrada a instrução RETI. Esta instrução informa o processador do fim da rotina de serviço à interrupção e procede ao pop dos dois bytes do topo da stack que são recarregados no registrador Program Counter. A execução do programa principal continua a partir do ponto em que tinha sido interrompida. O fato de uma flag de interrupção ter estado ativa, mas não ter sido servida não é memorizado, ou seja, cada ciclo de polling é independente do anterior.
48 Tempo de resposta No caso de uma interrupção externa a latência mínima é de três ciclos máquina desde a ativação da interrupção até a execução da primeira instrução da rotina de serviço à interrupção, sendo um ciclo para polling e dois para execução da chamada da rotina de serviço à interrupção. O tempo de resposta será mais lento se o pedido for bloqueado por alguma das condições já referidas. O tempo máximo de espera depende das interrupções ativas e do tamanho das suas rotinas de serviço à interrupção Operação passo-a-passo A estrutura de interrupções do MCS-51 permite a execução passo-a-passo do programa, recorrendo à característica de um pedido de interrupção não ser atendido até que pelo menos uma instrução do programa principal seja executada a seguir à execução de RETI. De seguida é apresentado um exemplo deste tipo de aplicação. Exemplo: Programa-se a interrupção externa 0 para ser ativada no flanco negativo do sinal. Utiliza-se a rotina de serviço à interrupção seguinte: INT0 EQU P3.2 JNB INT0,$ JB INT0,$ RETI ; espera que o sinal no pino INT0 esteja no nível lógico ; alto. ; espera que o sinal no pino INT0 esteja no nível lógico ; baixo. ; volta ao programa principal e executa uma instrução. Se o sinal ligado ao pino INT0 estiver normalmente no nível lógico baixo, o processador executa a rotina de serviço à interrupção até que o valor de INT0 seja levado ao nível lógico alto e devolvido ao nível lógico baixo novamente. Nesse momento é executada a instrução RETI e é executada uma instrução do programa principal. Em seguida é gerado um novo pedido de interrupção é executada novamente a rotina de serviço à interrupção externa INT0. A programação descrita permite que seja executado um passo do programa principal cada vez que o sinal no pino INT0 é ativado através de um pulso Programação de interrupções no MCS51 A arquitetura da família MCS-51 atribui apenas oito bytes a cada rotina de serviço à interrupção. Quando 8 bytes não são suficientes para a rotina desejada, utiliza-se uma instrução de JUMP no vetor de interrupção e coloca-se o código da rotina de serviço à interrupção noutra posição de memória. A programação de interrupções implica a escrita da rotina de serviço à interrupção, seguindo o modelo da figura 42, e a ativação os bits de enable das interrupções desejadas. nome_rotina: RETI Figura 42- Estrutura da rotina de serviço à interrupção.
49 Aplicação das interrupções Como foram referidas na introdução deste capítulo as interrupções são utilizadas para a coordenação de atividades I/O e em aplicações críticas em termos temporais. Na parte final deste capítulo são apresentados alguns exemplos de aplicação. Exemplos: 1 Escreva uma seqüência de instruções que programe a interrupção externa 1 com prioridade alta e todas as outras interrupções com prioridade baixa. MOV IP,#04H 2 Escrever uma seqüência de instruções que ative a interrupção externa INT1 com prioridade alta, inicialize a variável int_cnt com o valor 100 e escreva a rotina de serviço à interrupção para INT1. A rotina de serviço à interrupção decrementa a variável int_cnt e retorna. O programa principal fica em ciclo fechado até que int_cnt seja igual a 0 e desativa a interrupção INT1. int_cnt SET R2 int1: inic: ciclo: ORG 00H LJMP inic ORG 0013H DEC int_cnt RETI MOV int_cnt, #100 MOV IP, #04H MOV IE, #84H ; endereço de início do programa principal ; endereço de início de rotina de serviço à ; interrupção INT1. ; inicialize int_cnt. ; programa as prioridades. ; ativa a interrupção INT1. MOV A, int_cnt JNZ ciclo ; espera que int_cnt = 0. MOV IE,#80H ; desativa a interrupção INT1. 3 Escrever uma rotina para envio e recepção de caracteres pela porta série utilizando a interrupção adequada. Algoritmo da rotina de serviço à interrupção: 1- Verifica a causa da interrupção. 2- Se for por transmissão, transmite o byte seguinte. 3- Se for por recepção, guarda o byte recebido. Rotina de serviço à interrupção: int_serie: ver_ri: ORG 23H ; endereço de início da rotina de serviço à ; interrupção da porta série. LJUMP int_serie ORG 0040H JNB TI, ver_ri MOV SBUF, A CLR TI JNB RI, sair MOV A,SBUF CLR RI ; pode transmitir? ; transmite. ; byte para receber? ; recebe.
50 sair: RETI 4 Escrever uma rotina que leia ou escreva uma string através da porta série, utilizando interrupções. O fim de string recebida é dado pelo caractere CR e a string a enviar termina com o caractere nulo. A rotina anterior tem que ser alterada para permitir o armazenamento dos caracteres em endereços consecutivo. Assume-se que a memória externa é utilizada para guardar as strings (recebidas ou a enviar). Considera-se que o endereço da posição inicial onde deve ser colocada a string recebida está guardado nos registradores R6 e R7 (sendo R6 o byte mais significativo) e que o endereço inicial da string a enviar está contido no registrador DPTR. É necessário incrementar o ponteiro de cada uma dos strings depois da recepção/envio de cada caractere. Rotina de serviço à interrupção: ser_isr: ver_ri: sair: ORG 0023H LJMP ser_isr ORG 0040H JNB TI, ver_ri CLR TI MOV SBUF, A ; envia caractere em A. MOV A, R7 ADD A, #1 MOV R7, A MOV A, R6 ADDC A, #0 MOV R6, A JNB RI, sair CLR RI MOV A,SBUF A INC DPTR RETI ; adiciona 1 ao ponteiro da string a enviar. ; adição com carry, para atualização ; do ponteiro. ; recebe caractere. ; atualização do ponteiro para a string recebida Programa principal para proceder à recepção de uma string: CR EQU 0DH ; código ASCII do caractere CR. recstr: MOV DPTR,#in_buf ; inicialize DPTR com o valor do endereço a ; partir do qual deve ser colocada a string. ORL IE, #90H ; enable da interrupção da porta série. CLR A rd: CJNE A, #CR, rd ; espera que seja recebido o caractere CR. ; termina a string. END Programa principal para proceder ao envio de uma string: envstr: es: PUSH DPH PUSH DPL ORL IE, #90H ; guarda o valor atual do registrador DPTR, ; parte alta e parte baixa. ; enable interrupção da porta série. MOV DPH, R6 ; copia o valor do endereço da string MOV DPL, R7 ; para o registrador DPTR. MOVX ; copia o caractere a enviar para A.
51 Sair: JZ sair ; continua se caractere 0. SJMP es POP DPL POP DPH END ; restitui o valor inicial do registrador DPTR. 15- Modos de poupança de energia da família MCS-51 Os modos de poupança de energia utilizam-se em aplicações em que o consumo de potência é crítico. Existem dois modos de poupança de energia: o modo idle e o modo power down. No modo idle o oscilador não é desligado e os blocos de serviço de interrupções, porta série e temporizadores continuam a receber o sinal de relógio. O sinal de relógio é desligado do processador. No modo power down o oscilador é parado. A figura 42 apresenta os circuitos associados aos modos de poupança de energia. Figura 42- Circuitos associados aos modos de poupança de energia. A ativação dos modos de poupança de energia faz-se através dos bits IDL e PD do registrador PCON. A colocação do bit a 1 implica a ativação do modo de poupança de energia respectivo. A figura 43 apresenta o esquema do registrador PCON. Este registrador não é endereçável bit a bit. Figura 43- Registrador PCON (endereço 87H). SMOD é o bit de duplicação da taxa de transmissão. Este bit é ativo a 1 e utiliza-se em conjunto com o Timer 1 para gerar a taxa de transmissão da porta série, quando esta é utilizada nos modos 1, 2 ou 3. GF1 e GF0 são flags de uso genérico. PD e IDL são os bits de programação dos modos power down e idle, respectivamente. Estes bits são ativos a 1. No caso de os bits PD e IDL serem colocado simultaneamente a 1, o microcontrolador entra no modo power down porque este modo tem precedência sobre o modo idle Mod o Idle Quando o bit IDL é colocado a 1, a instrução que estiver a ser executada é terminada e o microcontrolador entra no modo idle. Neste modo o sinal de relógio é desligado do CPU, mas não dos blocos de serviço de interrupções, dos temporizadores e da porta série. O estado do CPU é mantido na sua totalidade mantendo todos os registradores o valor que tinham quando da entrada no modo
52 idle. Os pinos das portas mantêm os valores lógicos que tinham quando o modo idle foi ativado. O sinal ALE e PSEN ficam no valor lógico alto. O modo idle pode ser abortado de dois modos: através da ativação de qualquer uma das interrupções habilitadas ou através de um reset por hardware. A ativação através de uma interrupção força a limpeza o bit IDL. A interrupção é servida e depois da execução da instrução RETI é executada a instrução a seguir à última instrução executada antes da entrada no modo idle. Na ativação por reset por hardware, o sinal RST força a limpeza do bit IDL de modo assíncrono e direto. O CPU continua a execução a partir do ponto em que tinha terminado quando da entrada no modo idle. Para que não ocorram valores de saída inesperados nas portas de I/O, a instrução a seguinte à que evoca o modo idle não deve escrever nas portas nem na memória de dados externa Modo power down A instrução que ativa o modo power down é a última a ser executada antes da entrada no modo selecionado. Neste modo o oscilador é parado e consequentemente todas as funções do microcontrolador são paradas. O estado da RAM interna e dos registradores com funções especiais é mantido. Os pinos de saída das portas mantêm o valor contido nos registradores respectivos. O sinal ALE e PSEN são colocados no valor lógico baixo. Só se pode sair deste modo através de reset por hardware. O reset afeta todos os registradores com funções especiais, mas mantém o conteúdo da memória de dados interna. Neste modo Vcc pode ser reduzido até 2V. A redução só pode ser efetuada depois de o microcontrolador estar no modo power down. 16- Ferramentas para desenvolvimento e debugging de aplicações desenvolvidas em assembly O projeto de aplicações em assembly faz-se recorrendo a programas que permitem tanto o desenvolvimento da aplicação como o debugging da mesma, numa fase mais avançada do projeto Ferramentas de desenvolvimento Na fase de desenvolvimento utilizam-se programas como assemblers, linkers, librarians e loaders cujas funções são descritas nos pontos seguintes Assembler Um assembler é um programa que converte código fonte, escrito em linguagem assembly, em código máquina. No mercado existem vários assemblers disponíveis sendo muitas vezes referidos de modo a salientar alguma das suas características particulares, assim passa a descrever-se o significado de algumas das características mais referidas. Designa se por macro assembler um programa assembler que permite a utilização de macros. Um assembler diz-se de duas passagens se permitirem a utilização de símbolos antes destes terem sido definidos. Um cross assembler é um programa assembler que é executado num processador diferente daquele em que o código vai ser utilizado e designa-se por native assembler um assembler que é executado no processador alvo. O momento em que o código é processado pelo programa assembler designa-se assembly time. Os programas assembler podem dividir-se em dois tipos: absoluto e relocatable. Num assembler absoluto o código fonte está contido num só ficheiro. Como resultado da execução do assembler é produzido um ficheiro executável, que pode ser carregado no sistema alvo recorrendo a um programa designado loader. A figura 44 apresenta o diagrama de blocos do modo de operação de um assembler absoluto.
53 Figura 44. Operação de um assembler absoluto. Num assembler relocatable o código fonte pode estar espalhado por vários módulos que podem corresponder a ficheiros diferentes. Como resultado da execução deste tipo de assembler é produzido um ficheiro num formato designado formato objeto que posteriormente tem que ser processado por um programa chamado linker ou locator. A figura 45 apresenta o diagrama de blocos da operação de um assembler relocatable. O programa assembler produz os seguintes ficheiros de saída: um ficheiro executável ou um ficheiro objeto (dependendo do tipo de assembler), uma listagem, uma tabela de símbolos e a cross-reference. O ficheiro executável, produzido se o assembler for absoluto, é um ficheiro em código máquina que pode ser carregado diretamente para o sistema alvo. O ficheiro objeto, produzido se o assembler for relocatable, precisa ser processado por um linker antes de poder ser carregado para o sistema alvo. A listagem assembler apresenta o código fonte (código em linguagem assembly) e o resultado do processo de assembler, ou seja, o código máquina correspondente. No caso de existirem erros de sintaxe no programa inicial eles são reportados neste ficheiro. A tabela de símbolos mostra onde e como estão definidos os símbolos usados no código fonte. A crossreference é uma lista com todos os símbolos e etiquetas por ordem alfabética e refere o sítio em que eles são utilizados no programa.
54 Linker Figura 45- Operação de um assembler relocatable. O linker é um programa que faz a ligação entre os vários ficheiros objeto, correspondentes a diferentes módulos, e localiza todos os endereços. Este programa produz como saída um ficheiro em código máquina (ficheiro executável) que pode ser carregado para o sistema alvo. Este programa é utilizado em conjunto com assemblers do tipo relocatable. Designa-se por link time o momento em que o código é processado pelo linker Librarian Este programa transforma módulos de código fonte em elementos de uma biblioteca. Os elementos contidos na biblioteca encontram-se no formato objeto. Os elementos da biblioteca correspondem a blocos de código com funções genéricas que podem ser reutilizados noutros módulos. O librarian é utilizado em conjunto com assemblers do tipo relocatable Loader Designa-se por loader o programa que carrega o ficheiro executável na memória do microcontrolador. O momento em que o código é executado no microcontrolador designa-se run rime.
55 16.2- Ferramentas de Debugging Na fase de debugging procede-se à análise dos problemas encontrados na execução do código ou quando do teste do programa. A utilização deste tipo de programas permite que o tempo de desenvolvimento do projeto seja consideravelmente reduzido. As principais ferramentas de debugging disponíveis são os simuladores, os monitores e os emuladores. Todas estas ferramentas permitem o recurso a duas técnicas muito utilizadas no debugging de programas designadas de program trace e breakpoints. A técnica de program trace permite a execução de uma instrução de cada vez, sendo possível analisar os dados passo a passo. Esta técnica tem a desvantagem de ser bastante lenta. Os breakpoints permitem a execução de uma seqüência de instruções até ao aparecimento de um breakpoint. O breakpoint pára a execução do programa permitindo a análise do conteúdo dos registradores relevantes. A combinação destas duas técnicas permite detectar de modo mais rápido eventual de erros no projeto Simuladores Os simuladores são programas que correm normalmente num PC e simulam a operação do microcontrolador, permitindo a análise da execução do programa. Os simuladores permitem a visualização do conteúdo dos registradores mais importantes da arquitetura e o conteúdo das posições de memória de dados interna. Estes programas são indicados para o teste das partes do programa relacionadas com cálculos e condições de salto. Por outro lado os simuladores não são indicados quando é necessário testar o funcionamento de blocos de hardware como os temporizadores, portas E/S ou porta série, pois esses blocos interagem com sinais externos que, quando muito, podem ser simulados por software não tendo em conta as especificações temporais a eles associadas. Pelas razões enunciadas os simuladores não são indicados para o teste de situações de E/S nem de interrupções. Nestes programas o código a testar não é executado a uma velocidade igual à do sistema real. Os simuladores são as ferramentas de debugging menos dispendiosas, mas são também as mais limitadas Monitores Os programas monitores utilizam o sistema alvo como ferramenta de debugging, associado ao PC que é utilizado para a visualização do processo. A ligação entre o sistema alvo e o PC é normalmente feita através de uma porta série, dedicada a esta função. O programa monitor é carregado no sistema alvo e permite a carga, a execução e a monitorização do programa a testar. Esta técnica utiliza alguns dos recursos do sistema alvo. O modo como os monitores funcionam implica que o espaço de memória de dados e o espaço de memória de código sejam sobrepostos para permitir que o monitor escreva na memória de código quando é feita a carga do programa a testar para o sistema alvo. Por outro lado o código a testar não fica colocado no endereço de start-up (0000H), o que pode levar à necessidade de alterar o programa a testar de modo a adaptar-se às circunstâncias de teste, o que não vai corresponder à situação de execução normal do programa final. Como vantagens os programas monitores apresentam a característica de promover a análise do sistema enquanto o programa é executado à velocidade real e o fato de ser possível testar todo o tipo de situações uma vez que o teste é feito no sistema alvo permitindo a interação com o hardware circundante. Em termos de custo os monitores são mais dispendiosos do que os simuladores, mas menos dispendiosos do que os emuladores.
56 Emuladores Um emulador é um bloco de hardware que é colocado no sistema alvo e permite a execução e monitorização da operação do programa a testar. Estes sistemas permitem o desenvolvimento de código com capacidade de debugging que corre no hardware do sistema alvo. Para o teste é utilizado o ambiente real do sistema alvo. Esta ferramenta não utiliza as capacidades do sistema alvo podendo o programa a testar ser executado normalmente. O programa é executado à velocidade normal. Os emuladores utilizam as capacidades de E/S do sistema real podendo testar todo o tipo de situações. Não é necessário proceder a alterações do código para efeito de teste. Existem vários tipos de emuladores no mercado. A única desvantagem da utilização destes sistemas prende-se com o seu custo que é extremamente elevado. 17- Desenvolvimentos de programas em assembly Genericamente no projeto de software recomenda-se uma abordagem top-down em que o desenvolvimento se faz por fases, começando pela compreensão do problema, seguida da divisão do projeto em blocos distintos, depois o projeto de cada bloco, subdividindo-o em diferentes níveis, tendo sempre em conta que se devem adiar os detalhes para níveis mais baixos do desenvolvimento e que é necessário assegurar a correção de cada nível. O processo de desenvolvimento de software em assembly apresenta as suas particularidades sendo recomendadas as seguintes fases: concepção, codificação e teste. Na fase de concepção efetua-se o estudo do problema e elabora-se a proposta de solução modular, tendo em conta que o módulo ideal executa uma única função. Na fase de codificação procede-se à escrita do código em assembly. A fase de teste inicia-se com o teste de cada módulo individualmente e depois do teste do sistema global. Em todas as fases é particularmente importante a documentação do projeto de modo a que o trabalho desenvolvido possa ser facilmente analisado. Como método para o desenvolvimento dos programas propõe-se a utilização da técnica de programação estruturada segundo a qual qualquer programa pode ser descrito recorrendo a três estruturas base: seqüência, decisão e repetição. Essas estruturas básicas pode ser representadas em pseudo-código do modo seguinte: Seqüência: BEGIN: END Decisão: IF (condição) THEN... ELSE... Repetição: WHILE (condição) DO... ou DO... WHILE (condição)
57 Estas estruturas podem ser utilizadas para descrever o algoritmo do programa ou módulo antes da sua codificação em assembly. Do mesmo modo podem utilizar-se fluxogramas com o mesmo objetivo. Os fluxogramas apresentam a vantagem de ser uma técnica gráfica que permite a rápida apreensão do fluxo do programa. Na figura 46 são apresentados os símbolos correspondentes às estruturas base propostas, que se utilizam na construção de um fluxograma. Figura 46- Símbolos usados na construção de fluxogramas. Para finalizar apresenta-se um exemplo de aplicação. 1- Escreva um programa que calcule N, em que N=20, e guarde o resultado no endereço 40H. O fluxograma do programa a desenvolver encontra-se representado na figura 47. Como se pode ver na figura o fluxo do programa e as operações a efetuar são facilmente perceptíveis. Figura 47- Fluxograma do programa do exemplo 1.
58 Codificação do programa: repetir: N EQU 20 i SET R0 MOV i,#0 CLR A INC i ADD A,i CJNE i,#n,repetir MOV 40H,A END ; limite de contagem ; utilizar R0 como contador i ; inicializar i ; inicializar sum ; saltar se i não for igual a N ; guardar soma em memória Bibliografia [1] MCS51 Microcontroller Family User s Guide, Intel, [2] Using the MCS-51 Microcontroller, Han-Way Huang, Oxford University Press, [3] Design with Microcontrollers, John B. Peatman, McGraw-Hill, [4] C and the 8051, Thomas W. Schultz, Prentice Hall, Anexos: Set de Instruções e demais informações para a família MCS51 Prof. Corradi
Microprocessadores e Microcontroladores. Prova Substitutiva Uma Solução
Prova Substitutiva Uma Solução Aluno: Matrícula: Uso de Interrupções e do Temporizador 1. Faça um programa (usando o assembly do 8051) para acionamento de um motor de corrente contínua, com as seguintes
Estrutura de um Computador
SEL-0415 Introdução à Organização de Computadores Estrutura de um Computador Aula 7 Prof. Dr. Marcelo Andrade da Costa Vieira MODELO DE VON NEUMANN PRINCÍPIOS A arquitetura de um computador consiste de
Microprocessadores e Microcontroladores Parte 3. Expansão de Memória Mapeamento de Memória
Microprocessadores e Microcontroladores Parte 3 Expansão de Memória José Wilson Lima Nerys www.eee.ufg.br/ jwilson 2013 Um microcontrolador padrão da família 8051 possui normalmente uma memória de programa
Acetatos de apoio às aulas teóricas
Microprocessadores e Aplicações Acetatos de apoio às aulas teóricas Ana Cristina Lopes Dep. Engenharia Electrotécnica http://orion.ipt.pt [email protected] Ana Cristina Lopes, 24 de Outubro de 2004 Microprocessadores
1. SINTAXE DA LINGUAGEM ASSEMBLY
1. SINTAXE DA LINGUAGEM ASSEMBLY Antes de se escrever em assembly, é conveniente construir um fluxograma do programa. Um fluxograma não faz referência à linguagem a utilizar, pelo que pode ser utilizado
EXPERIÊNCIA 17 USO DO TEMPORIZADOR INTERNO
EXPERIÊNCIA 17 USO DO TEMPORIZADOR INTERNO Parte I Fundamentos Teóricos O que diferencia um microcontrolador (como o 8051) de um microprocessador é o fato de que o primeiro pode apresentar, integrados
ULA Sinais de Controle enviados pela UC
Solução - Exercícios Processadores 1- Qual as funções da Unidade Aritmética e Lógica (ULA)? A ULA é o dispositivo da CPU que executa operações tais como: Adição Subtração Multiplicação Divisão Incremento
Arquitetura de Computadores. Tipos de Instruções
Arquitetura de Computadores Tipos de Instruções Tipos de instruções Instruções de movimento de dados Operações diádicas Operações monádicas Instruções de comparação e desvio condicional Instruções de chamada
Oprojeto apresenta três níveis de dificuldade: fácil, médio e difícil. No modo fácil tem-se uma
Jogo de Memória (Memorex v. 3.0) José Wilson Lima Nerys Universidade Federal de Goiás [email protected] Abstract No presente projeto uma sequência de Leds é criada pelo microcontrolador, e deve ser repetida
BARRAMENTO DO SISTEMA
BARRAMENTO DO SISTEMA Memória Principal Processador Barramento local Memória cachê/ ponte Barramento de sistema SCSI FireWire Dispositivo gráfico Controlador de vídeo Rede Local Barramento de alta velocidade
Componentes do Computador e. aula 3. Profa. Débora Matos
Componentes do Computador e modelo de Von Neumann aula 3 Profa. Débora Matos O que difere nos componentes que constituem um computador? Princípios básicos Cada computador tem um conjunto de operações e
CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA
8 CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA A porta paralela, também conhecida por printer port ou Centronics e a porta serial (RS-232) são interfaces bastante comuns que, apesar de estarem praticamente
Laboratório de Microprocessadores e Microcontroladores
Escola de Engenharia Elétrica, Mecânica e de Computação Universidade Federal de Goiás Laboratório de Microprocessadores e Microcontroladores Experimento 4: Temporizadores e Motor de Passo Alunos: Matrícula:
Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01
Unidade Central de Processamento (CPU) Processador Renan Manola Introdução ao Computador 2010/01 Componentes de um Computador (1) Computador Eletrônico Digital É um sistema composto por: Memória Principal
Aula 10 Microcontrolador Intel 8051 Parte 2
SEL 0415 Aula 10 Microcontrolador Intel 8051 Parte 2 SEL 0415 INTROD À ORGANIZAÇÃO DE COMPUTADORES Prof Dr Marcelo A C Vieira SEL 415 Mapeamento das memórias internas Memória de dados interna (RAM) n 8051
CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM
CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM 71 Introdução Difere dos níveis inferiores por ser implementado por tradução A tradução é usada quando um processador está disponível para uma mensagem fonte mas
Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy)
Capítulo 4 João Lourenço [email protected] Faculdade de Ciências e Tecnologia Universidade Nova de Lisboa 2007-2008 MARIE (Machine Architecture Really Intuitive and Easy) Adaptado dos transparentes
ARQUITETURA DE COMPUTADORES - 1866
7 Unidade Central de Processamento (UCP): O processador é o componente vital do sistema de computação, responsável pela realização das operações de processamento e de controle, durante a execução de um
PROJETOS COM MICROCONTROLADORES
Escola de Engenharia Elétrica e de Computação Universidade Federal de Goiás PROJETOS COM MICROCONTROLADORES Versão em Processo de Atualização Prof. Dr. José Wilson Lima Nerys Goiânia, 2009 Projetos com
Edeyson Andrade Gomes
Sistemas Operacionais Conceitos de Arquitetura Edeyson Andrade Gomes www.edeyson.com.br Roteiro da Aula Máquinas de Níveis Revisão de Conceitos de Arquitetura 2 Máquina de Níveis Máquina de níveis Computador
Aplicações de Microprocessadores I. Prof. Adilson Gonzaga
Aplicações de Microprocessadores I Prof. Adilson Gonzaga Exercício -1 Fazer um programa em Assembly do 8051 que informe a temperatura de um forno. O programa deve enviar inicialmente um String em ASCII
Figura 1 - O computador
Organização e arquitectura dum computador Índice Índice... 2 1. Introdução... 3 2. Representação da informação no computador... 4 3. Funcionamento básico dum computador... 5 4. Estrutura do processador...
Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.
Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores. 7.3.1.2 Registradores: São pequenas unidades de memória, implementadas na CPU, com as seguintes características:
Interrupções. As interrupções são casos especiais de chamadas de procedimentos.
Interrupções Uma interrupção é equivalente a uma chamada de procedimento. A chamada é equivalente a um CALL gerado pela execução de uma instrução. As interrupções são casos especiais de chamadas de procedimentos.
Arquitetura de Computadores - Revisão -
Arquitetura de Computadores - Revisão - Principais funções de um Sistema Operacional Componentes básicos da Arquitetura Barramentos Registradores da CPU Ciclo de Instruções Interrupções Técnicas de E/S
O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema.
O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema. Unidade aritmética e lógica - Executa operações aritméticas (cálculos);
NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann
Universidade Federal de Santa Maria NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann O modelo (ou arquitetura) de von
Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)
Arquitectura de um computador Caracterizada por: Conjunto de instruções do processador (ISA Estrutura interna do processador (que registadores existem, etc Modelo de memória (dimensão endereçável, alcance
Dispositivos de Entrada e Saída
SEL-0415 Introdução à Organização de Computadores Dispositivos de Entrada e Saída Aula 9 Prof. Dr. Marcelo Andrade da Costa Vieira ENTRADA e SAÍDA (E/S) (I/O - Input/Output) n Inserção dos dados (programa)
ENTRADA E SAÍDA DE DADOS
ENTRADA E SAÍDA DE DADOS Os dispositivos de um computador compartilham uma única via de comunicação BARRAMENTO. BARRAMENTO Elétrica/Mecânica + Protocolo. GERENCIAMENTO DE E/S O controle da troca de dados
EEC2104 Microprocessadores
EEC2104 Microprocessadores Edição 2005/2006 Contadores / Temporizadores Contadores/temporizadores em geral... Hardware para contagem de impulsos Externos Internos (derivados do relógio interno) Contagem
Programação Básica em Arduino Aula 2
Programação Básica em Arduino Aula 2 Execução: Laboratório de Automação e Robótica Móvel Variáveis são lugares (posições) na memória principal que servem para armazenar dados. As variáveis são acessadas
7. PROGRAMANDO O MICROCONTROLADOR. Microcontroladores - Prof: Demantova
7. PROGRAMANDO O MICROCONTROLADOR 1 7. PROGRAMANDO O MICROCONTROLADOR: Hardware parte física do circuito eletrônico CPU onde está localizado o microcontrolador. Dentro do microcontrolador existe um conjunto
SEL-614 MICROPROCESSADORES E APLICAÇÕES. Adilson Gonzaga
SEL-614 MICROPROCESSADORES E APLICAÇÕES Prof: Adilson Gonzaga HISTÓRICO Microprocessador Circuito integrado ( chip ) capaz de executar instruções. 1971 Intel Corporation lançou no mercado o microprocessador
CONJUNTO DE INSTRUÇÕES
CONJUNTO DE INSTRUÇÕES Rn - Registrador R0 R7 do banco de registradores selecionado. direto - 8-bits de endereço da posição da RAM de dados Podem ser referentes tanto à RAM interna (0 7F) como ao espaço
Ambiente de desenvolvimento de Programação Assembly MCU 8051 IDE
SEL-433 APLICAÇÕES DE MICROPROCESSADORES I Prof. Evandro L. L. Rodrigues Ambiente de desenvolvimento de Programação Assembly MCU 8051 IDE http://mcu8051ide.sourceforge.net/ Tela inicial Criar novo projeto:
2 Formalidades referentes ao trabalho
Bacharelado em Ciência da Computação DINF / UFPR Projetos Digitais e Microprocessadores 1 o Semestre de 2006 MICO-v12.r0 07/03/2006 Profs. Luis Allan Künzle e Armando Luiz Nicolini Delgado Atenção: Este
Organização Básica do Computador
Organização Básica do Computador Modelo de Von Neumann MEMÓRIA ENTRADA ARITMÉTICA LÓGICA SAÍDA CONTROLE Modelo de Von Neumann Introduziu o conceito do computador controlado por programa armazenado. Todo
O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware
1 2 Revisão de Hardware 2.1 Hardware O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware 2.1.1 Processador O Processador
Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar
Componentes de um Computador (5) Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar Prof. João Paulo A. Almeida ([email protected]) 2007/01 - INF02597 Com slides de Roberta Lima Gomes
Microcontroladores 8051
Microcontroladores 8051 1. Microcontroladores Microcontrolador é o nome dado ao componente que incorpora em um só "chip" todos os elementos necessários a um microcomputador. Deve ter : CPU, Memória e Interfaces
28/9/2010. Unidade de Controle Funcionamento e Implementação
Arquitetura de Computadores Unidade de Controle Funcionamento e Implementação Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Operação da Unidade de Controle Unidade de controle: parte do
Sistemas Microprocessados. sato<at>utfpr<dot>edu<dot>br
Sistemas Microprocessados satoutfpredubr http://pessoal.utfpr.edu.br/sato/ Assembly do 805 satoutfpredubr Sobre o material Essas transparências foram baseadas em materiais elaborados
Organização e Arquitetura de Computadores
Organização e Arquitetura de Computadores Entrada e saída Alexandre Amory Edson Moreno Nas Aulas Anteriores Foco na Arquitetura e Organização internas da Cleo Modelo Von Neuman Circuito combinacional Circuito
Sistemas Operacionais. Prof. André Y. Kusumoto [email protected]
Sistemas Operacionais Prof. André Y. Kusumoto [email protected] Estruturas de Sistemas de Computação O sistema operacional precisa garantir a operação correta do sistema de computação. Operação
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 UMA SOLUÇÃO POSSÍVEL. Obs.: Todas as questões têm valor 2,0. Boa prova e Feliz Natal e Ano Novo!!!!
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 Aluno: Matrícula: UMA SOLUÇÃO POSSÍVEL Obs.: Todas as questões têm valor 2,0. Boa prova e Feliz Natal e Ano Novo!!!! 1. Escreva um pequeno, em assembly do
Organização de Computadores 1
Organização de Computadores 1 5 CONJUNTO DE INSTRUÇÕES Prof. Luiz Gustavo A. Martins Introdução O que é um conjunto de instruções? Coleção completa das instruções que a CPU é capaz de executar (entende).
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 UMA SOLUCAO POSSÍVEL
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 UMA SOLUCAO POSSÍVEL Aluno: Matrícula: 1. Escreva as instruções necessárias para atender a cada uma das configurações solicitadas. Valor: 2,0 (a) Interrupção
Arquitetura e Organização de Computadores I
Arquitetura e Organização de Computadores I Interrupções e Estrutura de Interconexão Prof. Material adaptado e traduzido de: STALLINGS, William. Arquitetura e Organização de Computadores. 5ª edição Interrupções
Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini E-mail: [email protected] /
Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini E-mail: [email protected] / [email protected] MATÉRIA: ICO Aula N : 09 Tema: Unidade Central de
Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB
Calculando a capacidade de disco: Capacidade = (# bytes/setor) x (méd. # setores/trilha) x (# trilhas/superfície) x (# superfícies/prato) x (# pratos/disco) Exemplo 01: 512 bytes/setor 300 setores/trilha
Introdução. INF1005 Programação I 33K Prof. Gustavo Moreira [email protected]
Introdução INF1005 Programação I 33K Prof. Gustavo Moreira [email protected] introdução Tópicos conceitos básicos o que é um programa um programa na memória decifrando um código referência Capítulo
PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br
- Aula 2 - O NÍVEL DA MICROARQUITETURA 1. INTRODUÇÃO Este é o nível cuja função é implementar a camada ISA (Instruction Set Architeture). O seu projeto depende da arquitetura do conjunto das instruções
CONSTRUÇÃO DE UMA UCP HIPOTÉTICA M++ INTRODUÇÃO
CONSTRUÇÃO DE UMA UCP HIPOTÉTICA M++ INTRODUÇÃO O seguinte artigo apresenta uma UCP hipotética construída no software simulador DEMOWARE Digital Works 3.04.39. A UCP (Unidade Central de Processamento)
Capítulo 3 Processadores de Propósito Geral: Software
Capítulo 3 Processadores de Propósito Geral: Software Prof. Romis Attux EA075 2015 Obs: Os slides são parcialmente baseados nos dos autores do livro texto Processadores de Propósito Geral Um processador
3. Arquitetura Básica do Computador
3. Arquitetura Básica do Computador 3.1. Modelo de Von Neumann Dar-me-eis um grão de trigo pela primeira casa do tabuleiro; dois pela segunda, quatro pela terceira, oito pela quarta, e assim dobrando sucessivamente,
Processadores BIP. Conforme Morandi et al (2006), durante o desenvolvimento do BIP, foram definidas três diretrizes de projeto:
Processadores BIP A família de processadores BIP foi desenvolvida por pesquisadores do Laboratório de Sistemas Embarcados e Distribuídos (LSED) da Universidade do Vale do Itajaí UNIVALI com o objetivo
Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger
Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger O controle da entrada e saída (E/S ou I/O, input/output) de dados dos dispositivos é uma das funções principais de um sistema operacional.
MICROCONTROLADORES FAMÍLIA 8031/8051
MANUAL MICROCONTROLADORES FAMÍLIA 8031/8051 PROF. EDSON PEDRO FERLIN CURITIBA, PR ABRIL 2004 Sumário CAPÍTULO 1 INTRODUÇÃO... 3 CAPÍTULO 2 VISÃO GERAL... 4 1.1) Características de Hardware... 6 1.1) Pinagem
ORGANIZACÃO DE COMPUTADORES PROCESSADORES CHIPS TRANSISTORES
PROCESSADORES CHIPS TRANSISTORES O que é um chip? - conhecido como circuito integrado; - pequeno e fino pedaço de silício no qual os transistores, que formam o microprocessador, foram encapsulados; - processadores
ARQUITETURA DE COMPUTADORES
ARQUITETURA DE COMPUTADORES Aula 08: UCP Características dos elementos internos da UCP: registradores, unidade de controle, decodificador de instruções, relógio do sistema. Funções do processador: controle
Programação de Microprocessadores. Programação de Microprocessadores SEL-433 APLICAÇÕES DE MICROPROCESSADORES I
SEL-433 APLICAÇÕES DE MICROPROCESSADORES I Programação de Microprocessadores Microprocessadores são Máquinas de Estado Seqüenciais Síncronas que operam mediante a execução de uma seqüência de códigos binários
Sistemas Microcontrolados
Sistemas Microcontrolados Uma Abordagem com o Microcontrolador PIC 16F84 Nardênio Almeida Martins Novatec Editora Capítulo 1 Introdução Os microcontroladores estão presentes em quase tudo o que envolve
3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:
Arquitetura de Computadores Estrutura e Funcionamento da CPU Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Revisão dos conceitos básicos O processador é o componente vital do sistema de
DIAGRAMA DE BLOCOS DE UM MICROCONTROLADOR
DIAGRAMA DE BLOCOS DE UM MICROCONTROLADOR BARRAMENTO [BUS] DE ENDEREÇOS UNIDAD CENTRAL DE PROCESO C.P.U INTERFACE SERIE UNIDADE DE CONTROLE U.L.A REGITRADORES TIMERS ROM RAM PORTAS E/S [I/O] BUS DE DADOS
MICROCONTROLADOR 8051
MICROCONTROLADOR 8051 Notas de Aula (v.2014) Prof. André R. Hirakawa Prof. Paulo S. Cugnasca Prof. Carlos E. Cugnasca ARQUITETURA 8051 APLICAÇÕES MAIS FREQUENTES SISTEMAS COMPACTOS: MEMÓRIAS ROM / RAM
www.vwsolucoes.com Copyright 2011 VW Soluções
1 Apresentação O adaptador ADP.v01 é utilizado para facilitar a instalação de display Lcd 16x2 ou display Lcd 20x4 nos CLP PIC28 ou CLP PIC40 através de um flat cable de 10vias de acordo com a necessidade
Organização e Arquitetura de Computadores I
Organização e Arquitetura de Computadores I Aritmética Computacional Slide 1 Sumário Unidade Lógica e Aritmética Representação de Números Inteiros Aritmética de Números Inteiros Representação de Números
As 5 partes fundamentais. Linguagem de Programação Pinagem Características Elétricas Ambiente de Desenvolvimento Integrado - IDE
SEL-433 APLICAÇÕES DE MICROPROCESSADORES I Como conhecer/estudar um Microprocessador/Microcontrolador As 5 partes fundamentais Programação de Microprocessadores Prof: Evandro L. L. Rodrigues Arquitetura
Entrada e Saída. Prof. Leonardo Barreto Campos 1
Entrada e Saída Prof. Leonardo Barreto Campos 1 Sumário Introdução; Dispositivos Externos; E/S Programada; E/S Dirigida por Interrupção; Acesso Direto à Memória; Bibliografia. Prof. Leonardo Barreto Campos
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 (Tema: Microcontrolador 8051) Resposta Esperada
MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 (Tema: Microcontrolador 8051) Resposta Esperada 1. Tema: programação geral do microcontrolador 8051. Valor: 2,5 A Tabela 1 mostra um programa, em linguagem
ARQUITETURA DE COMPUTADORES
01001111 01110010 01100111 01100001 01101110 01101001 01111010 01100001 11100111 11100011 01101111 00100000 01100100 01100101 00100000 01000011 01101111 01101101 01110000 01110101 01110100 01100001 01100100
Sistemas Operacionais
Sistemas Operacionais Aula 3 Software Prof.: Edilberto M. Silva http://www.edilms.eti.br SO - Prof. Edilberto Silva Barramento Sistemas Operacionais Interliga os dispositivos de E/S (I/O), memória principal
Memória Cache. Prof. Leonardo Barreto Campos 1
Memória Cache Prof. Leonardo Barreto Campos 1 Sumário Introdução; Projeto de Memórias Cache; Tamanho; Função de Mapeamento; Política de Escrita; Tamanho da Linha; Número de Memórias Cache; Bibliografia.
Organização e Arquitetura de Computadores I
Organização e Arquitetura de Computadores I Caminho de Dados Slide 1 Sumário Introdução Convenções Lógicas de Projeto Construindo um Caminho de Dados O Controle da ULA Projeto da Unidade de Controle Principal
Sistemas Computacionais II Professor Frederico Sauer
Sistemas Computacionais II Professor Frederico Sauer Livro-texto: Introdução à Organização de Computadores 4ª edição Mário A. Monteiro Livros Técnicos e Científicos Editora. Atenção: Este material não
CEFET-SP. Microcontroladores Família MCS-51 Conceitos, Aplicações e Projetos versão 6.0 2004 Wilson Ruiz. Wilson Ruiz
CEFET-SP Microcontroladores Família MCS-51 Conceitos, Aplicações e Projetos versão 6.0 2004 Wilson Ruiz Harpia harpyja Harpia ou Águia Real Brasil 1 CAPÍTULO 1: HARDWARE DOS MICROCONTROLADORES DA FAMÍLIA
Entrada e Saída. Interface entre periféricos, processador e memória. Fonte: Minho - Portugal 1
Entrada e Saída Interface entre periféricos, processador e memória Fonte: Minho - Portugal 1 Ligação Processador/Memória - Periférico Processador Memória Controlo Dados Controlador Fonte: Minho - Portugal
Organização de Computadores Como a informação é processada?
Curso de ADS/DTEE/IFBA Organização de Computadores Como a informação é processada? Prof. Antonio Carlos Referências Bibliográficas: 1. Ciência da Computação: Uma visão abrangente - J.Glenn Brokshear 2.
Arquitectura de Computadores
Unidade de Entrada/Saída (I/O) Nuno Cavaco Gomes Horta Universidade Técnica de Lisboa / Instituto Superior Técnico Sumário Introdução Unidade de Processamento Unidade de Controlo Conjunto de Instruções
Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária
1- Apresentação Binária Os computadores funcionam e armazenam dados mediante a utilização de chaves eletrônicas que são LIGADAS ou DESLIGADAS. Os computadores só entendem e utilizam dados existentes neste
5 Entrada e Saída de Dados:
5 Entrada e Saída de Dados: 5.1 - Arquitetura de Entrada e Saída: O sistema de entrada e saída de dados é o responsável pela ligação do sistema computacional com o mundo externo. Através de dispositivos
Visão Geral de Sistemas Operacionais
Visão Geral de Sistemas Operacionais Sumário Um sistema operacional é um intermediário entre usuários e o hardware do computador. Desta forma, o usuário pode executar programas de forma conveniente e eficiente.
Primeiros "computadores" digitais. Execução de um programa. Consolas. Primórdios dos computadores. Memória interna. Computadores com memória interna
Execução de um O executa um Quais os seus componentes? Como estes se organizam e interactuam? entrada de dados processador, memória, input bits periféricos,etc bits saída de dados output Primeiros "es"
Memória de Dados Interna. Memória de Dados Interna
Memória de Dados Interna Memória de Dados Interna - faixa de endereço endereçável diretamente: 00 a 7F hexadecimal. - faixa de endereço endereçável indiretamente: 00 a FF hexadecimal. - espaço endereçável
1. CAPÍTULO COMPUTADORES
1. CAPÍTULO COMPUTADORES 1.1. Computadores Denomina-se computador uma máquina capaz de executar variados tipos de tratamento automático de informações ou processamento de dados. Os primeiros eram capazes
EXERCÍCIOS RESOLVIDOS
EXERCÍCIOS RESOLVIDOS Modos de endereçamento direto ; inclui no programa assembly o arquivo (REG51.inc) ORG 0000H ; o programa inicia na linha 0000H da EPROM MOV A,#01010101B ; carrego no ACC por binário
Introdução à Organização e Arquitetura de Computadores. Prof. Leonardo Barreto Campos 1
Introdução à Organização e Arquitetura de Computadores Prof. Leonardo Barreto Campos 1 Sumário Introdução; Evolução dos Computadores; Considerações da Arquitetura de von Neumann; Execução de uma instrução
Introdução à Arquitetura de Computadores
1 Introdução à Arquitetura de Computadores Hardware e software Organização de um computador: Processador: registradores, ALU, unidade de controle Memórias Dispositivos de E/S Barramentos Linguagens de
O microcontrolador Quatro partes importantes
SEL-433 APLICAÇÕES DE MICROPROCESSADORES I A escolha do microprocessador mais adequado depende basicamente da aplicação, e deve se levar em conta os seguintes critérios: Técnicos: Velocidade, capacidade
Família 8051 (introdução) 2011/1
Família 8051 (introdução) 2011/1 Refresh Microprocessador vs. microcontrolador. Periféricos built-in. Single-chip computer 2 Objetivos Histórico Modelos da família original Principais características Diagrama
www.vwsolucoes.com Copyright 2013 VW Soluções
1 1. Especificação técnicas: Dimensões do módulo 4EA2SA v1.0: 100 mm x 56 mm Peso aproximado: xxx gramas (montada). Alimentação do circuito : 12 ou 24Vcc Tipo de comunicação: RS232 ou RS485 Tensão de referencia:
2. A influência do tamanho da palavra
1. Introdução O processador é o componente vital do sistema de computação, responsável pela realização das operações de processamento (os cálculos matemáticos etc.) e de controle, durante a execução de
A Unidade Central de Processamento é a responsável pelo processamento e execução de programas armazenados na MP.
A ARQUITETURA DE UM COMPUTADOR A arquitetura básica de um computador moderno segue ainda de forma geral os conceitos estabelecidos pelo Professor da Universidade de Princeton, John Von Neumann (1903-1957),
Máquina Multinível. Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tarefa.
Máquina Multinível Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tarefa. Uma instrução pode ser definida como um comando para o processador.
Programação Básica em STEP 7 Operações Binárias. SITRAIN Training for Automation and Drives. Página 6-1
Conteúdo Página Operações Lógicas Binárias: AND, OR...2 Operações Lógicas Binárias: OR Exclusivo (XOR)...3 Contatos Normalmente Abertos e Normalmente Fechados. Sensores e Símbolos... 4 Exercício...5 Resultado
INSTITUTO POLITÉCNICO DE BRAGANÇA ESCOLA SUPERIOR DE TECNOLOGIA E DE GESTÃO. Engenharia Electrotécnica. Microprocessadores. 2ºano - 1ºsemestre
INSTITUTO POLITÉCNICO DE BRAGANÇA ESCOLA SUPERIOR DE TECNOLOGIA E DE GESTÃO Engenharia Electrotécnica Microprocessadores 2ºano - 1ºsemestre Microprocessador 8085 Exercícios de Programação em Linguagem
