Buscar

Lista 2a Prova(8051)

Prévia do material em texto

Lista 02 de Sistemas Microprocessados
		
Baseada nas Aulas 03(Software), 04(Sub-rotinas) e 05 (Interrupções no 8051).
Instruções, Diretivas, Sub-rotinas e uso da Pilha no 8051
	
O que significa Modo de Endereçamento das Instruções ? Quais são os utilizados pelas instruções do 8051 ? Explique cada um deles e cite 2 exemplos para cada.
 Modo de endereçamento: Define de que forma os dados são referenciados nas Instruções. 
Imediato: #número
Direto: Endereço absoluto (RAM interna) ou Mnemônico
Registrador: Dado está no Rn
Indireto: Usa só R0, R1 e DPTR para apontar o local
Indexado: Utilizado, apenas, pelas instruções MOVC e jump na ROM
Bit: Número do bit, label bit ou bit label
Quais são os tipos de instruções do 8051? Cite 3 exemplos para cada tipo.
Movimentação de Dados: Mov a, #dado; Mov a, direto; Mov a, reg; Mov reg1, reg2
Movimentação com a memória de dados externa: Movx a, @Ri; Mov @dptr, a
Movimentação com a memória de programa: Mov dptr, #200h; Movc a, @a+dptr
Aritméticas: add a, #dado; add a, direto; addc a, Rn; sub a, #dado
Lógicas: anl a, #0fh; orl a, 0fh; crl a; cpl a 
Manipulação de Bit: Clr c/bit; setb c/bit; cpl c/bit; anl c,bit; orl c, bit; mov c, bit
Controle de programa (Saltos e Desvios); 
Desvios condicionais: jz rel; jnz rel 
Compara e Salta: CJNE	A, #, rel; A, D, rel; R, #, rel; @R,#, rel
Decrementa e Salta: DJNZ Rn, rel
Subrotinas (Chamadas de Funções): ACALL; LCALL; RET; RETI 
O que é a Pilha é um sistema microprocessado e qual a sua finalidade? 
É um registrador utilizado com pilha de endereços de sub-rotina. O endereço-base da Pilha é definido por software no registrador SP (Stack Pointer), deverá estar entre os end. 30h e 7Fh da RAM ( por default em 07h ). Antes do desvio, o endereço da próxima instrução (PC) é guardado na Pilha, o qual será o endereço de retorno, após a execução da sub-rotina. A Pilha , neste caso, guarda o byte superior(PCH) e inferior(PCL) do PC. 
O que são Diretivas numa linguagem de programação e qual a sua finalidade? Cite quais são as utilizadas no Assembly do 8051 e sua finalidade individual?
Pseudo instruções 
Permitem definir símbolos	 (Em C: #define PI 3.14)
Simplificam o desenvolvimento e as futuras modificações dos programas.
É possível dividir o programa em blocos, estabelecendo endereços específicos para cada um deles.
Reservar áreas de memória para Variáveis globais, Dados e Tabelas.
Não fazem parte do conjunto de instruções (instruction set).
Não geram código binário
Diretiva ORG (Origin)
Através do ORG é possível definir em que endereço (da ROM) o Assembler ( Montador ) colocará :
A instrução inicial do programa;
Outros trechos do código ( ex.: subrotinas )
Um Dado( de uso geral ) ou uma Tabela.
- Um programa poderá conter várias diretivas ORG
Diretiva DB (Define Byte)
Permite reservar áreas de memória ROM e identifica-las com um NOME. A partir daí, o NOME passa a ser reconhecido com um ENDEREÇO. 
Informa ao Assembler que o Byte a seguir é uma Dado e não uma Instrução.
Sintaxe :	<nome> DB <valor inicial>
<nome> torna-se um sinônimo para o endereço do 1º byte reservado
É possível atribuir valores iniciais e criar Tabelas:
V1 DB	200	; cria um Dado de 1 byte c/ valor 200
V2 DB 1,2,3	; cria um Dado de 3 bytes (ou uma Tabela)
P1 DB “MIC”	; cria uma string, ocupando 3 bytes
Memória: 4DH, 49H e 43H (Tabela ASCII )
A escolha desse endereço: pelo programador (uso do ORG) ou pelo Assembler 
Por que razão as sub-rotinas são utilizadas nos programas?
Redução do código duplicado no programa, possibilidade de reutilização do mesmo código em outros programas, decomposição de um programa extenso em bloco menores, melhora visualização do código e facilita a sua manutenabilidade, dentro de uma Sub-rotina, uma outra pode ser chamada (aninhamento de subrotinas). O Programa Principal é interrompido, temporáriamente, para a execução da Sub-Rotina
Considerando os seguintes dados nos Registradores, construa o estado final da região da memória referente à Pilha e o conteúdo do SP, após a execução da sequencia abaixo de instruções:
Acc = 03h, R1(Banco 1) = 11h, R4(Banco 2) = 0Ah, R3(Banco 0) = FFh e SP = 40h
End	Instrução
PUSH Acc
PUSH 14h
PUSH 03h
CALL SUB01
1016	POP 03h
No esquema abaixo, temos um trecho das memórias ROM e RAM internas de um (Proc 8051. No trecho da ROM, temos o endereço, o mnemônico da instrução em Assembly e o respectivo código (em hexa) gravado. Considerando o conteúdo inicial do PC igual a 0810h e que todos os Registradores do Quadro, abaixo, são do Banco 1 da parte baixa da RAM :
a)Preencha o Quadro de Registradores abaixo, à medida em que o PC for avançando, considerando que, em cada uma das linhas, deveremos ter o valor inicial dos Registradores , ANTES, da execução da Instrução atual apontada pelo PC. ( as três primeiras linhas já foram preenchidas )
b) Á medida em que o programa for sendo executado, preencha os conteúdos dos endereços da Memória (RAM), incluindo a Pilha, que venha a sofrer alterações.
	
	
	ROM
	
	
	
	
	
	
	
	
	
	
	
	
	
	End
	Mnemonico
	Codigo
	
	 
	
	REGISTRADORES
	 
	
	 
	
	
	0000
	NOP
	00
	
	PC
	Acc
	PSW
	R0
	R1
	R2
	R3
	DPH
	DPL
	SP
	
	:
	:
	:
	
	0810
	00
	00
	00
	00
	00
	00
	00
	00
	00
	
	0810
	mov SP,#33h
	75
	
	0813
	00
	00
	00
	00
	00
	00
	00
	00
	33
	
	0811
	
	81
	
	0815
	00
	00
	00
	00
	00
	00
	00
	00
	33
	
	0812
	
	33
	
	0817
	00
	08
	00
	00
	00
	00
	00
	00
	33
	
	0813
	SETB RS0
	D2
	
	0819
	00
	08
	3B
	00
	00
	00
	00
	00
	33
	
	0814
	
	D3
	
	081C
	00
	08
	3B
	00
	00
	00
	08
	2C
	33
	
	0815
	mov a,#00h
	74
	
	081E
	00
	08
	3B
	00
	00
	00
	08
	2C
	34
	
	0816
	
	00
	
	081F
	0F
	
	
	
	
	
	
	
	34
	
	0817
	mov R0,#3Bh
	78
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0818
	
	3B
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0819
	Mov DPTR,#082Ch
	90
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	081A
	
	08
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	081B
	
	2C
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	081C
	push Acc
	C0
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	081D
	
	E0
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	081E
	movc a,@a+DPTR
	93
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	081F
	acall 0830h
	11
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0820
	
	30
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0821
	pop Acc
	D0
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0822
	
	E0
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0823
	inc R0
	08
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0824
	inc a	
	04
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0825
	cjne a,#02h,081Ch
	B4
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0826
	
	02
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0827
	
	F4
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0828
	SJMP $
	80
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0829
	
	FE
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	082A
	
	00
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	082B
	
	00
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	082C
	
	0F
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	082D
	
	10
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	082E
	
	00
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	082F
	
	00
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0830
	mov B,#10d
	75
	
	 
	 
	
	 
	
	 
	
	 
	 
	 
	
	0831
	
	F0
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0832
	
	0A
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0833
	DIV AB
	84
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0834
	SWAP A
	C4
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0835
	ADD A,B
	25
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0836
	
	F0
	
	
	 
	
	 
	
	 
	
	 
	 
	 
	
	0837
	MOV @R0,A
	F60838
	RET
	22
	
	
	
	
	
	
	
	
	
	
	
	
	0839
	NOP
	00
	
	
	
	
	
	
	
	
	
	
	
	
	:
	:
	:
	
	
	
	
	
	
	
	
	
	
	
	
	4095
	NOP
	00
	
	
	
	
	
	
	
	
	
	
	
	
	
	RAM
	
	
	
	
	
	
	
	
	
	
	
	
	
	00
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	01
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	02
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	03
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	04
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	05
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	06
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	07
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	08
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	09
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	0A
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	0B
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	0C
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	0D
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	0E
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	0F
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	:
	:
	:
	
	
	
	
	
	
	
	
	
	
	
	
	30
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	31
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	32
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	33
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	34
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	35
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	36
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	37
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	38
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	39
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	3A
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	3B
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	3C
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	3D
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	:
	:
	:
	
	
	
	
	
	
	
	
	
	
	
	
	FF
	
	 
	
	 
	 
	
	 
	
	 
	
	 
	 
	 
