Você está na página 1de 40

Aplicações:

Conversão de Códigos e Motor de Passo

•Prof. Adilson Gonzaga


Aplicação 1

Conversão de Código ASCII para Hexadecimal

• Alguns periféricos, tais como Teclados Alfa-numéricos, Monitores de


Vídeo, Displays de Cristal Líquido, comunicam-se usando o código
ASCII (American Standard Code for Information Interchange)

• Como toda a operação (lógica ou aritmética) realizada pelo


Microcontrolador é feita em Binário, e nós utilizamos a representação
Hexadecimal para facilidade de interpretação, se for usado um
teclado ASCII para entrada dos dados deve-se proceder à conversão
de ASCII para Hexadecimal.

•2

•Prof. Adilson Gonzaga


• Supondo, por exemplo, que se queira inserir números Hexadecimais
através do Teclado do PC conectado via RS232 com um
Microcontrolador 8051 e utilizar esses dados para deslocar um Motor
de passo de um número fixo de passos.

• Valores Hexadecimais possíveis: 00 a FF

• O Teclado gera códigos ASCII para todos


os números, letras, sinais gráficos e
comandos, de acordo com a Tabela ASCII.
•3

•Prof. Adilson Gonzaga


Teclado ASCII

Se o usuário quiser inserir em uma aplicação qualquer um


código Hexadecimal (um byte), via Teclado ASCII.

Por exemplo 3F

• 3F (00111111)  Digita 3 Teclado gera 33h (00110011), ASCII do dígito 3


 Digita F Teclado gera 46h (01000110), ASCII do dígito F

Como transformar os dois códigos digitados (33h e 46h) em apenas um byte


Hexadecimal (3F) que é o correspondente ao valor digitado pelo usuário?
•4

•Prof. Adilson Gonzaga


• Duas possibilidades:
1. Ou o dígito é um número ( 0 a 9 )
2. Ou o dígito é uma letra (A a F)

Número
0 1 2 3 4 5 6 7 8 9
| | | | | | | | | |
30h 31h 32h 33h 34h 35h 36h 37h 38h 39h

Letra
A B C D E F
| | | | | |
41h 42h 43h 44h 45h 46h
•5

•Prof. Adilson Gonzaga


Digitado no Teclado
3 F

Códigos ASCII Gerados 3F


33 46 33 46

• Logo,
33h  para ser decodificado para seu valor 3h  33h – 30h = 3h

• e,
46h  para ser decodificado para seu valor Fh  46h – 37h = Fh

Ou seja, se o valor digitado for um número basta subtrair 30h do


código ASCII e, se o valor digitado for uma letra basta subtrair 37h do
código ASCII
•6

•Prof. Adilson Gonzaga


• O primeiro dígito é o MSB e seu resultado hexadecimal gerado é 03h
• O segundo dígito é o LSB e seu resultado hexadecimal gerado é 0Fh

• Logo, no exemplo, para montar o caractere (MSB LSB) deve-se


rotacionar o MSB de 4 posições e fundir (OU lógico) com o LSB.

03  30 MSB 00110000
OR
0F LSB 00001111
3F 00111111

•7

•Prof. Adilson Gonzaga


Conversão ASCII-HEXA de um dígito

Sub--rotina
Sub CONV

• O dígito ASCII entra


pelo Acumulador

•8

•Prof. Adilson Gonzaga


Conversão ASCII-HEXA de dois dígitos

• Converte o MSB
• Troca os nibles
• Converte o LSB
• Funde (OR) os dois bytes
gerando apenas um hexadecimal

•9

•Prof. Adilson Gonzaga


•10

•Prof. Adilson Gonzaga


•11

•Prof. Adilson Gonzaga


Aplicação 2

Conversão de Hexadecimal para Código ASCII

• Como toda operação (lógica ou aritmética) realizada pelo


