Sistemas Embarcados - Programação de E / S
No 8051, as operações de E / S são feitas usando quatro portas e 40 pinos. O diagrama de pinos a seguir mostra os detalhes dos 40 pinos. A porta de operação de E / S reserva 32 pinos, onde cada porta possui 8 pinos. Os outros 8 pinos são designados como V cc , GND, XTAL1, XTAL2, RST, EA (barra), ALE / PROG (barra) e PSEN (barra).
É um PDIP de 40 pinos (pacote em linha dupla de plástico)
Note- Em um pacote DIP, você pode reconhecer o primeiro pino e o último pino pelo corte no meio do IC. O primeiro pino está do lado esquerdo desta marca corte eo último pino (ou seja, a 40 ª pin neste caso) está à direita da marca de corte.
Portas de E / S e suas funções
As quatro portas P0, P1, P2 e P3, cada uma usa 8 pinos, tornando-as portas de 8 bits. Após o RESET, todas as portas são configuradas como entradas, prontas para serem utilizadas como portas de entrada. Quando o primeiro 0 é gravado em uma porta, ele se torna uma saída. Para reconfigurá-lo como uma entrada, um 1 deve ser enviado a uma porta.
Porta 0 (pino nº 32 - pino nº 39)
Possui 8 pinos (32 a 39). Ele pode ser usado para entrada ou saída. Ao contrário das portas P1, P2 e P3, normalmente conectamos resistores pull-up de P0 a 10K-ohm para usá-los como uma porta de entrada ou saída sendo um dreno aberto.
Também é designado como AD0-AD7, permitindo que seja usado como endereço e dados. No caso do 8031 (ou seja, chip sem ROM), quando precisarmos acessar o ROM externo, P0 será usado para o endereço e o barramento de dados. ALE (Pino nº 31) indica se P0 possui endereço ou dados. Quando ALE = 0, fornece os dados D0-D7, mas quando ALE = 1, possui o endereço A0-A7. Caso nenhuma conexão de memória externa esteja disponível, P0 deve ser conectado externamente a um resistor pull-up de 10K-ohm.
MOV A,#0FFH ;(comments: A=FFH(Hexadecimal i.e. A=1111 1111)
MOV P0,A ;(Port0 have 1's on every pin so that it works as Input)
Porta 1 (pino 1 a 8)
É uma porta de 8 bits (pino 1 a 8) e pode ser usada como entrada ou saída. Não requer resistores pull-up porque eles já estão conectados internamente. Após a reinicialização, a porta 1 é configurada como uma porta de entrada. O código a seguir pode ser usado para enviar valores alternados de 55H e AAH para a porta 1.
;Toggle all bits of continuously
MOV A,#55
BACK:
MOV P2,A
ACALL DELAY
CPL A ;complement(invert) reg. A
SJMP BACK
Se a porta 1 estiver configurada para ser usada como uma porta de saída, então para usá-la como uma porta de entrada novamente, programe-a escrevendo 1 para todos os seus bits como no código a seguir.
;Toggle all bits of continuously
MOV A ,#0FFH ;A = FF hex
MOV P1,A ;Make P1 an input port
MOV A,P1 ;get data from P1
MOV R7,A ;save it in Reg R7
ACALL DELAY ;wait
MOV A,P1 ;get another data from P1
MOV R6,A ;save it in R6
ACALL DELAY ;wait
MOV A,P1 ;get another data from P1
MOV R5,A ;save it in R5
Porta 2 (pinos 21 a 28)
A porta 2 ocupa um total de 8 pinos (pinos 21 a 28) e pode ser usada para operações de entrada e saída. Assim como P1 (Porta 1), P2 também não requer resistores pull-up externos porque eles já estão conectados internamente. Deve ser usado junto com P0 para fornecer o endereço de 16 bits para a memória externa. Portanto, também é designado como (A0 – A7), conforme mostrado no diagrama de pinos. Quando o 8051 está conectado a uma memória externa, ele fornece um caminho para os 8 bits superiores do endereço de 16 bits e não pode ser usado como E / S. Após a reinicialização, a porta 2 é configurada como uma porta de entrada. O código a seguir pode ser usado para enviar valores alternados de 55H e AAH para a porta 2.
;Toggle all bits of continuously
MOV A,#55
BACK:
MOV P2,A
ACALL DELAY
CPL A ; complement(invert) reg. A
SJMP BACK
Se a porta 2 estiver configurada para ser usada como uma porta de saída, então para usá-la como uma porta de entrada novamente, programe-a escrevendo 1 em todos os seus bits como no código a seguir.
;Get a byte from P2 and send it to P1
MOV A,#0FFH ;A = FF hex
MOV P2,A ;make P2 an input port
BACK:
MOV A,P2 ;get data from P2
MOV P1,A ;send it to Port 1
SJMP BACK ;keep doing that
Porta 3 (pinos 10 a 17)
Também é de 8 bits e pode ser usado como Entrada / Saída. Esta porta fornece alguns sinais extremamente importantes. P3.0 e P3.1 são RxD (receptor) e TxD (transmissor) respectivamente e são usados coletivamente para comunicação serial. Os pinos P3.2 e P3.3 são usados para interrupções externas. P3.4 e P3.5 são usados para os temporizadores T0 e T1 respectivamente. P3.6 e P3.7 são pinos de gravação (WR) e leitura (RD). Estes são pinos baixos ativos, significa que eles estarão ativos quando 0 for dado a eles e estes são usados para fornecer operações de leitura e gravação para ROM externa em sistemas baseados em 8031.
Bit P3 | Função | PIN |
---|---|---|
P3.0 | RxD | 10 |
P3.1 < | TxD | 11 |
P3.2 < | Complemento de INT0 | 12 |
P3.3 < | INT1 | 13 |
P3.4 < | T0 | 14 |
P3.5 < | T1 | 15 |
P3.6 < | WR | 16 |
P3.7 < | Complemento de RD | 17 |
Função dupla da porta 0 e porta 2
Dual role of Port 0- A porta 0 também é designada como AD0 – AD7, pois pode ser usada para tratamento de dados e endereço. Ao conectar um 8051 à memória externa, a porta 0 pode fornecer endereço e dados. O microcontrolador 8051 multiplexa a entrada como endereço ou dados para salvar os pinos.
Dual role of Port 2- Além de funcionar como E / S, a porta P2 também é usada para fornecer barramento de endereço de 16 bits para memória externa junto com a porta 0. A porta P2 também é designada como (A8– A15), enquanto a porta 0 fornece os 8 bits inferiores via A0 – A7. Em outras palavras, podemos dizer que quando um 8051 é conectado a uma memória externa (ROM) que pode ter no máximo até 64KB e isso é possível pelo barramento de endereço de 16 bits, pois sabemos 216 = 64KB. A Porta2 é usada para os 8 bits superiores do endereço de 16 bits e não pode ser usada para E / S e é assim que qualquer código de programa de ROM externa é endereçado.
Conexão de Hardware de Pinos
Vcc - O pino 40 fornece alimentação para o chip e é +5 V.
Gnd - O pino 20 fornece aterramento para a referência.
XTAL1, XTAL2 (Pin no 18 & Pin no 19)- 8051 tem oscilador no chip, mas requer relógio externo para executá-lo. Um cristal de quartzo é conectado entre os pinos XTAL1 e XTAL2 do chip. Este cristal também precisa de dois capacitores de 30pF para gerar um sinal de frequência desejada. Um lado de cada capacitor é conectado ao aterramento. O 8051 IC está disponível em várias velocidades e tudo depende desse cristal de quartzo, por exemplo, um microcontrolador de 20 MHz requer um cristal com frequência não superior a 20 MHz.
RST (Pin No. 9)- É um pino de entrada e um pino alto ativo. Ao aplicar um pulso alto neste pino, ou seja, 1, o microcontrolador irá reiniciar e encerrar todas as atividades. Este processo é conhecido comoPower-On Reset. Ativar uma reinicialização de inicialização fará com que todos os valores no registro sejam perdidos. Ele definirá um contador de programa para todos os 0s. Para garantir uma entrada válida de Reset, o pulso alto deve ser alto por um mínimo de dois ciclos da máquina antes que seja permitido ir para baixo, o que depende do valor do capacitor e da taxa na qual ele carrega. (Machine Cycle é a quantidade mínima de frequência que uma única instrução requer para execução).
EA or External Access (Pin No. 31)- É um pino de entrada. Este pino é um pino baixo ativo; ao aplicar um pulso baixo, ele é ativado. No caso do microcontrolador (8051/52) ter ROM on-chip, o pino EA (barra) é conectado a V cc . Mas em um microcontrolador 8031 que não possui uma ROM no chip, o código é armazenado em uma ROM externa e, em seguida, buscado pelo microcontrolador. Neste caso, devemos conectar o (pino nº 31) EA ao Gnd para indicar que o código do programa está armazenado externamente.
PSEN or Program store Enable (Pin No 29)- Este também é um pino baixo ativo, ou seja, ele é ativado após a aplicação de um pulso baixo. É um pino de saída e usado junto com o pino EA em sistemas baseados em 8031 (ou seja, ROMLESS) para permitir o armazenamento de código de programa em ROM externa.
ALE or (Address Latch Enable)- Este é um pino de saída e está ativo alto. É especialmente usado para 8031 IC para conectá-lo à memória externa. Ele pode ser usado para decidir se os pinos P0 serão usados como barramento de endereços ou barramento de dados. Quando ALE = 1, os pinos P0 funcionam como barramento de dados e quando ALE = 0, os pinos P0 atuam como barramento de endereços.
Portas de E / S e endereçamento de bits
É um recurso mais amplamente usado do 8051 ao escrever código para o 8051. Às vezes, precisamos acessar apenas 1 ou 2 bits da porta em vez de todos os 8 bits. 8051 fornece a capacidade de acessar bits individuais das portas.
Ao acessar uma porta de maneira de bit único, usamos a sintaxe "SETB X. Y", em que X é o número da porta (0 a 3) e Y é um número de bit (0 a 7) para bits de dados D0-D7 onde D0 é o LSB e D7 é o MSB. Por exemplo, "SETB P1.5" define o bit 5 alto da porta 1.
O código a seguir mostra como podemos alternar o bit P1.2 continuamente.
AGAIN:
SETB P1.2
ACALL DELAY
CLR P1.2
ACALL DELAY
SJMP AGAIN
Instruções de bit único
Instruções | Função |
---|---|
Bit SETB | Defina o bit (bit = 1) |
Bit CLR | limpar o bit (bit = 0) |
Bit CPL | complemente o bit (bit = NÃO bit) |
Bit JB, alvo | pula para o alvo se bit = 1 (pula se bit) |
Bit JNB, alvo | pula para o alvo se bit = 0 (pula se nenhum bit) |
Bit JBC, alvo | saltar para o alvo se bit = 1, limpar bit (saltar se bit, depois limpar) |