8) Considerando o seguinte grupo de números e fazendo uso das Diretivas (ORG, DB, DEFINE e DATA ) e de sub-rotinas :		
		28h,56h,1Fh,55h,5Ch
Elabore um programa que determine o menor valor dos números acima, efetue a conversão BCD do mesmo e apresente-o em 2 Displays ( Dezena e Unidade ). 
Obs : 1)Através do uso das Diretivas, o grupo de números acima já deverá estar na memória, a partir do end. 2100h, antes do programa começar a ser executado. 
	2) Considere que os Displays estão conectados a 2 Ports do 8051.
9) No esquema abaixo, temos um determinado processo de produção industrial, o qual deverá funcionar, da seguinte forma :
Inicialmente, apenas, as eletro-válvulas A e B deveráo abrir, simultaneamente, para permitir a entradas dos insumos A e B na Caldeira. Esta etapa dura 10 segundos.
Em seguida, estas eletro-válvulas fecham e o motor é acionado por 30 segundos.
Em seguida, a eletro-válvula A volta a abrir, com o motor, ainda, girando por mais 5 segundos.
Na sequencia, a eletro-válvula A fecha, o motor é desligado e, apenas, a eletro-válvula C deverá ser aberta, durante 20 segundos, para que o produto final, que se encontra na Caldeira, seja escoado.
Em seguida, um novo ciclo de produção deverá ser iniciado. 
Considerando que estão sendo utilizados os 4 bits menos significativos do Port P2 de um 8051 para comandar as eletro-válvulas e acionar o motor, elabore o Programa, com o seu respectivo Fluxograma, que possibilite todo a sequencia de operações indicadas acima.
Para tanto, utilize as diretivas e sub-rotinas para esta implementação e considere que :
Se o bit da porta for “0” e estiver controlando uma eletro-válvula, neste caso, esta ficará fechada. Caso contrário, se o bit for “1”, a eletro-válvula fica aberta. Se o bit estiver controlando o Motor, o mesmo só irá funcionar se este bit for igual a “1”.
Interrupção no 8085
10)	O que é uma Interrupção e em que situações ela é usada no 8051 ?
Interrupção, temporária, do processo atual da CPU para o atendimento a um outro processo, interno ou externo, num dado instante.
No 8051 :
		a) Atendimento aos periféricos (I/O).
		b) Overflow nos Temporizadores/Contadores internos.
		c) Eventos da transmissão serial.
