MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 (Tema: Microcontrolador 8051) 1. Tema: programação geral do microcontrolador 8051. Valor: 2,0 A Figura a seguir mostra um sistema no qual um motor de passo é usado para o transporte vertical de objetos a serem colocados nas posições 1, 2 ou 3, separadas por alturas de 20 cm. Cada passo do motor corresponde a 6º e cada volta completa corresponde a 10 cm de deslocamento vertical. O motor encontra-se, originalmente, na posição 1. Faça um programa, em assembly do 8051, para acionar o motor de passo com a seguinte lógica: (a) O programa fica inicialmente em um loop monitorando os pinos P2.1, P2.2 e P2.3 (originalmente em estado alto). (b) A cada pino acionado (pressionado e liberado), o programa verifica a posição em que a base se encontra e compara com a posição desejada; e desloca-se, para cima ou para baixo a distância correspondente. Exemplo: Se a base está na posição 1 e o pino P2.2 for acionado, o objeto é deslocado 20 cm para cima; e o programa retorna para o loop; se o pino pressionado for P2.3, o objeto é deslocado 40 cm, da posição 1 até a posição 3. (c) R0 guarda o número da posição em que a base se encontra. (d) O motor está conectado ao nibble inferior da porta P1. Considerações iniciais: Cada passo do motor corresponde a 6º; assim, são necessários 60 passos (360/6) para completar uma volta. Cada volta corresponde a um deslocamento vertical de 10 cm; assim, são necessários 120 (2 x 60) passos para percorrer 20 cm e 240 (4 x 60) passos para deslocar 40 cm. Se a base estiver na posição 1, ela subirá 20 cm para alcançar a posição 2 e 40 cm para a posição 3. Se a base estiver na posição 2, ela subirá 20 cm para alcançar a posição 3 e descerá 20 cm para alcançar a posição 1. Se a base estiver na posição 3, ela descerá 20 cm para alcançar a posição 2 e 40 cm para a posição 1. O fluxograma a seguir ilustra melhor todo o processo. Após cada escolha, a primeira é ação é verificar se a base já se encontra na posição desejada. Se estiver, o processamento volta para o laço principal. Para manter coerência com a Figura inicial, o motor gira no sentido anti-horário (RL A) para subir a base e no sentido horário (RR A) para descer.
Rótulo Instruções Rótulo Instruções Rótulo Instruções ORG 00H DESTINO1: CJNE R0,#02H,V3 SOBE_20CM: MOV A,#11H LJMP INICIO MOV R0,#01H MOV R7,#120 SJMP DESCE_20CM V6: MOV P1,A ORG 30H RL A INICIO: MOV SP,#2FH V3: CJNE R0,#03H,V0 LCALL DELAY MOV R0,#01H MOV R0,#01H DJNZ R7,V6 SJMP DESCE_40CM LJMP V0 V0: JB P2.1,V1 SOBE_40CM: MOV A,#11H CJNE R0,#01H,DESTINO1 DESTINO2: CJNE R0,#01H,V4 MOV R7,#240 SJMP V0 MOV R0,#02H V7: MOV P1,A SJMP SOBE_20CM RL A V1: JB P2.2,V2 LCALL DELAY CJNE R0,#02H,DESTINO2 V4: CJNE R0,#03H,V0 DJNZ R7,V7 SJMP V0 MOV R0,#02H LJMP V0 SJMP DESCE_20CM DESCE_20CM: MOV A,#11H V2: JB P2.3,V0 MOV R7,#120 CJNE R0,#03H,DESTINO3 DESTINO3: CJNE R0,#01H,V5 V8: MOV P1,A SJMP V0 MOV R0,#03H RR A SJMP SOBE_40CM LCALL DELAY DJNZ R7,V8 V5: CJNE R0,#02H,V0 LJMP V0 MOV R0,#03H DESCE_40CM: MOV A,#11H SJMP SOBE _20CM MOV R7,#240 DELAY: MOV R6,#100 V9: MOV P1,A V10: MOV R5,#250 RR A DJNZ R5,$ LCALL DELAY DJNZ R6,V10 RET DJNZ R7,V9 LJMP V0 END
2. Tema: Interrupções do microcontrolador 8051. Valor: 2,5 Faça um programa, em linguagem assembly do 8051, onde as interrupções externas 0 e 1 são utilizadas para acionar Leds na porta P1. A interrupção externa zero é por nível e, quando solicitada, os Leds da porta P1 devem piscar, todos juntos, enquanto houver solicitação. A interrupção externa 1 é por transição, com prioridade alta e, quando solicitada, os Leds devem rotacionar para a esquerda, 3 voltas completas (3 voltas de 8 rotações). Na subrotina de atraso de tempo para os dois casos deve-se usar R0 = 100 e R1 = 200. Linha Rótulo Instruções Linha Rótulo Instruções 1 ORG 00H 21 PISCA: MOV P1,#00 2 LJMP INICIO 22 LCALL ATRASO 3 23 MOV P1,#0FFH 4 ORG 03H 24 LCALL ATRASO 5 LJMP PISCA 25 RETI 6 26 7 ORG 13H 27 GIRA: MOV R7,#24 8 LJMP GIRA 28 V2: MOV P1,A 9 29 LCALL ATRASO 10 ORG 30H 30 RL A 11 INICIO: MOV SP,#2FH 31 DJNZ R7,V2 12 MOV IE,#85H 32 RETI 13 MOV TCON,#04H 33 14 MOV IP,#04H 34 ATRASO: MOV R0,#100 15 MOV A,#01H 35 MOV R1,#200 16 SJMP $ 36 DJNZ R1,$ 17 37 DJNZ R0,V1 18 38 RET 19 39 END 20 40 3. Tema: Serial do microcontrolador 8051. Valor: 2,5 O programa mostrado na Tabela 2 foi escrito em assembly do 8051. É um programa usado para acionar alguns dispositivos via canal serial do 8051. Analise o programa e responda às questões pedidas. O cristal oscilador é de 11,0592 MHz. Observações: (i) Há um Led verde acionado através do pino P2.7 (liga com nível alto); e um Led vermelho acionado através do pino P2.6 (liga com nível alto). (ii) Há um motor CC acionado através dos pinos P2.0 e P2.1, seguindo a seguinte lógica: (iii) Tabela 1: lógica de acionamento do motor cc P2.0 P2.1 Comportamento do Motor 0 0 Motor parado 0 1 Motor gira no sentido horário 1 0 Motor gira no sentido anti-horário 1 1 Motor parado
Tabela 2: programa em linguagem Assembly do 8051 Linha Rótulo Instruções Linha Rótulo Instruções 1 ORG 00H 21 V1: CJNE A,#31H,V2 2 LJMP INICIO 22 SETB P2.0 3 23 CLR P2.1 4 ORG 23H 24 CLR P2.6 5 CLR RI 25 SETB P2.7 6 MOV A,SBUF 26 RETI 7 SJMP V1 27 V2: CJNE A,#32H,V3 8 28 CLR P2.0 9 ORG 30H 29 SETB P2.1 10 INICIO: MOV SP,#2FH 30 SETB P2.6 11 MOV SCON,#40H 31 CLR P2.7 12 MOV TMOD,#20H 32 RETI 13 MOV IE,#90H 33 V3: CJNE A,#33H,V4 14 MOV TH1,#0E8H 34 CLR P2.0 15 MOV TL1,#0E8H 35 CLR P2.1 16 SETB TR1 36 CLR P2.6 17 SETB REN 37 CLR P2.7 18 CLR RI 38 V4: NOP 19 SJMP $ 39 RETI 20 40 END Analise o programa da Tabela 2 e responda às questões de (a) a (d). (a) Qual a configuração resultante das instruções da linha 11 à linha 18? (0,5) O canal serial foi configurado para operar no modo 1 (assíncrono de 8 bits) com baud rate de 1200 bps (ver tabela 5) e com interrupção (IE = 90h = 1001 0000b). (b) O que acontece com a execução das instruções da linha 21 à linha 26? (0,5) O conteúdo de A (recebido via serial) é comparado com 31H (código ASCII do número 1, de acordo com a Tabela 7). Se A 31H, desvia para V2; se A = 31H, aciona o motor cc no sentido anti-horário (SETB P2.0 e CLR P2.1) e liga o Led verde (SETB P2.7). A seguir, através da instrução RETI, retorna para o laço infinito SJMP $ (linha 19). (c) O que acontece com a execução das instruções da linha 27 à linha 32? (0,5) O conteúdo de A (recebido via serial) é comparado com 32H (código ASCII do número 2, de acordo com a Tabela 7). Se A 32H, desvia para V3; se A = 32H, aciona o motor cc no sentido horário (CLR P2.0 e SETB P2.1) e liga o Led vermelho (SETB P2.6). A seguir, através da instrução RETI, retorna para o laço infinito SJMP $ (linha 19). (d) Explique o funcionamento do programa. (1,0) Após as configurações iniciais, o programa fica aguardando uma interrupção da serial em um laço infinito, na linha 19 (SJMP $). Ao receber um dado via serial (sinalizada através de RI = 1), o programa desvia para o endereço 23H, onde o dado recebido é transferido para o registrador A. Em seguida, o processamento é desvia para o endereço V1 (linha 21). A partir desse endereço, o conteúdo de A é comparado com 31H (número 1), 32H (número 2) e 33H (número 3). Se A = 31H o motor CC é acionado no sentido anti-horário; se A = 32H, no sentido horário e se A = 33H, o motor para. Após cada uma dessas ações, o processamento retorna para o laço infinito. Se A for diferente desses três valores, o processamento simplesmente retorna para o laço infinito, mantendo o estado atual.
4. Tema: Temporizadores do microcontrolador 8051. Valor: 2,5 Faça um programa, em assembly do 8051, usando o temporizador zero no modo 1, com interrupção, para gerar uma onda quadrada no pino P1.0, com meio período correspondente a 4 segundos. Use uma base de tempo de 40 ms, para um cristal oscilador de 12 MHz. Considerações iniciais: para utilizar uma base de 40 ms, com cristal de 12 MHz, é necessário gerar 40.000 pulsos de 1 µs no modo 1 do temporizador zero. Assim, a contagem deve começar de 25535 (65535-40000), que corresponde a 63BFH, de acordo com a Tabela 6. Para gera 4 segundos com base de 40 ms, são necessárias 100 contagens do temporizador, antes de cada complemento do pino P1.0. Linha Rótulo Instruções Linha Rótulo Instruções 1 ORG 00H 16 ONDA: MOV TH0,#HIGH(25535) 2 LJMP INICIO 17 MOV TL0,#LOW(25535) 3 18 DJNZ R0,V1 4 ORG 0BH 19 CPL P1.0 5 LJMP ONDA 20 MOV R0,#100 6 21 NOP 7 ORG 30H 22 V1: RETI 8 INICIO: MOV SP,#2FH 23 9 MOV IE,#82H 24 END 10 MOV TMOD,#01H 25 11 MOV TH0,#HIGH(25535) 26 12 MOV TL0,#LOW(25535) 13 MOV R0,#100 14 SETB TR0 15 SJMP $ ============================ Questão opcional (Explique sua conclusão) Valor: 0,5 Há muito tempo, num misterioso e longínquo país do Oriente, havia um oráculo bastante visitado por pessoas de todas as partes da nação e até mesmo de países vizinhos. Nesse oráculo apareciam três deuses, sentados lado a lado: o deus da Verdade, o deus da Falsidade e o deus da Diplomacia, que atendiam os fiéis respondendo às suas súplicas. Naturalmente, as respostas do deus da Verdade eram sempre verdadeiras, as do deus da Falsidade eram sempre falsas e as do deus da Diplomacia tanto poderiam ser verdadeiras quanto falsas. Mas havia algo que afligia muito os pobres peregrinos: eles não sabiam se as respostas que ouviam eram verdadeiras ou não pois, como os três deuses eram idênticos, ficava impossível reconhecer qual dos deuses estava falando. Certo dia, um fiel mais ousado decidiu colocar a situação em pratos limpos. Perguntou ao primeiro deus: Resposta: Quem está sentado a seu lado? O deus da Verdade. Raciocínio lógico: Como o primeiro deus afirma que o deus ao lado é o da Verdade, ele não pode ser o da Verdade, pois só existe um deus da Verdade. Portanto, ele é o deus da Falsidade ou da Diplomacia. Perguntou ao segundo deus: Resposta: Quem é você? O deus da Diplomacia.
Raciocínio lógico: Como o segundo deus afirmou ser o da Diplomacia, ele não pode ser o deus da Verdade. Senão ele diria ser o da Verdade, e não o da Diplomacia. Portanto, ele é o deus da Falsidade ou da Diplomacia. Perguntou ao terceiro deus: Resposta: Quem está sentado a seu lado? O deus da Falsidade. Raciocínio lógico: A partir das respostas dos dois primeiros deuses, já se conclui que nenhum deles é o deus da Verdade e, portanto, o da Verdade é o terceiro. Daí, conclui-se que: Primeiro deus: Diplomacia Segundo deus: Falsidade Terceiro deus: Verdade Informações Complementares Tabela 3: Alguns Registradores Especiais Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 IE EA X X ES ET1 EX1 ET0 EX0 IP X X X PS PT1 PX1 PT0 PX0 PSW CY AC F0 RS1 RS0 OV X P TMOD G1 C/T\ M1.1 M0.1 G0 C/T\ M1.0 M0.0 SCON SM0 SM1 SM2 REN TB8 RB8 TI RI Tabela 5: Taxas de transmissão mais comuns Timer 1 Baud Rate (bits/seg) Freq. Osc. (MHz) SMOD C/Tbarra Modo Valor Recar. Modo 0 Máx: 1MHz 12 X X X X Modo 2 Máx: 375K 12 1 X X X Modo 1, 3: 62,5K 12 1 0 2 FFh 19,2K 11,059 1 0 2 FDh 9,6K 11,059 0 0 2 FDh 4,8K 11,059 0 0 2 FAh 2,4K 11,059 0 0 2 F4h 1.2K 11,059 0 0 2 E8h 137,5 11,059 0 0 2 1Dh 110 6 0 0 2 72h 110 12 0 0 1 FEEBh Tabela 4: End. interrupções Interrupção Solicitada Endereço de desvio Reset 0000h INT0\ 0003h Timer/counter 0 000Bh INT1\ 0013h Timer/counter 1 001Bh Canal Serial 0023h Tabela 6: Valores Decimais e Hexadecimais Valor Hexadecimal Valor Decimal 3CAF 15535 63BF 25535 8ACF 35535 B1DF 45535 D8EF 55535 FFFF 65535 Tabela 7: Tabela ASCII parcial Caractere Código Código Código Código Código Código Caractere Caractere Hexadecimal decimal Hexadecimal decimal Hexadecimal decimal 0 30 48 A 41 65 a 61 97 1 31 49 B 42 66 b 62 98 2 32 50 C 43 67 c 63 99 3 33 51 D 44 68 d 64 100 4 34 52 E 45 69 e 65 101 5 35 53 F 46 70 f 66 102 6 36 54 G 47 71 g 67 103