Microcontrolador é feita em Binário, e nós utilizamos a representação
Hexadecimal para facilidade de interpretação, se for usado um
Display ou um Monitor de Vídeo ASCII para saída dos dados deve-se
proceder à conversão de Hexadecimal para ASCII.

•12

•Prof. Adilson Gonzaga


Microcontrolador

ASCII
33 46

Hexadecimal 3F
(00111111)

Conversor A/D
•13

•Prof. Adilson Gonzaga


•Hexadecimais possíveis (8 bits): de 00 a FF

Se for um dígito numérico 0 ---- 9  deve-se somar 30h para


se obter o ASCII equivalente entre 30h --- 39h

Se for uma letra A ---- F  deve-se somar 37h para se obter


o ASCII equivalente entre 41h --- 46h

Como não existem valores hexadecimais impossíveis de


serem representados em ASCII, não é necessário adicionar
nenhum filtro.

•14

•Prof. Adilson Gonzaga


Conversão HEXA-ASCII de um dígito

Sub--rotina
Sub CONV2

•15

•Prof. Adilson Gonzaga


Exemplo

• O conteúdo do Acumulador contém o código 3F Hexadecimal


(8 Bits) que deverá ser enviado para o monitor de vídeo em
ASCII, para ser visualizado.

• Logo,
3F  03 + 30h  33h
0F + 37h  46h

• Deve-se, então, dividir o byte em dois com o valor dos


dois nibles posicionados na parte menos significativa de
cada um, zerando-se o nible mais significativo de cada
byte.
•16

•Prof. Adilson Gonzaga


Conversão HEXA-ASCII de dois dígitos

O valor em Hexadecimal entra


pelo Acumulador.  Ex: A =
3Fh

Os valores dos dois dígitos em


ASCII saem em:

R0 = LSB  Ex: R0 = 46h


A = MSB  Ex: A = 33h

•17

•Prof. Adilson Gonzaga


•18

•Prof. Adilson Gonzaga


•19

•Prof. Adilson Gonzaga


Aplicação 3

Conversão de
Hexadecimal para BCD

BCD – Decimal Codificado


em Binário

Neste exemplo será utilizado


sempre o BCD Packed (ou BCD
8421), cuja representação de 2
dígitos BCD é realizada com
apenas 1 Byte.

•20

•Prof. Adilson Gonzaga


Conversão de Hexadecimal para BCD
Decimal Hexa

00 00
01 01
02 02
03 03
04 04
05 05
06 06
07 07
08 08

0 0 0 0 1 0 0 1 09 09 0 0 0 0 1 0 0 1
10 0A
0 0 0 1 0 0 0 0
11 0B
12 0C
•Logo, se o número Hexa 13 0D
estiver entre 0A e 13, 14 0E
soma-se 1x06 15 0F
0 0 0 1 0 0 0 0
16 10
•21

•Prof. Adilson Gonzaga


Decimal Hexa •Logo, se o número Hexa
estiver entre 0A e 13, soma-
17 11
• Se o número hexa se 1x06
18 12
estiver entre 14 e 1D 19 13
11+06=17
soma-se 2x06 20 14
21 15 12+06=18
14+06=1A+06=20 22 16
13+06=19
23 17
15+06=1B+06=21
24 18
16+06=1C+06=22 25 19

17+06=1D+06=23 26 1A • Se o número estiver


27 1B entre 1E e 27 soma-se
18+06=1E+06=24 28 1C
3x06
29 1D
19+06=1F+06=25
30 1E 1E+06+06+06=30
1A+06=20+06=26 31 1F
1F+06+06+06=31
32 20
1B+06=21+06=27
33 21 20+06+06+06=32
1C+06=22+06=28 34 22 21+06+06+06=33
35 23
1D+06=23+06=29 22+06+06+06=34
36 24
•22

•Prof. Adilson Gonzaga


•O algoritmo pode ficar bastante complexo seguindo este raciocínio.

• O 8051 possui uma instrução que faz o Ajuste Decimal do Acumulador

DA A