11)Explique o significado dos termos : Interrupção Vetorada, Mascaramento de Interrupção, Ordem de Prioridade e Modo de Acionamento. De que forma estes processos ocorrem no 8051 ?
Fontes de Interrupções – Agentes que produzem as Interrupções;
Vetorização – Cada interrupção tem um vetor (endereço) onde começa a sub-rotina de atendimento;
Mascaramento – Cada interrupção pode ser habilitada (reconhecida) ou não, em um dado momento;
Priorização – As interrupções podem ter um grau de prioridade de forma a serem “escalonáveis”
Modo de acionamento – Maneira como as interrupções são acionadas
Explique de que forma ficarão “programadas” as Interrupções Externas de um 8051, após a seguinte sequencia de instruções :
mov IE,#85h
mov TCON,#04h
mov IP,#04h
13) Elabore um programa que : 
Permaneça aguardando e, apenas, atenda à Interrupção INT0.
Quando ela ocorrer, deverá ser iniciada uma contagem, no Acumulador, crescente e ininterrupta (à prova de Interrupções ) de 0 a 20. Para cada número da contagem, deverá haver um “retardo” de 1 segundo, aproximadamente.
Se durante o processo de contagem, ocorrer alguma solicitação de Interrupção, ela não deverá ser atendida, posteriormente.
No final, o programa passa a aguardar e só irá atender à solicitação de Interrupção INT1.
Quando ela vier a ocorrer, no Acumulador, deverá ser iniciada uma contagem decrescente e ininterrupta ( à prova de Interrupções ) de volta a 0. Para cada número da contagem, deverá haver um “retardo” de 1 segundo, aproximadamente.
No final, retorna-se ao ítem “a”.
14)No esquema abaixo, temos uma porta com uma “trava eletrônica”. Para que a porta seja “destravada”, é necessária a digitação de uma senha. Elabore um programa que
 
por estas três teclas, utilize o programa prg_10(Leitura_teclado).asm).
15) Esta questão trata-se de um aprimoramento do projeto da questão 9 , anterior. No caso, considere o acréscimo de um Sensor de Temperatura (ST) no Motor, o qual, em caso de superaquecimento do mesmo, este sensor, muda o seu estado de “0” para “1”. 
Modifique o programa anterior, utilizando Interrupção, de tal forma que, em caso de superaquecimento do Motor, tenhamos a seguinte sequencia de ações :
A paralisação do atual processo de produção, com o imediato desligamento do Motor e fechamento das eletro-válvulas A e B.
O escoamento total da produto atual que se encontra na Caldeira, com a abertura da eletro-válvula C por um período de 20 segundos.
Apenas, quando o sensor ST voltar para “0”, significando que o Motor não mais se encontra superaquecido, o processo de produção deverá ser re-iniciado. 
Obs. : O Sensor ST deverá ativar um das Interrupções Externa do 8051.
implemente esta função. Considere que a senha seja AX e que, em seguida, a tecla # tenha que ser pressionada. Considere que as saídas sejam 2 LEDs. Um Vermelho que permanece aceso, enquanto a porta estiver fechada e um outro Verde que deverá acender quando a porta for destravada. (Para descobrir os códigos gerados
_1395867663/ole-[42, 4D, 56, 0D, 09, 00, 00, 00]
_1395906140/ole-[42, 4D, CE, D0, 0A, 00, 00, 00]
_1381259546/ole-[42, 4D, D6, 22, 01, 00, 00, 00]

Continue navegando