Goiânia, 09 de junho de 2011. Prof. José Wilson Lima Nerys MICROPROCESSADORES E MICROCONTROLADORES PROVA 2 – UMA SOLUÇÃO POSSÍVEL Aluno: Matrícula: 1. Escreva as instruções necessárias para configurar o temporizador zero para operar no modo 1, o temporizador 1 para operar no modo 2, ambos usando interrupção e, ainda a interrupção externa zero para operar por transição. O valor de recarga para o temporizador 1 deve ser de 3FH e a contagem inicial do temporizador 0 deve ser de 40.000 pulsos. Valor: 2,0 ; IE = 1000 1011 B INTERRUPÇÕES TEMP 0, TEMP 1 E INT. 0 ; EXTERNA ZERO POR TRANSIÇÃO ; TEMP ZERO NO MODO 1; TEMP 1 NO MODO 2 ; RECARGA DO TEMP 1 ; CONTAGEM DE 40.000 PULSOS ; DE 25.535 (63BFH) ATÉ 65.535 (FFFFH) ; DISPARA TEMPORIZADOR 0 ; DISPARA TEMPORIZADOR 1 MOV IE,#8BH MOV TCON,#01H MOV TMOD,#21H MOV TH1,#3FH MOV TH0,#63H MOV TL0,#0BFH SETB TR0 SETB TR1 As questões a seguir referem-se à Fig. 1, onde um microcontrolador da família 8051 é usado com mapeamento de memória. A memória EEPROM AT28C16 é de 2 K e tem endereço inicial 0800H. O endereço de acesso aos LEDs é 1000H. 2. Indique as entradas para as portas NAND A e B, da Fig. 1, de modo que a memória EEPROM tenha endereço inicial 0800H e os LEDs sejam alocados na região que começa no endereço 1000H. Mostre o procedimento de escolha dessas entradas a partir da divisão da região de 64 K em regiões de 2K. Não é necessário eliminar as sombras de memória. Valor: 2,0. Como indicado na Fig. 1, a memória EEPROM tem 11 linhas de endereço (de A0 a A10), o que permite o acesso a 2K de memória: 211 = 2048 = 2Kbytes. Os endereços internos da memória são, portanto: Inicio Fim A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 HEXA 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0000 07FF Sendo a memória de 2 K, é conveniente dividir a região de 64 K em regiões de 2 K, como mostrado a seguir. São mostradas apenas as 4 primeiras regiões. São colocadas em destaque as linhas de endereço A11 e A12, responsáveis pela seleção das 4 primeiras regiões. Reg 0 1 2 3 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 Inicio 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000 Fim 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 07FF Inicio 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0800 Fim 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0FFF Inicio 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1000 Fim 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 17FF Inicio 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1800 Fim 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1FFF Microprocessadores e Microcontroladores Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás HEXA Goiânia, 09 de junho de 2011. Prof. José Wilson Lima Nerys A partir do mapa anterior, faz-se uma tabela-resumo para seleção das 4 primeiras regiões. As regiões de interesse são as regiões 1 (EEPROM) e 2 (LEDs). As entradas das portas NAND são mostradas a seguir. A12 0 A11 0 Região selecionada Endereço Inicial Endereço Final 0 0000H 07FFH 0 1 1 0800H 0FFFH 1 0 2 1000H 17FFH 1 1 3 1800H 1FFFH 3. Comente o programa a seguir. O que ele faz? Rótulo Mnemônico CHAVE EQU P1.7 Valor: 2,0 Comentários ; O pino P1.7 recebe o nome de CHAVE ORG 00H LJMP INICIO ORG 30H MOV SP,#2FH MOV DPTR,#1000H ; O endereço inicial da pilha é 2Fh ; DPTR recebe o valor inicial da região dos LEDs V4: V2: MOV A,#00H JNB CHAVE,V1 MOVX @DPTR,A LCALL ATRASO CPL A SJMP V2 ; Se a variável CHAVE for 1 (CH aberta), faz A=00 ; Se a variável CHAVE for zero (CH fechada), desvia para V1 ; Se CHAVE=1 (CH aberta), envia o conteúdo de A para os LEDs ; Chama subrotina de atraso ; Complementa conteúdo de A. Alterna entre 00h e FFH ; Volta para V2 V1: V3: MOV A,#01H MOVX @DPTR,A LCALL ATRASO RL A CJNE A,#01H,V3 SJMP V4 ; Se a variável CHAVE for zero (CH fechada), faz A = 01h ; Envia o conteúdo de A para os LEDs ; Chama subrotina de atraso de tempo ; Rotaciona o conteúdo de A para a esquerda ; Verifica se A = 01h. Enquanto A for diferente de 01h, desvia para V3. ; Quando A = 01h (rotação completa dos LEDs), volta para V2. MOV R0,#250 DJNZ R0,$ RET END ; Subrotina de atraso de tempo INICIO: ATRASO: O programa verifica o estado da variável CHAVE, que indica o nível lógico do pino P1.7. Situação 1 (chave CH pressionada): O pino P1.7 está com tensão zero (nível lógico baixo) e, portanto, a variável CHAVE é zero. Assim, os LEDs alocados no endereço 1000H (no mapeamento de memória) são rotacionados para a esquerda (rotação completa do LED 0 ao LED 7). Situação 2 (chave CH livre): O pino P1.7 está com tensão 5 V (nível lógico alto) e, portanto, a variável CHAVE é 1. Assim, os valores 00H e FFH são enviados alternadamente para os LEDs, ou seja, os LEDs são ligados e desligados alternadamente. Microprocessadores e Microcontroladores Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás Goiânia, 09 de junho de 2011. Prof. José Wilson Lima Nerys 4. Faça um programa onde o teclado de 4 teclas, conectado à porta P1 (Fig. 1), seja lido por varredura. Ao ser digitada a tecla 1 os LEDs são rotacionados para a esquerda de forma ininterrupta (mesmo ao ser liberada a tecla 1). Ao ser digitada a tecla 2 os LEDs são rotacionados para a direita de forma ininterrupta (mesmo ao ser liberada a tecla 2). Ao serem digitadas as teclas 3 ou 4 o processo de rotação dos LEDs é interrompido. Valor: 3,0 Rótulo Mnemônico Comentários $mod51 COLUNA1 COLUNA2 LINHA1 EQU EQU EQU P1.0 P1.1 P1.2 LINHA2 EQU P1.3 ORG 00H LJMP INICIO INICIO: LOOP: ORG 30H MOV SP,#2FH MOV DPTR,#1000H MOV R0,#00H MOV A,#01H LCALL TECLADO CJNE R0,#01H,V1 MOVX @DPTR,A RL A LCALL ATRASO SJMP LOOP V1: CJNE R0,#02H,LOOP MOVX @DPTR,A RR A LCALL ATRASO SJMP LOOP TECLADO: ; ENDEREÇO INICIAL DA PILHA = 2FH ; DPTR RECEBE O ENDERECO DOS LEDS ; VALOR INICIAL DE R0=0 (R0 GUARDA VALOR LIDO) ; ACUMULADOR RECEBE VALOR 01 P/ ROTACIONAR LEDS ; CHAMA SUBROTINA DE LEITURA DO TECLADO ; SE R0 DIFERENTE DE 01H, DESVIA PARA V1 ; SE R0=01H, ENVIA CONTEUDO DE A PARA OS LEDS ; ROTACIONA ACUMULADOR PARA A ESQUERDA ; CHAMA ATRASO ; VOLTA PARA A LOOP (NOVA LEITURA DO TECLADO) ; SE R0 DIFERENTE DE 02, VOLTA PARA LOOP ; SE R0 = 02H, ENVIA CONTEUDO DE A PARA LEDS ; ROTACIONA ACUMULADOR PARA A DIREITA ; CHAMA ATRASO ; VOLTA PARA LOOP ; SUBROTINA DE LEITURA DO TECLADO SETB LINHA1 ; LINHA 1 DO TECLADO EM NÍVEL LÓGICO ALTO SETB LINHA2 ; LINHA 2 DO TECLADO EM NÍVEL LÓGICO ALTO CLR LINHA1 JB COLUNA1,TECLA2 MOV R0,#01H RET ; LIMPA LINHA 1 DO TECLADO ; SE COLUNA1 = 1, VER COLUNA2 ; SE COLUNA1 = 0 TECLA 1 FOI PRESSIONADA TECLA2: JB COLUNA2,TECLA3 MOV R0,#02H RET ; SE COLUNA2 = 1, VER TECLA3 NA LINHA2 ; SE COLUNA2 = 0 TECLA 2 FOI PRESSIONADA TECLA3: CLR LINHA2 JB COLUNA1,TECLA4 MOV R0,#03H ; LIMPA LINHA2 DO TECLADO ; SE COLUNA1 = 1, VER COLUNA2 ; SE COLUNA1 = 0 TECLA 3 FOI PRESSIONADA Microprocessadores e Microcontroladores Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás Goiânia, 09 de junho de 2011. Prof. José Wilson Lima Nerys RET TECLA4: NADA: ATRASO: V2: JB COLUNA2,NADA MOV R0,#04H NOP RET ; SE COLUNA2 = 1, NENHUMA TECLA FOI PRESSIONADA ; SE COLUNA2 = 0 TECLA 4 FOI PRESSIONADA MOV R7,#250 MOV R6,#250 DJNZ R6,$ DJNZ R7,V2 RET END ; ATRASO PARA ROTAÇÃO DOS LEDS 5. Faça um programa onde o microcontrolador da Fig. 1 recebe dados de um computador, através da porta serial, a uma taxa (baud rate) de 4800 bps, no modo 1 (assíncrono de 8 bits). Se o caractere recebido for a letra “M” (4DH) o microcontrolador envia para a memória EEPROM a frase „ DADOS ARMAZENADOS NA EEPROM: ‟. Se o caractere recebido for a letra “C” (43H), o microcontrolador envia para o computador a frase „ PREPARANDO PARA RECEBER DADOS: ‟. O cristal oscilador é de 11,0592 MHz. Valor: 3,0 Fig. 1 – Sistema utilizando o microcontrolador AT89S52 da família 8051 Microprocessadores e Microcontroladores Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás Goiânia, 09 de junho de 2011. Rótulo INICIO: V1: Mnemônico $mod51 ORG 00H LJMP INICIO ORG 30H MOV SP,#2FH MOV SCON,#40H MOV TMOD,#20H MOV TH1,#0FAH MOV TL1,#0FAH SETB TR1 ENVIA1: PROXIMO: V3: ENVIA2: Comentários ; ENDEREÇO INICIAL DA PILHA = 2FH ; SERIAL NO MODO 1 ; TEMP 1 NO MODO 2 ; BAUD RATE: 4800 bps ; DISPARA O TEMPORIZADOR 1 GERA BAUD RATE ; RECEBE CARACTERES DO COMPUTADOR MOV DPTR,#0800H ; DPTR = ENDEREÇO DA EEPROM ; CONTADOR PARA LEITURA DOS TEXTOS MOV R7,#00H ; PREPARA PARA RECEBER DADOS CLR RI ; HABILITA RECEPÇÃO SERIAL SETB REN JNB RI,$ MOV A,SBUF V2: Prof. José Wilson Lima Nerys ; AGUARDA FIM DA RECEPÇÃO ; TRANSFERE PARA ACUMULADOR DADO RECEBIDO ; VERIFICA SE O CARACTERE RECEBIDO É A LETRA “M” CJNE A,#4DH,PROXIMO ; SE NÃO FOR “M”, DESVIA PARA VER SE É “C” CLR REN ; SE FOR “M” INICIA PROCESSO DE ENVIO PARA EEPROM PUSH DPH ; GUARDA DPTR DA EEPROM PUSH DPL MOV DPTR,#MSGMEM ; DPTR = ENDEREÇO DA MENSAGEM PARA A EEPROM MOV A,R7 ; ACUMULADOR RECEBE VALOR ATUAL DO CONTADOR MOVC A,@A+DPTR ; LEITURA DO TEXTO PARA A EEPROM CJNE A,#0FFH,ENVIA1 ; VERIFICA SE CHEGOU AO FINAL DO TEXTO SJMP V1 ; QUANDO O TEXTO ACABA, VOLTA PARA V1 POP DPL POP DPH MOVX @DPTR,A INC DPTR INC R7 SJMP V2 ; RECUPERA DPTR DA EEPROM ; ENVIA CONTEUDO DO ACUMULADOR PARA EEPROM ; INCREMENTA DPTR DA EEPROM ; INCREMENTA CONTADOR DO TEXTO ; CONTINUA LEITURA DO TEXTO E ENVIO PARA EEPROM ; VERIFICA SE O CARACTERE RECEBIDO É A LETRA “C” CJNE A,#43H,V1 ; SE NÃO FOR “C”, VOLTA PARA V1 CLR REN ; SE FOR “C” ENVIA MSG PARA O MICROCOMPUTADOR MOV DPTR,#MSGMICRO ; DPTR = ENDEREÇO DA MENSAGEM PARA O MICRO MOV A,R7 ; ACUMULADOR RECEBE VALOR ATUAL DO CONTADOR MOVC A,@A+DPTR ; LEITURA DO TEXTO PARA O MICROCOMPUTADOR CJNE A,#0FFH,ENVIA2 ; VERIFICA SE CHEGOU AO FINAL DO TEXTO SJMP V1 ; QUANDO O TEXTO ACABA, VOLTA PARA V1 CLR TI MOV SBUF,A JNB TI,$ ; PREPARA PARA TRANSMISSÃO SERIAL ; ENVIA CONTEUDO DE A VIA SERIAL ; AGUARDA FIM DA TRANSMISSÃO Microprocessadores e Microcontroladores Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás Goiânia, 09 de junho de 2011. Prof. José Wilson Lima Nerys INC R7 SJMP V3 MSGMEM: MSGMICRO: ; INCREMENTA CONTADOR DO TEXTO ; CONTINUA LEITURA DO TEXTO E ENVIO VIA SERIAL DB ' DADOS ARMAZENADOS NA EEPROM: ',0FFH DB 0DH, ' DADOS ARMAZENADOS NA EEPROM: ',0FFH END ALGUNS REGISTRADORES ESPECIAIS TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TMOD G1\ C\T M11 M01 G0\ C\T M10 M00 IE EA X X ES ET1 EX1 ET0 EX0 IP X X X OS PT1 PX1 PT0 PX0 PSW CY AC F0 RS1 RS0 0V X P SCON SM1 SM2 SM3 REN TB8 RB8 TI RI Microprocessadores e Microcontroladores Escola de Engenharia Elétrica e de Computação – Universidade Federal de Goiás