• Esta instrução somente deve ser utilizada


quando a operação realizada anteriormente foi
com números BCD.
Exemplo:
19 + 1 = 1A  DA A  20

•A instrução não opera corretamente onde isto não


acontece.
Exemplo:
1F + 1 = 20  DA A  26 •23

•Prof. Adilson Gonzaga


Algoritmos para conversão Hexa-BCD

Algoritmo_1:

1. Entrar com o número Hexadecimal a ser


convertido em R0
2. Inicializar um contador BCD em Zero
3. Decrementar R0 até zero e
simultaneamente incrementar o
contador BCD
4. Quando o valor do número Hexadecimal
chegar em zero, o Acumulador terá
realizado o mesmo número de
contagens em BCD

O maior número hexadecimal de dois


dígitos que pode ser convertido é o :
63h = 99 em BCD
•24

•Prof. Adilson Gonzaga


Este exemplo não testa se o número Hexadecimal a
ser convertido é menor que 63h, o que deve ser feito
externamente no programa principal.

•25

•Prof. Adilson Gonzaga


Algoritmo_2:

1. Dividir o número Hexadecimal (8 BITS), a ser


convertido, por 10 (0Ah)
2. O resultado da divisão gera um número BCD
unpacked, com o MSB no Acumulador e o LSB no
registrador B
3. Transformar o BCD unpacked para BCD packed
(8421)

09 09
0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1

99 1 0 0 1 1 0 0 1

•26

•Prof. Adilson Gonzaga


Exemplo: Programa que gera um Contador BCD na Porta
P1, de 00 a 99, continuamente retornando a zero.

•27

•Prof. Adilson Gonzaga


Aplicação 4 MOTOR DE PASSO
“Step Motor”

Define-se MOTOR DE PASSO como um


“atuador incremental eletromagnético”.

•28

•Prof. Adilson Gonzaga


Definição prática:

O Motor de Passo converte “pulsos digitais de entrada” em


movimentos angulares em seu eixo.

•29

•Prof. Adilson Gonzaga


Características importantes

• Deslocamento angular diretamente proporcional ao


número de pulsos de entrada.

• Erro angular por passo pequeno ( 5% do passo) e


não acumulativo.

• Possibilita trabalho em “malha aberta”.

• Capacidade de trabalho em baixíssimas


freqüências.
• Retenção de posição sem uso de freio, etc...

•30

•Prof. Adilson Gonzaga


CURVA CARACTERÍSTICA

•31

•Prof. Adilson Gonzaga


TEORIA DE OPERAÇÃO

•32

•Prof. Adilson Gonzaga


Circuito de Controle
UNIPOLAR simplificado

•33

•Prof. Adilson Gonzaga


Comutação nas Fases
(excitação dupla)

•34

•Prof. Adilson Gonzaga


Sistema Típico de Controle com
Motor de Passo

•35

•Prof. Adilson Gonzaga


Circuito Acionador (Indexer + Driver) de Motor de
Passo (excitação dupla)

•36

•Prof. Adilson Gonzaga


Exemplo de Conexão de um Microcontrolador
89S52 com um Driver/Indexador de Motor de Passo

Clock

Direção

Inibe

•37

•Prof. Adilson Gonzaga


O Clock, na descida de borda, armazena a Direção (1 ou 0)
que o motor girará na próxima subida de borda.

Clock

• Direção = 0  Horário
Direção
• Direção = 1  Anti-horário
Inibe

• Inibe = 1  Operação Normal


• Inibe = 0  Pára o Motor de Passo

• Frequência do clock (Hz) = Passos por Segundo (pps) no Motor

•38

•Prof. Adilson Gonzaga


Exemplo de Comando de um pulso em um Motor de Passo
(Usando subrotina de Atraso).

•39

•Prof. Adilson Gonzaga


Comando de Motor de Passo usando Timer e Interrupção

•40

•Prof. Adilson Gonzaga

Você também pode gostar