1) - Revisão da Arquitetura do Microcontrolador 8051

Propaganda
www.mackenzie.com.br
APOSTILA
MICROPROCESSADORES
APLICAÇÃO
SEGUNDO SEMESTRE 2004
PROF. IVAIR REIS N. ABREU
www.ivair.com.br
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
ÍNDICE
1) - REVISÃO DA ARQUITETURA DO MICROCONTROLADOR 8051
7
1.1) - Família de Microcontroladores INTEL MCS-51:
7
1.2) - Arquitetura do Microntrolador 8051:
1.2.1) - Pinagem:
1.2.2) A memória RAM interna:
7
8
9
1.3) - Códigos de operação do microcontrolador 8051:
1.3.1) - Instruções de transferência de informação:
1.3.2) - Instruções Aritméticas:
1.3.3) - Instruções Lógicas:
1.3.4) - Instruções de Transferência de Controle:
1.3.5) - Instruções Booleanas:
10
10
11
12
13
14
1.4) – Projeto Básico de Controle:
15
1.5) – Exercício:
15
2) – LINGUAGEM ASSEMBLER ESTRUTURADA:
17
2.1) - Estrutura básica da Linguagem Assembler:
17
2.2) - Macros em Assembler:
17
2.3) - Técnicas para programação Assembler:
2.3.1) - Labels e utilização de EQUATES:
2.3.2) - Comentários:
2.3.3) - Salvamento de Registradores na Pilha:
2.3.4) - Utilização de Subrotinas:
2.3.5) - Organização do Programa:
2.3.6) - Erros mais comuns ocorridos na programação em Linguagem Assembler:
18
18
19
21
21
22
22
3) – INTERFACE PARA DISPLAY DE CRISTAL LÍQUIDO (L.C.D.):
3.1) - Display LCD programável:
3.2) – SISTEMA MÍNIMO TÍPICO:
24
24
24
3.2.1) – Sistema com o Display com endereçamento de memória:
25
3.2.2) – Sistema com Display controlado por Ports (sem memória externa):
25
3.3) – Rotinas Básicas:
26
3.3.1) – Rotina de Inicialização (CONFIG:)
26
3.3.2) – Rotina de Escrita na primeira ou segunda linha de um display a partir de uma tabela (ESCDSP:):26
3.3) – Exercícios:
27
2
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
4) – SISTEMA DE INTERRUPÇÃO, TEMPORIZAÇÃO E TECLADO MATRICIAL:31
4.1) - Sistema de Interrupção:
31
4.2) - Sistema de temporização:
31
4.3) – Rotina de Inicialização (CONFIG:)
32
4.4) – Exercícios de Interrupção / Temporização:
33
4.5) - Sistema de varredura de Teclado
33
4.6) – Rotinas Básicas:
4.6.1) – Rotina de Leitura de um teclado na rotina timer0 (LETEC:)
34
34
4.7) – Exercícios:
34
5) - SISTEMA DE COMUNICAÇÃO SERIAL 8051:
35
5.1) - Introdução e conceitos básicos:
5.1.1) - Comunicação Assíncrona:
5.1.2) - Comunicação Síncrona:
5.1.3) - Interface padrão RS-232:
5.1.4) - Sinais típicos de uma interface padrão serial:
35
35
35
36
36
5.2) – UART 8051 - Funcionamento básico:
37
5.3) – Sistema Mínimo RS232:
40
5.3) – Rotinas Básicas:
5.3.1) – Rotina de Inicialização (CONFIG:)
5.3.2) – Rotina de Transmissão de um byte (TX1:)
5.3.3) – Rotina de Transmissão de uma String (TXSERIAL:)
5.3.4) – Rotina de Recepção Serial (RXSERIAL:)
40
40
40
40
41
5.4) – Exercícios:
42
6) – CONVERSÃO ANALÓGICO / DIGITAL:
43
6.1 ) - Introdução:
43
6.2) – Conversor A/D ADC 0808
44
6.3) - Exercícios
44
6.3) – Rotinas Básicas:
6.3.1) – Rotina de Leitura (LEADC:)
45
45
6.4) – Exercícios:
45
7) – PROJETOS DE CONTROLE:
46
3
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
8.1) - Tipo de variáveis:
47
8.2) - Declaração de Variáveis:
47
8.3) - Operadores:
8.3.1) - Operadores Aritméticos:
8.3.2 ) - Operadores Lógicos e Relacionais:
8.3.3) - Operadores Binários: Alteram bits em variáveis.
8.3.4) - Operadores de Matrizes (Arrays):
47
47
48
48
48
8.4) - Diretivas da linguagem C:
48
8.5) - Funções e declarações especiais:
48
8.6) - Formato básico de um programa em C:
49
8.7) - Tipos de Estruturas em C:
8.7.1) - Condicional IF:
8.7.2) - Condicional FOR
8.7.3) - Condicional WHILE
8.7.4) - Condicional DO / WHILE
8.7.5) - Condicional SWITCH
49
49
50
51
51
51
8.8) - Exemplo de utilização (exemplo 1 - pg 230 - Vidal)
52
8.9) - Utilizando o compilador uVision51 (Keil):
53
9) - PROCESSAMENTO DIGITAL DE SINAL
55
9.1) INTRODUÇÃO AO PROCESSAMENTO DIGITAL DE SINAIS
55
9.2) - Características da arquitetura de um circuito integrado dedicado a DSP:
56
9.3) - Conclusão:
60
ANEXO I
SEMINÁRIO DE MICROPROCESSADORES
61
61
Revisão: 08/08/2004
4
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
PLANEJAMENTO DIDÁTICO PEDAGÓGICO DA DISCIPLINA
MICROPROCESSADORES APLICAÇÃO - SEGUNDO SEMESTRE 2004
CURSO SUPERIOR DE TECNOLOGIA ELÉTRICA
UNIDADE: FCEBI
DISCIPLINA: Microprocessadores Aplicação
PROFESSOR: Ivair Reis Neves Abreu
Departamento: Eletrônica
ETAPA: 6 CARGA HORÁRIA: 4 aulas teóricas SEMESTRE LETIVO: segundo
OBJETIVOS: o aluno deverá adquirir os conceitos básicos de sistemas com
microcontroladores e processadores digitais de sinal ao nível de projeto físico e
programação em linguagem de montagem (e máquina) para teste do sistema elaborado.
EMENTA:
- Revisão de Conceitos de Microprocessadores (Arquitetura e Linguagem
Assembler) e Microcontrolador (família 8051) e periféricos.
- Linguagem estruturada e técnicas de programação com microcontroladores.
Linguagem C aplicada a microcontroladores.
- Desenvolvimento de sistemas com microcontroladores: interface paralela
centronics, controlador de grandezas analógicas (pressão, temperatura, etc.), coletor de
dados e controle de circuitos de potência com PWM.
- Introdução a Processamento Digital de Sinais: arquitetura do TMS320, conjunto
de instruções e projeto de filtros digitais.
METODOLOGIA
Aula expositiva com auxílio de recursos audiovisuais (principalmente retroprojetor).
O aluno deverá constantemente participar através de aplicação de exercícios e projetos.
Uma apostila envolvendo todos os pontos abordados servirá de apoio didático durante as
exposições. Trabalhos levarão o aluno a refletir sobre pontos avançados não abordados
diretamente na sala de aula.
CRITÉRIO DE AVALIAÇÃO
((P1 X 0,7) + (LAB X 0,2) + (T1 X 0,1)) x 0,5 + (P2 X 0,5)
P1 = primeira prova semestral -> DIA 08/08/2004
P2 = segunda prova semestral. -> SECRETÁRIA
T1 = seminário
Lab = laboratório
Média >= 7 -> aluno aprovado
5,5 <= média<6.9 -> aluno aprovado se frequencia > 80 %
5
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
BIBLIOGRAFIA
-
APLICAÇÕES PRÁTICAS DO MICRONTROLADOR 8051. Vidal Pereira da Silva Jr. - Érica
DATABOOK EMBEDED APLICATIONS 8051. Intel.
THE 8051 FAMILY OF MICROCONTROLLERS. Richard H. Barnett. Prentice Hall.
THE 8051 MICROCONTROLLER. I. Schott Mackenzie. Prentice Hall.
Using the MCS-51 Microcontroller 8051. HANG, Han-Way, 2000. Ed. Oxford University
C and the 8051. SCHULTZ, Thomas, 2001. Ed. Prentice Hall
APOSTILA MICROPROCESSADORES APLICAÇÕES. Ivair Reis Neves Abreu
Internet:
www.microcontroller.com
www.8052.com
www.vidal.com.br
www.icmaster.com
www.microchip.com
www.ti.com
www.zilog.com
www.motorola.com.
www.cypress.com
6
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
1) - Revisão da Arquitetura do Microcontrolador 8051
1.1) - Família de Microcontroladores INTEL MCS-51:
Os principais recursos destes microcontroladores são:
- Memória de Programa de 4 kbytes: ROM (8051), EPROM
(8751). Versão "romless" (8031).
- 256 bytes de RAM (registradores)
- 4 ports (latchs bidirecionais programáveis) com 8
bits.
- 2 temporizadores ("timers") de 16 bits
- 1 unidade serial assíncrona (UART) "full-duplex".
- 5 interrupções (2 externas, 2 "timers" e 1 "UART").
- Oscilador interno para geração de temporização.
- Acesso a até 64 Kbytes de RAM externa (dados) e 64
Kbytes de EPROM (programa) externa através do controle de 2
sinais de leitura (PSEN -> área de programa - RD -> área de
dados). Esta estrutura é conhecida como 'arquitetura
HARVARD'.
- 256 instruções otimizadas para controle.
1.2) - Arquitetura do Microntrolador 8051:
7
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
Figura 1
1.2.1) - Pinagem:
- Vcc,Gnd: alimentação única de 5 V.
- X1-X2: conectada ao cristal externo (12 Mhz típico).
O sistema de temporização interno divide a frequência do
cristal por 12, proporcionando um ciclo típico de máquina de
1 mseg.
- RST: entrada de inicialização ativa em nível alto
__
- EA ("external acess"): em nível baixo, desabita os 4
kbytes de memória de programa interna. Toda a busca de
instrução é realizada externamente (através de uma EPROM).
Em nível alto habilita a memória interna.
- ALE ("Address Latch Enable"): na utilização de
memória de programa externa, este pino tem a função de
indicar a presença de endereço (em nível alto) ou dado (em
nível baixo) no barramento de endereço/dado multiplexado
(AD0-AD7).
8
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
____
- PSEN ("Program Strobe Enable"): em nível baixo indica
leitura de uma instrução da área de programa. Normalmente
ligado ao pino RD da memória de programa.
- Port P0 (P0.0-P0.7): seus 8 pinos podem ter dupla
função. Se não houver memória externa, são utilizados como
sinais de entrada/saída do "latch" bidirecional P0. Se
houver memória externa, atua como 8 sinais multiplexados de
dados/endereço (AD0-AD7). O sinal de ALE indica a condição
deste barramento.
- Port P1 (P1.0-P1.7):
"latch" bidirecional P1.
8 pinos de entrada/saída do
- Port P2 (P2.0-P2.7): seus 8 pinos também podem ter
dupla função. Se não houver memória externa com mais de 256
endereços, são utilizados como sinais de entrada/saída do
"latch" bidirecional P2. Se houver necessidade de
endereçamento maior que 8 bits, atua como 8 sinais de
endereço A8-A15.
- Port P3 (P3.0-P3.7):
dupla função:
-
novamente, seus 8 sinais tem
RxD (recepção serial) / port P3.0
TxD (transmissão serial) / port P3.1
INT0 (interrupção 0) / port P3.2
INT1 (interrupção 1) / port P3.3
T0 (entrada Timer 0) / port P3.4
T1 (entrada Timer 1) / port P3.5
WR (sinal de escrita da RAM externa)/port
P3.6
- P3.7: RD (sinal de leitura da RAM externa)/port
P3.7
1.2.2) -
P3.0:
P3.1:
P3.2:
P3.3:
P3.4:
P3.5:
P3.6:
A memória RAM interna:
- Área de Registradores R0-R7 (00-1FH): o 8051 possui 4
bancos de registradores selecionados através dos bits RS1 e
RS0 do registrador PSW. Normalmente estes registradores
armazenam endereços da área de rascunho (modo de
endereçamento indireto).
- Área Booleana (binária) (20H-2FH): 16 bytes
endereçados bit a bit (totalizando 128 bits). Pode-se
acessar cada bit individualmente indicando uma determinada
condição binária (por exemplo: a tecla A de um teclado foi
acionada). Estes bits são acessados pelas instruções
booleanas do 8051.
- Área de Rascunho (30H-7FH):
se localiza a pilha do sistema.
memória de uso geral onde
9
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
- Área de Registradores Especiais (SFR) (80H-FFH): área
onde se localiza todos os registradores com função especial.
O número destes registradores varia de acordo com as funções
disponíveis dentro do processador. Os registradores
especiais mais comuns são:
- PO (80H): port P0.
- P1 (90H).
- P2 (A0H).
- P3 (B0H).
- ACC (E0H): acumulador.
- B (F0H)
- PSW (D0H): registrador de status
- SP (81H): apontador de pilha
- DPL (82H): byte menos significativo do
registrador DPTR.
- DPH (83H): byte mais significativo do
registrador DPTR.
- PCON (87H): registrador de controle de consumo
do 8051.
- IE (A8H): registrador de habilitação do sistema
de interrupções.
- IP (B8H): registrador indicador de prioridade do
sistema de interrupção.
- TMOD (89H): registrador de modo dos timers.
- TCON (88H): registrador de controle do timer 1
- T2CON (C8H): registrador de controle do timer 2.
- TL0 (8AH): byte inferior do timer 1.
- TH0 (8CH): byte superior do timer 1.
- TL1 (8DH): byte inferior do timer 2.
- TH1 (8BH): byte superior do timer 2.
1.3) - Códigos de operação do microcontrolador 8051:
1.3.1) - Instruções de transferência de informação:
Conjunto de instruções com o objetivo de transferir ou
carregar dados da área de memória/registradores. Normalmente
são instruções voltadas para a área de RAM interna, havendo
apenas 4 instruções que envolvem acesso a RAM externa.
- MOV
destino,fonte
fonte para o destino
-
MOV
MOV
MOV
MOV
;transfere (copiando) o dado da
A,Rn
A,direto
A,@Ri
A,#dado
Ex.: MOV A,R7 ; copia o dado contido no registrador R7 para
o Acumulador
10
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
MOV
A,40h ; copia o dado do endereço 40h da RAM interna
; para o acumulador
MOV
A,P1
MOV
A,@R0 ; copia o dado contido na área de RAM cuja o
; endereço esta em R0 para o acumulador
MOV
A,#40h ; carrega o dado 40h no acumulador
-
; copia o dado do PORT 1 (registrador
;localizado na área SFR da RAM interna) para
;o acumulador
MOV
Rn,A
MOV
Rn,direto
MOV
Rn,#dado
MOV
direto,A
MOV
direto,Rn
MOV
direto,direto
MOV
direto,@Ri
MOV
direto,#dado
MOV
@Ri,A
MOV
@Ri,direto
MOV
@Ri,#dado
MOV DPTR,#dado (16);carrega DPTR com dado de
;16 bits (pois a memória
;externa tem capac. de
;64k)
- MOVC
A,@A+DPTR ;leitura de tabela da ROM com
endereço armazenado em A (offeset) + DPTR (início da tabela)
- MOVC
- MOVX
A,@A+PC
A,@Ri
- MOVX
- MOVX
- MOVX
A,@DPTR
@Ri,A
@DPTR,A
-
A,Rn
A,direto
A,@Ri
A,@Ri
XCH
XCH
XCH
XCHD
;idem com end. inicial em PC
;le dado de mem. ext.
;endereçado por Ri
;escreve dado no acum. na
;memória ext.
;troca dados do acum. com reg.
;troca apenas nibble inferior
1.3.2) - Instruções Aritméticas:
- Instruções de Soma:
-
ADD
ADD
ADD
ADD
ADDC
ADDC
ADDC
A,Rn
A,direto
A,@Ri
A,#dado
A,Rn
A,direto
A,@Ri
;Acum + Rn = Acum.
;Acum + Rn + Carry = Acum.
11
MICROPROCESSADORES - VOL. II
-
ADDC
ADDC
INC
INC
INC
INC
INC
A,#dado
A,Rn
A
Rn
direto
@Ri
DPTR
IVAIR REIS N. ABREU
;Acum+1 = Acum
- Instruções de Subtração:
-
SUBB
SUBB
SUBB
SUBB
DEC
DEC
DEC
DEC
A,Rn
A,direto
A,@Ri
A,#dado
A
Rn
direto
@Ri
;Acum - Rn = Acum.
;Acum-1=Acum
- Multiplicação: o resultado de 16 bits é armazenado no
Acumulador (LSB) e no registrador B (MSB).
- MUL
A,B
;multiplica dado de A por B
- Divisão: a parte inteira do resultado é armazenado no
acumulador e o resto no registrador B
- DIV
9.
A,B
;divide A por B
- Ajuste decimal: soma o número 6 ao nibble superior a
Instrução para ajuste decimal.
- DA
A
1.3.3) - Instruções Lógicas:
- Instruções AND:
-
ANL
ANL
ANL
ANL
A,Rn
A,direto
A,@Ri
A,#dado
;A ^ Rn = A
- Instruções OU:
-
ORL
ORL
ORL
ORL
A,Rn
A,direto
A,@Ri
A,#dado
;A OU Rn = A
- Instruções OU-EXCLUSIVO:
- XRL
- XRL
A,Rn
A,direto
;A OU-EXC Rn = A
12
MICROPROCESSADORES - VOL. II
- XRL
- XRL
IVAIR REIS N. ABREU
A,@Ri
A,#dado
- Rotação:
divisão/multiplicação binária
- RR
A
;rotaciona todo os bits do
;acumulador 1 posição para a
;direita. O bit 1 é deslocado para
;o oitavo bit
- RRC
A
;o primeiro bit o acumulador é
;rotacionado para o carry e o bit
;deste para o oitavo bit do
;acumulador
- RL
A
;idem a RR mas invertendo a direçao
- RLC
A
;idem a RLC mas invertendo a dir.
- Complementação:
- CPL
- CLR
- SWAP
A
A
A
;complementa todos os bits do acum.
;zera acumulador
;troca os nibbles do acumulador
1.3.4) - Instruções de Transferência de Controle:
- SJMP
end(8) ;carrega PC com endereço de 8 bits
- AJMP
end(11);carrega PC com endereço de 11 bit
- LJMP
end(16);carrega PC com endereço de 16 bit
- JMP
@A+DPTR ;carrega PC com endereço (A+DPTR)
- JNZ
end(8) ;se Z=0, salta para endereço
- JZ
end(8) ;se Z=1, salta para endereço
- ACALL
end(11) ;salta para a subrotina de endereço
indicado. PCH->(SP+1), PCL->(SP+2) e SP->SP+2
- LCALL
end(16)
;idem com end. de 16 bits
- RET
;resgata endereço da pilha,
retornando ao ponto da chamada de subrotina. SP->PCL,
SP-1->PCH e SP=SP-2
- RETI
;retorno de subrotinas de
interrupção.
- PUSH
direto
;salva na pilha (SP+1) dado direto
- POP
direto
;resgata da pilha (SP-1) dado direto
-
CJNE
CJNE
CJNE
CJNE
DJNZ
- DJNZ
A,direto,end(8) ;se A  direto, saltam
A,#dado,end(8) ;se A  #dado, saltam
Rn,#dado,end(8)
;se Rn  #dado, saltam
@Ri,#dado,end(8) ;se (Ri)#dado, saltam
Rn,end(8) ;decrementa Rn. Se Rn0,
;retorna ao endereço
direto,end(8) ;idem utilizando dado
;direto como contador.
13
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
1.3.5) - Instruções Booleanas:
-
CLR
CLR
SETB
SETB
CPL
CPL
ANL
ANL
- ORL
- ORL
- MOV
- MOV
- JNC
- JC
- JB
- JNB
- JBC
C
;zera bit Cy
bit ;zera bit especificado
C
;seta bit Cy
bit ;seta bit especificado
C
;complementa Cy
bit ;complementa bit
C,bit ;operação "and" entre o Cy e o bit
C,/bit;operação "and" entre o Cy e o inverso
;do bit especificado
C,bit ;operação "OU" entre o Cy e o bit
C,/bit;operação "OU" entre o Cy e o inverso
;do bit especificado
C,bit ;copia bit especificado para o Cy
bit,C ;copia Cy para o bit
end(8);salta para o endereço especificado se
;Cy é zero
end(8);salta para o endereço especificado se
;Cy é um
bit,end(8) ;salta para o endereço espec.
;se bit=1
bit,end(8) ;salta para o endereço espec.
;se bit=0
bit,end(8) ;salta e zera o bit se o mesmo
;estiver setado
14
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
1.4) – Projeto Básico de Controle:
- Forno de Microondas com o 8031.
- Saídas:
1 motor de prato
1 lâmpada
1 válvula microondas
1 bip (buzzer)
- Entradas: 1 chave liga/desliga
1 chave da porta
2 chaves gerais
- Firmware: Se a chave liga/desliga estiver acionada e a porta fechada ligar todas as saídas
(menos o bip) por 1 minuto. Após este tempo, acionar o bip por 0,5 segundos e voltar ao
ínicio do processo. Se a porta abrir durante o tempo de 1 minuto, desligar as saídas e
esperar a porta fechar para finalizar processo.
1.5) – Exercício:
1) - Sistema de Automação de Iluminação de um escritório com o 8951 (www.atmel.com)
- Saídas:
2 lâmpadas externas.
8 lâmpadas internas (1 para cada sala).
- Entradas:
1 sensor fotoelétrico para controle das lâmpadas externas.
1 sensor de presença em cada sala.
- Firmware:
lâmpadas externas-> ligar quando o sensor fotoelétrico estiver indicando escuro.
lâmpadas internas -> ligar quando for detectada a presença de alguma pessoa na
saída. Desligar na ausência.
2) - Fazer um projeto com as seguintes características:
- 8751
- Teclado 16 teclas
- Comunicação serial RS232
- Conversor A/D de 8 canais (ADC0808) -> 0-1fffh
- Display 16x2 -> 2000h-3fffh
- 1 chave liga/desliga
- 1 solenóide
- 1 lâmpada
- 1 sensor fotoelétrico
Em relação da projeto físico acima, fazer os seguintes programas:
3) - Fazer um programa para o sensor controlar a lâmpada.
15
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
Solução:
;*** PROGRAMA EXEMPLO - CONTROLE DO DE UMA LAMPADA ATRAVES DE UM SENSOR
;*
;*
SENSOR = 1 -> LIGA A LAMPADA
;*
SENSOR = 0 -> DESLIGA A LAMPADA
;*
;***
;*** DEFINICAO DOS LABELS
CHAVE
BIT
P3.2
SOLENOIDE
BIT
P3.3
LAMPADA
BIT
P3.4
SENSOR
BIT
P3.5
PILHA
EQU 60H
;*** INICIO DO PROGRAMA
ORG 0
JMP
INICIO ;SALTA AREA DE INTERRUPCAO
ORG 30H
INICIO:
MOV SP,#PILHA
CLR
SOLENOIDE
CLR
LAMPADA
LESENSOR:
JB
SENSOR,LIGALAM
CLR
LAMPADA
JMP
LECH
LIGALAM:
SETB LAMPADA
JMP
LESENSOR
;***AREA DE SUBROTINA
;***AREA DE SUBROTINAS DE INTERRUPCAO
;***AREA DE TABELAS
END
4) - Fazer um programa para a chave controlar o solenóide
16
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
2) – Linguagem Assembler Estruturada:
2.1) - Estrutura básica da Linguagem Assembler:
A linguagem Assembler relaciona estruturas mneumônicas e pseudo-instruções
(diretivas) com códigos de operação (linguagem de máquina). Por ser uma representação
direta dos códigos de operação do microprocessador, permite um total controle dos
elementos físicos de um sistema microprocessado (acesso a registradores, posições
absolutas de memória, controle de periféricos, etc.).
Campos básicos de uma linha de Linguagem Assembler:
LABEL
CÓDIGO DE OPERAÇÃO OPERANDO COMENTÁRIOS
Exemplo:
MOV
A,B
;carrega A com B
Campo Label: rotula um endereço do programa com o objetivo de facilitar as instruções de
salta do sistema (o compilador associa o nome do rótulo com o endereço absoluto). O label
também é utilizado para nomear variáveis do sistema através da diretiva EQU (equate). O
campo Label é separado do código de operação através de um caracter de espaço ou TAB.
Código de Operação: estruturas mneumônicas relacionada com o código de operação real.
Operando: contem informações de registros, valores numéricos, labels ou expressões
numéricas que complementam o mneumônico.
Ex.:1) mov
a,#05
2) VALOR_CTE
...
equ
05
add
a,#VALOR_CTE
3)
mov
dptr,#04ffh + 1
4)
mov
a,#8 AND 1
Comentários: explicação de um procedimento com o objetivo de esclarecer o
funcionamento de determinada parte do programa. Normalmente o comentário vem
seguido do símbolo do ponto e vírgula.
2.2) - Macros em Assembler:
17
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
Macros são estruturas do programa repetidas frequentemente. Estas rotinas podem
ser chamadas por um nome e ao serem compiladas são substituídas pelo código. Exercem a
mesma função das macros do Word, Excel, etc.
As macros são definidas no ASM51 da seguinte forma:
%*DEFINE (nome da macro)
(estrutura da macro)
Exemplo:
%*DEFINE(PUSH_DPTR)
(PUSH DPH
PUSH DPL
)
ROTINA:
%PUSH_DPTR
No programa .LST aparece a estrutura:
ROTINA:
PUSH DPH
PUSH DPL
2.3) - Técnicas para programação Assembler:
É importante adotar um claro e consistente estilo na programação em linguagem
Assembler. Este procedimento é fundamental particularmente quando se trabalha em
equipe, pois os diversos programadores precisam estar sincronizados na forma de trabalho.
Adotando-se alguns procedimentos básicos para a execução do trabalho facilita não apenas
o trabalho em equipe como a programação de um único programador, pois agiliza a
produção e possíveis correções do programa.
Normalmente estes procedimentos são padronizados por processos de controle de
qualidade que as empresas ou programadores adotam.
2.3.1) - Labels e utilização de EQUATES:
A utilização de expressões identificadores de endereços das linhas de programação
(seguida de : ) ou de números / endereços (com EQU) facilitam a documentação e
compreensão do programa, agilizando a programação e principalmente o reparo /
manutenção do sistema. A substituição do valor real do Label (variável / endereço) é
providenciada pelo processo de compilação. Deve-se procurar utilizar nomes dos labels
que sejem mneumônicos para as funções realizadas.
Ex.:
18
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
PILHA
TIMEH0
TIMEL0
PROG_IN
PROG_T0
EQU
EQU
EQU
EQU
EQU
60H
30H ;TEMPO DE 10 MSEG NO TIMER0
0C0H
10000010B ;PROGRAMA IE
00000001B ;PROGRAMA TMOD
RESET0:
ORG
JMP
0
INICIO
ORG
JMP
0BH
LE_IO
ORG
30H
INICIO:
MOV
SP,#PILHA
MOV
IE,#PROG_INT
MOV
TMOD,#PROG_T0
MOV
TH0,#TIMEH0
MOV
TL0,#TIMEL0
SETB
TR0
CALL
INICIA_DSP
...
;SUBROTINAS
;INICIALIZA DISPLAY LCD
INICIA_DSP:
....
RET
;SUBROTINA INTERRUPCAO
LE_IO:
...
RETI
2.3.2) - Comentários:
As linhas de comentários, normalmente precedidas por ponto e vírgula, devem ser
utilizadas para indicar, ao programador, as funções básicas da rotina em questão e de
determinadas instruções. Seu uso não deve ser indiscriminado (indicando situações obvias
e redundantes) mas sim esclarecer a função das rotinas comentadas. As estruturas de
decisão (utilizando JZ, JNZ, CJNZ, DJNZ, etc) devem sempre estar objetivamente
comentadas.
Os programadores e empresas mais capacitadas normalmente estabelecem formatos
para os comentários, de tal forma a padronizar a documentação. Um exemplo é sempre
existir um comentário no início do programa descrevendo a função do programa de forma
genérica, as interrupções utilizando, histórico de alterações, datas, programadores
19
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
envolvidos, pendências, etc. Cada subrotina deve ser acompanhada de um cabeçalho
contendo:
- Descrição objetiva da rotina.
- Parâmetros de entrada
- Parâmetros de saída
- Registradores alterados / utilizados
Exemplo:
;***********
;*
ROTINA EXEMPLO - F.C.I MACKENZIE
;*
;*
Data Início: 01/03/2000
;*
Programadores: José, João e Maria
;*
Descrição: esta rotina tem como função exemplicar a forma de documentação
;*
;*
Histórico de Alterações:
;*
01/03 -> inicio da programação.
;*
;*
Pendências:
;*
- Melhorar rotina de cálculo do CheckSun
;*
;************
;***
;*
ÁREA DE LABELS
;***
...
...
;*** INÍCIO DAS SUBROTINAS
;*** ROTINA DE ESCRITA NO DISPLAY
;*
;*
DESCRIÇÃO: rotina com a função de escrever os dados da memória préestabelecida no DSP
;*
;*
Parâmetros de Entrada: End. 50h-5fh -> primeira linha DSP
;*
Parâmetros de Saida:
;*
Registradores alterados: Acc, DPTR, R0
;*
;*
Histórico de alteração:
;*
Início: 01/03/2000
;*
;***
ESCR_DSP: ...
20
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
RET
2.3.3) - Salvamento de Registradores na Pilha:
Para a correta estruturação do programa é fundamental garantir que uma subrotina
não venha a interferir o funcionamento de outras rotinas no programa. Esta transparência é
garantida pelo controle dos registradores alterados na rotina e seu devido salvamento na
pilha quando não se tratar de registradores utilizados para passagem de parâmetros de saída.
Portanto, é necessário a utilização das instruções PUSH e POP para garantir a integridade
dos registradores alterados.
Exemplo:
;*** SUBROTINA DE RECEPÇÃO SERIAL
;*
;*
Descrição: rotina acessada pela interrupção serial. Le SBUF, carregando o dado no
endereço 30H se ;*
o mesmo for diferente de 00.
;*
Registradores de Entrada: SBUF
;*
Registradores de Saída:
30H
;*
Registradores alterados:
ACC, PSW
LESERIAL: PUSH ACC
PUSH PSW
CONT1:
MOV A,SBUF
CJNE A,#00,CONT1
MOV 30H,A
POP PSW
POP ACC
RETI
2.3.4) - Utilização de Subrotinas:
O princípio básico da programação estruturada e bem feita é a divisão do programa
em subrotinas, dividindo a solução para facilitar a obtenção do algoritmo de cada parte do
programa. A divisão do programa também auxilia na divisão de tarefas e procedimentos de
testes de cada parte do programa. A idéia básica é a mesma quando temos um grande
problema para resolver e o dividimos para facilitar a solução final.
O conceito de subrotina também está ligado ao fato de muitas vezes possuirmos
estruturas repetitivas no programa (por exemplo: diversas vezes temos a necessidade de
escrever mensagens no display). Se colocamos estas estruturas em sub-rotinas e a
acessamos todas as vezes que necessitamos desta função, é claro que existirá uma grande
economia de códigos de programação.
21
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
As subrotinas podem estar ligadas ao sistema de interrupção. Neste caso, sua
função está ligada diretamente a característica da própria interrupção. Ex.: a interrupção
serial está ligada a função de receber e transmitir dados seriais.
No planejamento do programa devemos dividir o programa em rotina principal,
subrotinas de interrupção e subrotinas genéricas. Cada um destes blocos poderão ser
criados e testados separadamente (inclusive com auxílio de programas de LINK /
LOCATE), existindo no final apenas um teste final interligando todas as rotinas.
2.3.5) - Organização do Programa:
Normalmente os programas são ordenados da seguinte forma:
- Comentário Inicial
- Área de Labes (equates)
- Vetores e chamada de Interrupção
- Programa Principal (normalmente em loop)
- Área de Subrotinas genéricas.
- Área de Subrotinas de interrupção.
- Área de tabelas (DB, DW, etc.)
O algoritmo do programa deverá ser estruturado baseado na ordem acima.
2.3.6) - Erros mais comuns ocorridos na programação em Linguagem Assembler:
- Saídas de subrotinas com saltos: a única forma de saída da subrotina é através de
instruções RET ou RETI. A utilização de JMPs ou qualquer outro tipo de instrução de
desvio fará o programa se perder, ou os endereços de retorno armazenados na pilha estarão
perdidos.
- Esquecimento de indicar a área de pilha: todo o programa necessita ser começado
através da definição clara da área de pilha (instrução MOV SP,#PILHA).
- Memória insuficiente para a pilha: a utilização de um grande número de
subrotinas "aninhadas" (subrotinas dentro de subrotinas), pode levar ao "estouro" da área da
memória reservada para a pilha.
- Salvamento e Resgate da Pilha: todo o salvamento de registradores na pilha (com
PUSH) deve ser resgatado no final da rotina (com POP). Lembrar que a pilha trabalha na
estrutura do último dado salvo ser o primeiro a ser resgatado (FirsInLastOut - FILO).
- Registradores alterados em subrotinas: todos os registradores destruídos em
subrotinas que possam ser utilizados em outras rotinas devem ser salvos na pilha para
garantir a transparência do programa.
- Inversão dos registradores nas instruções; é bastante comum a troca de
registradores em instruções MOV.
Ex.: deseja-se mover o dado do acumulador para o registrador R0 utlizando MOV
A,R0
22
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
- Não inicialização de ponteiro de memórias: quando utilizamos endereçamento
indireto (com @) e não inicializamos o ponteiro.
Ex:
mov
@r0,A ;o acumulador é deslocado para qual endereço?
- Não inicialização de registradores e memória RAM: o programa sempre deve
colocar os registradores e área de RAM com dados conhecidos e controlados.
- Utilização invertida da condição de salto: erro bastante comum e que provoca a
inversão das condições de saida. A simulação do programa é necessária para se precaver
deste tipo de erro.
Ex: Saltamos quando o bit é alto (JB) e deveria ser baixo (JNB).
- Não parada do programa ou falta de retorno: todo o programa principal deve ser
cíclico (loop) e jamais invadir a área de subrotinas. Toda a subrotina deve prever o retorno
ao programa que a chamou (através de RET ou RETI)
23
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
3) – Interface para Display de Cristal Líquido (L.C.D.):
3.1) - Display LCD programável:
A figura a seguir mostra os principais controles destes
tipos de displays:
Arquitetura básica dos displays L.C.D.
C/D = 1 -> indica dado em ASCII a ser escrito no display
C/D = 0 -> indica controle (inicialização e endereço do
caractere no display)
Principais controles de inicialização utilizados:
-
Configura display para 1 linha (8 bits) -> 30H
2 linhas (8 bits) -> 38H
Display ativado com cursor fixo -> 0EH
Display ativado com cursos intermitene -> 0CH
Cursor apagado -> 08H
Mensagem com deslocamento à esquerda -> 07H
Mensagem com deslocamento à direita -> 05H
Cursor com deslocamento à esquerda -> 04H
Cursor com deslocamento à direita -> 06H
Limpa display e retorna o cursor -> 01H
Desloca somente cursor à esquerda -> 10H
Desloca somente cursor à direita -> 14H
3.2) – Sistema Mínimo Típico:
24
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
3.2.1) – Sistema com o Display com endereçamento de memória:
3.2.2) – Sistema com Display controlado por Ports (sem memória externa):
25
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
3.3) – Rotinas Básicas:
3.3.1) – Rotina de Inicialização (CONFIG:)
Rotina para inicializar o display com 2 linhas, deslocamento da esquerda para
direita, sem cursor e limpeza do display
;sub-rotina de configuração do sistema – display – chama tabela de configuração do display
config:
MOV
MOV
MOVX
CALL
MOV
MOVX
CALL
MOV
MOVX
CALL
MOV
MOVX
CALL
DPTR,#0000
A,#38H
@DPTR,A
TEMPO15
A,#08H
@DPTR,A
TEMPO15
A,#05H
@DPTR,A
TEMPO15
A,#01H
@DPTR,A
TEMPO15
;COLOCA END.A0 (C/D) = 0 -> CONTR.
;2 LINHAS
;ESPERA 15 MSEG.
;SEM CURSOR
;DESLOCAMENTO A DIREITA
...
3.3.2) – Rotina de Escrita na primeira ou segunda linha de um display a partir de
uma tabela (ESCDSP:):
Rotina que envia para o display uma sentença endereçada. Forneçe endereço da
primeira ou segunda linhas
mov
mov
call
...
;subrotinas
ESCDSP:
push
push
mov
mov
mov
mov
mov
movx
call
retesc:
mov
mov
r0,#80h
dptr,#linha1
ESCDSP
acc
psw
31h,dph
32h,dpl
30h,#00
dptr,#0000
a,R0
@dptr,a
tempo15
a,30h
dph,31h
;primeira linha (para segunda linha seria 0C0h)
;endereça a linha superior do display
;salva ponteiro da linha
;inicializa ponteiro
;controle do display
;endereço da primeira/segunda linha
;recupera endereço da sentença
26
MICROPROCESSADORES - VOL. II
mov
movc
cjne
jmp
dpl,32h
a,@a+dptr
a,#0ff,salta1
fimesc
mov
movx
call
inc
jmp
dptr,#0001
@dptr,a
tempo15
30h
retesc
pop
pop
ret
...
psw
acc
IVAIR REIS N. ABREU
;le tabela
;verifica fim da tabela
salta1:
;dado do display
;espera 15 mseg
;incrementa ponteiro
fimesc:
;tabela
linha1: db
' LINHA SUPERIOR ',0FFH
3.3) – Exercícios:
1) – Escrever o seu nome na primeira linha e o seu código de matrícula na segunda linha
2) – Idem para:
" TECNOLOGIA "
" MACKENZIE "
3) – Alternar na primeira display, com intervalo e 1 segundo, as mensagens na primeira
linha "POR FAVOR" e na segunda linha "INSIRA CARTÃO"
4) – Fazer um programa para controle de um reservatório de líquido, com sensor de nível
baixo e sensor de nível alto.
;*** CONTROLE DE NÍVEL EM UM RESERVATÓRIO
;*
;*
PROGRAMADORES: ALUNOS 6B
;*
DATA: 09/03/2001
;*
VERSA0: 1.0
;*
HISTÓRICO: 09/03 -> VERSAO INICIAL
;*
;*
PENDENCIAS:
;*
;*
DESCRITIVO:
;*
SENSOR ATIVADO=0
;*
SENSOR DESLIGADO=1
;*
;*
--------------------TEMOS 4 SITUACOES PARA CONTROLE:
;*
|
D
|
- SITUACAO A: SENSOR 2=DESLIGADO, LIGAR MOTOR E
27
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
;*
|______ SENSOR 1
ESPERAR SENSOR 1 ATIVADO (TANQUE ENCHENDO)
;*
|
|
- SITUACAO B: SENSOR 2=ATIVADO, SENSOR 1 DESATIVADO
;*
|
BC
|
MOTOR ATIVADO, ESPERA SENSOR 1=ATIVADO, DESLIGA
;*
|
|
O MOTOR (TANQUE ENCHENDO)
;*
|______ SENSOR 2
- SITUACAO C: IGUAL A SITUACAO B, MAS COM MOTOR
;*
|
A
|
DESLIGADO. ESPERA SENSOR 2 DESATIVADO. LIGA MOTOR
;*
--------------------TANQUE ESVAZIANDO
;*
- SITUACAO D: SENSOR1 E 2 ATIVADO: DESLIGA MOTOR E
;*
ESPERA SITUACAO C. TANQUE ESVAZIANDO
;*
FORAM CRIADAS 2 SUBROTINAS: UMA PARA O TANQUE ENCHENDO E OUTRA PARA
;*
TANQUE ESVAZIANDO
;*
MENSAGENS NO DISPLAY:
;*
- INICIO POR 5 SEGUNDOS:
CONTROLE
;*
RESERVATORIO
;*
- TANQUE ENCHENDO (SITUACAO B):
RESERVATORIO
;*
VAZIO
;*
- TANQUE ESVAZIANDO (SITUACAO C):
RESERVATORIO
;*
CHEIO
;*
DEBOUCED DE 0,5 SEGUNDOS NOS SENSORES
;***
;***AREA DE LABELS
SENSOR1
BIT
P3.2
;SENSOR DE NIVEL ALTO
SENSOR2
BIT
P3.4
;SENSOR DE NIVEL BAIXO
MOTOR
BIT
P1.0
;MOTOR OU ELETROVALVULA
PILHA
EQU 60H
;***INICIO DO PROGRAMA
ORG 0
JMP
INICIO
;***VETORES DE INTERRUPCAO
ORG 30H
INICIO:
MOV SP,#PILHA
CALL CONFIG
;INICIALIZA DISPLAY
CLR
MOTOR
;* MENSAGEM INICIAL
MOV R0,#80H
MOV DPTR,#MSG_CONT
CALL ESCDSP
CALL TEMPO5S
;ESPERA 5 SEGUNDOS
MOV R0,#0C0H
MOV DPTR,#MSG_RESER
CALL ESCDSP
CALL TEMPO5S
;ESPERA 5 SEGUNDOS
;* IDENTIFICA SITUACAO INICIAL E CHAMA SUBROTINAS
LESEN2:
JB
SENSOR2,DEB1
CALL TEMPO05
;ESPERA 0,5 SEGUNDOS
JB
SENSOR2,DEB1
JMP
LESEN1
;SENSOR2=ATIVADO, VERIFICA SENSOR 1
DEB1:
CALL TEMPO05
JNB
SENSOR2,LESEN2
JMP
TIPO_B
;SENSOR 2=DESATIVADO -> ENCHE TANQUE
;* ANALISA SENSOR1
LESEN1:
JB
SENSOR1,DEB2
CALL TEMPO05
;ESPERA 0,5 SEGUNDOS
JB
SENSOR1,DEB2
28
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
JMP
TIPO_C
;SENSOR1=ATIVADO -> ESVAZIA
CALL TEMPO05
JNB
SENSOR2,LESEN1
JMP
TIPO_B
;SENSOR 2=DESATIVADO -> ENCHE TANQUE
;* TANQUE ENCHENDO – LOOP PRINCIPAL
TIPO_B:
CALL ENCHE_TQ
TIPO_C:
CALL ESVAZIA_TQ
JMP
TIPO_B
;*** SUBROTINAS
;* SUBROTINA DE ENCHIMENTO DO TANQUE
;*
;*
DESCRITIVO:
;*
- MENSAGEM
;*
- LIGA MOTOR
;*
- ESPERA SENSOR 1 ATIVADO
;*
;*
PARAMETRO DE ENTRADA: ;*
PARAMETRO DE SAIDA: ;*
REGISTRADORES ALTERADOS: DPTR
;*
;***
ENCHE_TQ:
PUSH DPH
PUSH DPL
SETB MOTOR
;MENSAGEM RESERVATORIO ENCHENDO
MOV R0,#80H
MOV DPTR,#MSG_RESER
CALL ESCDSP
CALL TEMPO5S
;ESPERA 5 SEGUNDOS
MOV R0,#0C0H
MOV DPTR,#MSG_ENCH
CALL ESCDSP
;MONITORA SENSOR 1 PARA SAIR
LESEN1A:
JB
SENSOR1,LESEN1A
CALL TEMPO05
;ESPERA 0,5 SEGUNDOS
JB
SENSOR1,LESEN1A
;SENSOR 1 ATIVADO , SAI
POP
DPL
POP
DPH
RET
DEB2:
;* SUBROTINA DE ESVAZIAMENTO DO TANQUE
;*
;*
DESCRITIVO:
;*
- MENSAGEM
;*
- DESLIGA MOTOR
;*
- ESPERA SENSOR2 DESATIVADO
;*
;*
PARAMETRO DE ENTRADA: ;*
PARAMETRO DE SAIDA: ;*
REGISTRADORES ALTERADOS: DPTR
;*
;***
ESVAZIA_TQ: PUSH DPH
PUSH DPL
29
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
CLR
MOTOR
;MENSAGEM RESERVATORIO ENCHENDO
MOV R0,#80H
MOV DPTR,#MSG_RESER
CALL ESCDSP
CALL TEMPO5S
;ESPERA 5 SEGUNDOS
MOV R0,#0C0H
MOV DPTR,#MSG_ESVA
CALL ESCDSP
;MONITORA SENSOR 2 PARA SAIR
LESEN2A:
JNB
SENSOR1,LESEN2A
CALL TEMPO05
;ESPERA 0,5 SEGUNDOS
JNB
SENSOR1,LESEN2A
;SENSOR 2 DESATIVADO , SAI
POP
DPL
POP
DPH
RET
;*** SUBROTINA DE TEMPO 5 SEGUNDOS
TEMPO5S:
RET
;*** SUBROTINA DE TEMPO 0,5 SEGUNDOS
TEMPO05:
RET
;*** SUBROTINA DE CONFIGURACAO DO DISPLAY
CONFIG:
RET
;*** SUBROTINA DE ESCRITA DO DISPLAY
ESCDSP:
RET
;*** TABELA DE MENSAGENS
MSG_CONT: DB
'CONTROLE
',0FFH
MSG_RESER: DB
'RESERVATORIO ',0FFH
MSG_ESVA:
DB
'ESVAZIANDO
',0FFH
MSG_ENCH: DB
'ENCHENDO
',0FFH
END
5) – Idem para um reservatório de apenas um sensor de nível alto. Indicar reservatório
cheio e reservatório vazio no display
30
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
4) – Sistema de Interrupção, Temporização e Teclado Matricial:
4.1) - Sistema de Interrupção:
O microcontrolador 8051 possui 5 interrupções, com a
prioridade mais alta podendo ser programada pelo registrador
IP.
O nível de prioridade 'default' e os vetores de
interrupção são apresentados abaixo:
IE0
TF0
IE1
TF1
SRT
(interrupção externa 0)
(interrupção do timer 0)
(interrupção externa 1)
(interrupção do timer 1)
(interface serial)
->
->
->
->
->
0003H
000BH
0013H
001BH
0023H
- Registrador de habilitação do sistema de interrupção:
_________________________________________
IE: | EA | x | x | ES | ET1 | EX1 | ET0 | EX0 |
EA:
ES:
ET1:
EX1:
ET0:
EX0:
em
em
em
em
em
em
nível
nível
nível
nível
nível
nível
baixo,
baixo,
baixo,
baixo,
baixo,
baixo,
desabilita
desabilita
desabilita
desabilita
desabilita
desabilita
todas as interruções
interrupção serial
interrupção do timer 1
interrupção externa 1
interrupção do timer 0
interrupção externa 0
- Registrador do nível de prioridade:
________________________________________
IP: | x | x | x | PS | PT1 | PX1 | PT0 | PX0 |
PS: em
PT1:em
PX1:em
PT0:em
PX0:em
nível
nível
nível
nível
nível
alto,
alto,
alto,
alto,
alto,
interrupção
interrupção
interrupção
interrupção
interrupção
serial
timer 1
externa
timer 0
externa
prioridade
prioridade
1 prioridade
prioridade
0 prioridade
4.2) - Sistema de temporização:
O microcontrolador da família 8051 possui 2 timers de 16
bits. Seu número programado é incrementado por pulsos
externos (dos pinos Tin1 e Tin2) ou pelo clock interno de
1/12 fcristal. Quando o número do timer chega a zero, a
interrupção respectiva (TF0 - end. 000bH ou TF1 - end. 001bH)
é acionada.
Registradores do sistema de temporização:
- Registrador TH0 e TL0:
registradores de 8 bits do
timer 0 localizado na área de registradores especiais (SFR)
que somados formam o contador de 16 bits.
31
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
- Registrador TH1 e TL1:
registradores de 8 bits do
timer 1 localizado na área de registradores especiais (SFR)
que somados formam o contador de 16 bits.
- Registrador de modo:
---------------------- ---------------------TMOD: | GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |
---------------------- ---------------------TIMER 1
TIMER 0
GATE: utilizado quando se deseja um controle do timer
externo através do pino externo INT0 ou INT1 (dependendo do
timer utilizado). Quando este bit está em 1 e o pino INT
externo está setado, o bit TR1 do registrador TCON controla o
funcionamento do timer.
C/T: em nível alto, coloca o timer como contador dos
pulsos da entrada Tin1 (externa). Em nível baixo, o timer é
acionada pelo sinal de frequência 1/12 do oscilador interno.
M1
M0
:
controla modo de operação do timer
0
0
->
0
1
1
0
->
->
1
1
->
possuiu um divisor de 5 bits e um
contador de 8 bits
sem divisor, possuiu contador de 16 bits
contador de 8 bits (TH). O byte TL é
recarregado a cada ciclo em TH
para timer.
- Registrador de controle
______________________________________________
---------------------------------------------TCON: | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0|
----------------------- ---------------------TF0: bit de status. Em nível alto indica overflow do
timer 0.
TR0: em nível alto habilita o funcionamento do timer 0.
Precisa ser setado para o timer operar.
IE0: bit de status. Em nível alto indica que houve
pulso na entrada do pino Tin0.
IT0: em nível alto indica pulso positivo na entrada do
pino Tin0. Em nível baixo indico pulso negativo.
4.3) – Rotina de Inicialização (CONFIG:)
CONFIG:
;INICIALIZAÇÃO DO DISPLAY
...
;INICIALIZAÇÃO DO TIMER / INTERRUPÇÃO
MOV IE,#10001111B ;HABILITA TIMERS E INTER. EXT.
32
MICROPROCESSADORES - VOL. II
MOV
MOV
MOV
MOV
MOV
MOV
SETB
SETB
IVAIR REIS N. ABREU
IP,#00000100B ;PRIORIDADE PARA TIMER0
TH1,#TIMER1H
;PARTE ALTA DO TIMER1
TL1,#TIMER1L
;PARTE BAIXA
TH0,#TIMER0H
;PARTE ALTA DO TIMER0
TL0,#TIMER0L
;PARTE BAIXA
TMOD,#00100001B;TIMER1->8BITS,TIMER0->16 BITS
TR0
TR1
RET
4.4) – Exercícios de Interrupção / Temporização:
1) – Calcular os valores da parte baixa e alta do timer 0
para 30 mseg para um cristal de 12 Mhz
2) – Idem para o timer 1, tempo de 50 mseg., cristal de 1 Mhz
3) – Fazer um programa para ler a posição externa 4000H e
guardá-la no endereço 50h interno a cada interrupção externa
0
4) – Gerar um sinal quadrado de 1 kHz no port P1.0 (cristal
de 12Mhz).
4.5) - Sistema de varredura de Teclado
As teclas estão localizadas na intersecção de linhas
(ports de saída) e colunas (ports de entrada). Ao acionar
uma determinada tecla, o sinal da linha é colocado na coluna
para ser lida. Um sistema de varredura (com frequência
superior da frequência de toque das teclas) garante um sinal
em nível alto (ou baixo) durante um pequeno período
suficiente para ser reconhecido pelo port de entrada em caso
de acionamento de alguma tecla.
Figura:
teclado de 16 teclas com varredura matricial
33
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
4.6) – Rotinas Básicas:
4.6.1) – Rotina de Leitura de um teclado na rotina timer0 (LETEC:)
Rotina ligada a interrupção do timer (0 ou 1) temporizada para um tempo menor que
a frequência da digitação (típico valor < 100mseg). Guardar as teclas digitadas nas
posições booleanas (20.0 a 2f.7). Teclado telefônico (4 linhas x 3 colunas)
1
2
3
4
5
6
7
8
9
*
0
#
Tempo de 50 mseg (12 Mhz) ->
4.7) – Exercícios:
1) - Fazer a tecla * ligar uma lâmpada em P1.0 e a tela # desligar a lâmpada
34
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
5) - Sistema de Comunicação Serial 8051:
5.1) - Introdução e conceitos básicos:
A comunicação serial proporciona a comunicação entre 2
pontos ou uma rede de pontos através de um número reduzido de
vias (2 vias no caso da comunicação full-duplex ou 1 via no
caso da comunicação half-duplex, rede de fibras óticas, cabo
coaxial utilizado em redes padrão ETHERNET). A comunicação
serial proporciona maior economia a infraestrutura de
transferência de dados (menor número de vias nos cabos, menor
número de canais nos repetidores de linha, etc.), maior
imunidade a ruidos, maior alcance.
Apresenta como
desvantagem básica a menor velocidade de processamento
(variando de 300 b.p.s - baunds até redes de alta velocidade
de 100 Mbits/seg) em se comparando com a velocidade de
transferência paralela interna dos computadores (através dos
barramentos internos).
Para baixas velocidades, podemos subdividir a
comunicação serial em comunicação assíncrona e síncrona:
5.1.1) - Comunicação Assíncrona:
A comunicação assíncrona envia dados de início (start
bit) e fim de transmissão (stop bit). Bits de paridade são
opcionais. Apesar da simplicidade e alta utilização é
utilizada apenas em sistemas de baixa velocidade, devido a
perda de rendimento introduzido pelos sinais START BIT, STOP
BIT e PARIDADE.
Figura 11 - Estrutura básica da comunicação assíncrona
Os dispositivos seriais programáveis presentes dentro de
chips dedicados ou microcontroladores recebem o nome de UART
(UNIDADE ASSÍNCRONA DE RECEPÇÃO TRANSMISSÃO)
5.1.2) - Comunicação Síncrona:
Na comunicação síncrona a transmissão de um bloco de
caracter com adição de controles apenas no início e final do
bloco. O número de blocos transmitidos varia bastante. Um
35
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
caracter de CHECK-SUM garante a integridade da comunicação.
Um protocolo padrão garante a qualidade e integridade da
comunicação (através de comandos como NACK e ACK)
Figura 12 - Estrutura básica de comunicação síncrona.
Os dispositivos seriais programáveis
assíncronos/síncronos presentes dentro de chips dedicados ou
microcontroladores recebem o nome de USART (UNIDADE SÍNCRONA
/ ASSÍNCRONA DE RECEPÇÃO TRANSMISSÃO)
5.1.3) - Interface padrão RS-232:
Segue orientação V.24 da CCITT. Aumenta a imunidade a
ruído incrementando os níveis de tensão dos bits 0 e 1
transmitidos.
Sinal RS232 - Alta imunidade a ruído
Figura 13 - Sinais padrão TTL e RS-232
A implementação mais comum é realizada através de linedrivers integrados (como os chips 1488 - TTL/RS232 e 1489 RS323/TTL).
5.1.4) - Sinais típicos de uma interface padrão serial:
36
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
Os sinais mais comuns encontrados em comunicação serial
assíncrona é mostrado abaixo. Uma aplicação típica desta
configuração é implementada na comunicação computador/MODEM
(interface utilizada para modulação/demodulação para
comunicação na rede telefônica).
- TXD: transmissão de dados.
- RXD: recepção de dados.
- RTS (request to send): sinal de saída de propósito
geral. Normalmente ativo em 0, tem como principais
aplicações validar dados trasmitidos (como um sinal STROBE)
ou determinar se o sinal é de transmissão ou recepção nas
comunicações full-duplex.
- CTS (clear to send): sinal de entrada como resposta
ao sinal RTS, indicando entendimento do sinal RTS. Em muitos
sistemas, este sinal necessita estar em 0 para funcionamento
do sistema.
- DTR (data terminal ready): sinal de saída de
propósito geral.
- DSR (data set ready): sinal de entrada de propósito
geral.
- CD (carrier detect): sinal de entrada indicando que a
portadora foi detectada pelo modem.
Muitos dos sinais de propósito acima tem suas funções
ligadas ao protocolo.
5.2) – UART 8051 - Funcionamento básico:
O port serial do microcontrolador 8051 é full-duplex, ou
seja, pode-se transmitir e receber uma comunicação
simultaneamente. Como existe um buffer de recepção (SBUF) é
possível esperar-se a leitura deste buffer sem a perda do
próximo dado de recepção. Este mesmo buffer SBUF é utilizado
para a transmissão de dados.
O port serial opera de 4 modos:
- Modo 0: comunicação serial de 8 bits (sem START e
STOP BIT). Bit LSB é o primeiro. Baud-rate fixo em 1/12 da
frequência do cristal.
- Modo 1: comunicação serial de 10 bits (com START e
STOP BIT). Na recepção, o STOP BIT vai para o RB8 do
registrador SCON se SM2=0. Baud-rate programável de acordo
com carga do timer 1.
- Modo 2: comunicação serial de 11 bits (com START, STOP
BIT e PARIDADE). O bit de paridade é programável através do
bit TB8 de SCON. Na recepção, o bit de paridade é guardado
em RB8 de SCON. O baud rate é programável pelo bit SMOD do
registrador PCON. Com SMOD=0, baud rate é 1/64 da freqüência
37
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
do cristal. Com SMOD=1, baud-rate é 1/32 da freqüência do
cristal.
- Modo 3: idem ao modo 2, mas com baud-rate programável
pelo timer 1.
A comunicação serial do 8051 trabalha basicamente com 3
registradores:
- Registrador PCON: registrador com o bit SMOD e bits
para gerenciamento de energia nas versões CMOS
PCON:
SMOD -
-
- GF1 GF2 PD IDL
SMOD: nos modos 1,2 e 3 de operação do SBUF, SMOD=1
divide a taxa de transmissão binária.
GF1 e GF2: bits genéricos.
PD e IDLE: gerenciam modos de economia de energia.
PD suspende por completo as operações do processador
(voltando apenas com o reset) e o modo IDLE deixa ativados
apenas os periféricos internos (timer, uart, interrupções,
etc.) representando uma economia de energia de 85%. Sai do
modo IDLE através de interrupções ou reset.
Ex.:
1) - Colocar o processador em modo IDLE.
MOV
PCON,#00000001B
2) - Colocar o processador em modo POWER DOWN
- Registrador SBUF:
transmissão e recepção.
- SCON:
registrador armazenador do dado de
registrador de controle serial:
SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0 - SM1: modo
0
0
modo
0
1
modo 1
1
0
modo
1
1
modo
de operação
0
2
3
SM2: no modo 1, se SM2=1, RI não será ativado se
não for recebido o STOP BIT. Se SM2=0, RI será sempre
ativado e RB8 recebe o STOP BIT. No modo 2/3, se SM2=1, RI
38
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
não será ativado se o bit de paridade for 0. Se SM2=0, RI é
sempre ativado, independente do bit de paridade. No modo 0,
SM2=0 sempre.
REN: em nível alto habilita recepção.
TB8: armazena programação dos bits de paridade dos
modos 2 e 3.
RB8: nos modos 2/3, armazena o bit de paridade
recebido. No modo 1, se SM2=0, RB8 armazena o STOP BIT sendo
utilizado por rotinas de correção de erro. No modo 0, RB8
não é utilizado.
TI: bit indicador de dado transmitido. Necessita
ser limpo por software.
RI: bit indicador de dado recebido. Necessita ser
limpo por software.
Nos modos 1 e 3, há a necessidade de utilizar-se o timer
1 para a geração do baud-rate. O timer 1 deve ser programado
para o modo de autocarregamento, visto no estudo dos timers.
O valor de carga em função do cristal é fornecido no manual
(onde temos a fórmula de cálculo para outros cristais) e
reproduzida abaixo:
smod
Taxa = 2
---32
x (freq. cristal)
-------------12 x (256 - TH1)
Tabela de configuração do TIMER1
Baud-rate fcristal
19,2 k
9,6 k
2,4 k
1,2 k
11.059
11.059
11.059
11.059
Carga do timer
Mhz
Mhz
Mhz
Mhz
FD
FD
F4
E8
h
h
h
h
(
(
(
(
SMOD
SMOD
SMOD
SMOD
=
=
=
=
1)
0)
0)
0)
Exemplo:
1) - Programar o registrador SCON e o TIMER 1 para 8 bits de
dado, sem paridade, habilitacao de RX e baud-rate de 9600
baunds. Supor a utilização de cristal de 11.059 Mhz
MOV
MOV
MOV
MOV
MOV
MOV
TH1,# 0FD h
;carrega cristal 1 com reload
TMOD,# 0010XXXXb ; programa timer 1 c/ reload
TCON,# 010X0000b ;roda timer 1
IE,# 10011XXXb ;habilita inter. serial e t1
PCON,#00000000B
;SMOD = 0
SCON, # 01010000b ;modo 1 e rx habilitado
39
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
2) - Idem para 8 bits, sem paridade, habilitação RX e baudrate de 2400 baunds.
5.3) – Sistema Mínimo RS232:
5.3) – Rotinas Básicas:
5.3.1) – Rotina de Inicialização (CONFIG:)
CONFIG:
MOV
MOV
MOV
MOV
MOV
MOV
....
IE,#10011XXXB
TMOD,#0010XXXXB
TH1,#0FDH
TL1,#0FDH
PCON,#10000000B
SCON,#01010000B
...
; INICIALIZACAO DE OUTROS PERIFÉRICOS
;INICIALIZA INTERRUPCAO SERIAL E TIMER1
;9600 BAUNDS
5.3.2) – Rotina de Transmissão de um byte (TX1:)
;*** TX DADO DO ACUMULADOR
TX1:
MOV SBUF,A
JNB
TI,$
;AGUARDA FIM DE TX
CLR
TI
RET
5.3.3) – Rotina de Transmissão de uma String (TXSERIAL:)
Rotina que transmite serialmente uma sentença endereçada. Fornece endereço da
expressão a ser transmitida
mov
call
...
dptr,#string1 ;endereça string a ser transmitida
txserial
40
MICROPROCESSADORES - VOL. II
;subrotinas
txserial:
push
push
push
mov
retx: mov
movc
cjne
jmp
salta1:
call
inc
jmp
fimesc:
pop
pop
pop
ret
...
;tabela
string1: db
acc
psw
30h
30h,#00
a,30h
a,@a+dptr
a,#0ff,salta1
fimtx
tx1
30h
retx
IVAIR REIS N. ABREU
;ponteiro
;le tabela
;verifica fim da tabela
;tx string
;incrementa ponteiro
30h
psw
acc
" EXEMPLO DE TX ",0FFH
5.3.4) – Rotina de Recepção Serial (RXSERIAL:)
;*** AGUARDA RX, SETA FLAGRX, GUARDA EM BUFRX
RXSERIAL:
JNB
RI,$
;ESPERA RX
MOV A,SBUF
MOV BUFRX,A
CLR
RI
SETB FLAGRX
RET
;*** INTERRUPCAO SERIAL – VERIFICA SE TX OU RX
ORG
JMP
...
23H
TRATASERIAL
TRATASERIAL:
PUSH ACC
JB
TI,SALTA
;VERIFICA SE TX
;TRATA RX
MOV
MOV
SETB
CLR
JMP
A,SBUF
BUFRX,A
FLAGRX
RI
FIMTRATA
41
MICROPROCESSADORES - VOL. II
SALTA:
FIMTRATA:
CLR
CLR
SETB
POP
RETI
TI
RI
FLAGTX
ACC
IVAIR REIS N. ABREU
;INDICA TX FINALIZADA
5.4) – Exercícios:
1) – Escrever o dado Rx no display.
2) - Ligar uma lâmpada localizada em P1.0 se houver recepção
da letra A e desligar a lâmpada se receber a letra B
42
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
6) – Conversão Analógico / Digital:
6.1 ) - Introdução:
Sinal Analógico (não discreto) -> Sinal Digital (discreto)
Fatores para conversão:
- Número de bits de conversão: determina o número de valores discretos da conversão ->
2n
- Valor de Referência: determina o valor máximo de conversão (fundo escala do valor
analógico deve ser ajustado para este valor)
- Freqüência de Amostragem: determina o período entre duas amostras. Pelo Teorema de
Nyquest, a freqüência de amostragem é no mínimo 2 vezes a freqüência máxima do sinal.
fa = 2 x fmax
- Resolução: determina o valor analógico máximo em relação ao fundo escala
 V = Vmax / 2n
Ex: Para um valor Vmax = 5V, n=12 bits, qual a resolução do sinal?
 V = Vmax / 2n
 V= 5 / 4096 = 1,22 mV
Exemplos:
1) - Termômetro :
0 - 100 C
Vref = 2,5 V
n = 8 bits
Qual a resolução em temperatura, considerando que 100 C é equivalente a 2,5 V?
Se aumentar o número de bits para 10 bits, qual a nova resolução?
Se aumentar a Vref = 5 V e 10 bits, qual a nova resolução?
2) - Qual a freqüência de amostragem no canal de telefonia?
43
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
6.2) – Conversor A/D ADC 0808
download -> http://www.national.com/ads-cgi/viewer.pl/ds/AD/ADC0808.pdf
Sistema Mínimo 8031 / ADC0808 (endereço 2000H - 3FFFH)
6.3) - Exercícios
44
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
1) - Projetar um circuito com as seguintes características:
- 8031
- Eprom 2764
- LCD (end. 0-1fffh)
- Serial RS232
- Conversor ADC0808 (end. 2000h-3fffh) com 8 sensores de temperatura.
- 1 ventilador (port p1.1)
- 1 aquecedor (port p1.2)
- Firmware ligando o ventilador se o terceiro sensor indicar o valor maior que 80h e ligar o
aquecedor se o valor for menor que 30h.
2) -Idem para a leitura dos outros 7 sensores.
6.3) – Rotinas Básicas:
6.3.1) – Rotina de Leitura (LEADC:)
6.4) – Exercícios:
45
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
7) – Projetos de Controle:
- Monitoramento de pressão de 8 tanques através de sensores
lidos pelo ADC 0808 (endereço 2000H-3fffh). Ler ADC através
de TO. Se algum valor maior ou igual a 80H, ligar rele e
escrever no display SOBRE-PRESSÃO NO TANQUE X.
- Watch Dog resetável a cada segundo.
- Chip relógio (end. 4000h-5fffh) com registros de unidade de
segundo (end. 0) a dezena de ano tratado através de
interrupção externa (IE0). Armazenar os registradores na
memória RAM interna.
- Memória RAM 32K (end. 8000h-ffffh).
- Teclado Matricial telefônico (armazenar flag das teclas na
área booleana). Tratar teclado através de TO (temporização
de 40 mseg.)
- Display (end. 0-1fffh).
- Transmitir os dados da RAM se receber a string @01.
46
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
8) - Linguagem C para Programação de Microcontroladores
Bibliografia:
- JUNIOR, Vidal Pereira. Aplicações Práticas do Microcontrolador. Editora Érica
- SCHULTZ, Tom. C and the 8051. Vol. 1. Prentice Hall
- SCHULTZ, Tom. C and the 8051. Vol. 2. Prentice Hall
- PANBOUKIAN, Sergio. C++ Builder para Universitários. Editora Páginas e Letras.
8.1) - Tipo de variáveis:
- char ->
- int ->
- float ->
- double ->
- void ->
8 bits
16 bits
32 bits
64 bits
sem valor numérico
As denominações de variáveis acima podem ser expressões modificadoras -> long,
short, signed e insigned
Ex:
signed char
long int
-> variáveis com sinal de 8 bits (1 bit para sinal) -> -127 a +127
-> variáveis dobradas int -> 32 bits
8.2) - Declaração de Variáveis:
- Comentários inicializados e finalizados com /* e */
- Letras maiúsculas e minúsculas são diferentes.
- Todas as variáveis são finalizadas com ;
- Pode-se declarar várias variáveis na mesma linha.
Ex:
unsigned float teste, b, soma; /* declaração das variáveis teste, b e soma de 32 bits */
8.3) - Operadores:
8.3.1) - Operadores Aritméticos:
'-'
'+'
'*'
'/'
'% ' (resto em uma divisão)
'--'
decremento
'++' incremento
Ex:
a = b / c;
c++ ;
/* c=c+1 */
47
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
8.3.2 ) - Operadores Lógicos e Relacionais:
'>'
'= ="
'!='
'&&'
'||'
'!'
'<'
'>='
(igual)
(diferente)
(and)
(or)
(inversão)
'<='
8.3.3) - Operadores Binários: Alteram bits em variáveis.
'&' (AND), '| ' (OR), '^' (XOR), '~' (inversão), >> (desloc. direita), << (desloc.
esquerda)
8.3.4) - Operadores de Matrizes (Arrays):
Define uma matriz de 0 a x elementos. Estrutura -> nome [ponteiro], onde o
ponteiro indica o valor a ser buscado na tabela.
Ex:
unsigned int matriz (5);
/*a matriz definida tem 6 elementros */
........
x = matriz (2)
/* x = terceiro valor da matriz */
8.4) - Diretivas da linguagem C:
#define
<nome> <sequencia> /* faz o papel da direta EQUATE no Assembler*/
Ex:
#define
#define
a inicializacao */
#include
Ex:
#include
pilha 70h
inicio_par TMOD = 0x11; IE = 0x82
<arquivo>
/* inicio_par representam
/*o arquivo é incluído no programa em questão */
<8051.H>
8.5) - Funções e declarações especiais:
cos(x)
sin (x)
sqrt (x)
pow (x,y)
log10(x)
/* x elevado a potencia y */
48
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
8.6) - Formato básico de um programa em C:
O formato do programa em linguagem C segue uma estrutura simples: sempre
possui um programa em loop principal e todas as declarações são cercadas por { .
declarações
/* declarações de variáveis */
main ()
{
/* rotina principal obrigatória */
declarações
/* declarações do programa principal */
}
rotina1
{
/* sub-rotinas */
declarações
}
.............
rotina N
{
declarações
}
8.7) - Tipos de Estruturas em C:
As diversas declarações possíveis podem ser dividas em alguns tipos:
8.7.1) - Condicional IF:
Testa uma condição, realizando-a se verdadeira. Caso contrário, ou sai da estrutura
ou executa a declaração contida na estrutura 'else'
if
else
(estrutura de teste)
{
declarações /* para uma declaração simples não é necessário { }
}
/* não obrigatório */
{
declarações
}
Ex:
if
(teste = = a+b)
{
c = 1;
49
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
d = ++;
}
else
c = 2;
Podemos ter estrutura de if dentro de outras estruturas condicionais (if aninhados)
Ex:
if
(a = = 5)
teste = 1;
else
if (a = = 7)
teste = 2;
else
if (a = = 9)
{
teste = + +;
a=--;
}
8.7.2) - Condicional FOR
Realiza uma determinada operação enquanto uma determinada condição não for
atendida.
for
*/
(inicialização; condição; incremento)
/*se não for colocado nada, loop infinito
{
declaração
/* se houver apenas 1 declaracao não é necessário { } */
}
Ex:
for
(a=2; a < 101; a++)
{
teste = teste + a;
resultado = ++;
}
for
(;;)
{
motor = desligado;
}
50
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
8.7.3) - Condicional WHILE
Realiza uma operação enquanto uma determinada condição estiver sendo atendida.
while (condição)
{
declaração
}
/* se a condição for 1, o condicional é infinito */
/* se houver apenas uma declaração não é necessário {} */
Ex:
soma = 0;
a = 0;
while (a < 101)
{
soma = soma + a;
a++;
}
8.7.4) - Condicional DO / WHILE
Estrutura que realiza uma declaração enquanto houver alguma condi;cão seja
atendida.
do
{
(declaração);
}
while (condição)
Ex:
do
{
b=++;
motor = ligado;
}
while (chave = ligada)
8.7.5) - Condicional SWITCH
Testa uma variável e executa um grupo de declarações testando uma condição
particular.
switch (variável)
51
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
{
case constante1:
{
(declarações)
break;
}
case constante2:
{
(declarações)
break;
}
case constante3:
{
(declarações)
break;
}
}
8.8) - Exemplo de utilização (exemplo 1 - pg 230 - Vidal)
1) - Rotacionar 8 leds do port P1 para esquerda ou para a direita dependendo de uma chave
(P3.5) com intervalo de 1 segundo.
; programa em Assembler - pg 172 - Vidal
LED0 BIT P1.0
LED1 BIT P1.1
LED2 BIT P1.2
LED3 BIT P1.3
LED4 BIT P1.4
LED5 BIT P1.5
LED6 BIT P1.6
LED7 BIT P1.7
CH1 BIT P3.5
/* Programa em linguagem C - pg 230*/
#include <at89x52.h> /*biblioteca
8051*/
#define led0 P1_0
#define led1 P1_1
#define led2 P1_2
#define led3 P1_3
#define led4 P1_4
#define led5 P1_5
#define led6 P1_6
#define led7 P1_7
ORG 0
#define ch1 P3_5
INICIO: MOV TMOD,#00010000
unsigned char contador;
MOV TCON,#00
;desliga unsigned char saida;
T1
MOV P1,#00
;desliga /* inicio do programa */
leds
void main ()
MOV A,#01
{
ESP:
LCALL DELAY
TMOD = 0x10;
JNB
CH1,INV
TCON = 0;
RL
A
led0 = 0;
SJMP ESP
led1 = 0;
52
MICROPROCESSADORES - VOL. II
INV:
RR
SJMP
A
ESP
;subrotina de tempo de 1 seg. utilizando o
timer T1
;clock de 12 Mhz
DELAY: MOV RO,#20
REP:
MOV TH1,#3CH
MOV TL1,#0AFH
SETB TR1
JNB
TF1,$
;aguarda
interrupcao
CLR
TF1
DJNZ R0,REP
CLR
TR1
RET
END
IVAIR REIS N. ABREU
led2 = 0;
led3 = 0;
led4 = 0;
led5 = 0;
led6 = 0;
led7 = 0;
saida = 1;
while (1)
/*loop eterno */
{
P1 = saida;
delay();
if (ch1 == 1)
{
saida = saida <<1;
if (saida == 0)
saida = 1;
}
else
{
saida = saida > > 1;
if (saida == 0)
saida = 0x80;
}
}
}
/* subrotinas
delay ()
{
for (contador = 0;contador < 14;
contador++)
{
TH1 = 0x3C;
TL1 = 0xAF;
TR1 = 1;
while (!TF1)
/*AGUARDA TF1=1*/
TF1 = 0;
}
TR1 = 0;
}
8.9) - Utilizando o compilador uVision51 (Keil):
- Descompactar arquivo C51eval.zip no diretório c:\keil
- No diretório \bin -> arquivo Uvw51e.exe (aplicativo a ser executado)
53
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
arquivo Uvwin -> help
- No diretório \INC -> bibliotecas
- Editar o arquivo abrindo o arquivo novo (por exemplo TESTE.C)
- Abrir um projeto novo (Project -> New Project -> TESTE.PRJ)
Source Files -> ADD (TESTE.C)
- Compilar -> Project -> Build Project
-> se não houver erros -> teste.hex
54
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
9) - Processamento Digital de Sinal
9.1) INTRODUÇÃO AO PROCESSAMENTO DIGITAL DE SINAIS
Supressores de eco, eliminadores
de interferências,
detecção de incêndios florestais, análise de imagens de
satélites
metereológicos,
estudo
de
dados
sísmicos,
acompanhamento de testes nucleares ou simplesmente análise de
parâmetros vocais para identificação ou reconhecimento de
voz. Estas são algumas aplicações possíveis do Processamento
Digital de Sinais (DSP).
DSP diz respeito a representação de sinais através de
uma
seqüência
numérica/simbólica
e
o
seu
posterior
processamento para estimar parâmetros do sinal original e/ou
modificá-lo. Este processamento é normalmente realizado com
o auxílio de algoritmos matemáticos, o qual o mais comum é a
soma de produtos, representada pela fórmula:
n
(1.1)
Vout = ai.bi
i
onde ai e bi representam coeficientes numéricos de
uma seqüência qualquer de dados obtida de uma determinada
entrada amostrada e Vout é a saída processada.
Apesar de ser uma ferramenta que ficou mais conhecida
recentemente com o aperfeiçoamento da integração em alta
escala dos circuitos integrados e o aperfeiçoamento de
algoritmos numéricos, o DSP teve suas origens nos séculos
XVII e XVIII com o desenvolvimento de análises numéricas tais
como interpolação, integração e diferenciação. Podemos dizer
que até recentemente o processamento de sinais elétricos era
basicamente analógico, com algumas honrosas exceções, datadas
da década de 50, onde dados geofísicos eram gravados em fitas
magnéticas para um posterior processamento em computadores
digitais cujo tamanho em nada lembram os modernos "laptops"
ou "notebooks" presentes em nossa vida cotidiana.
Durante
este período, os computadores digitais foram mais uma
alternativa para a simulação e aperfeiçoamento de sistemas
analógicos, com a conversão analógico/digital, processamento
e conversão digital/analógica final. Este processo foi muito
comum na implementação dos
primeiros codificadores de voz
(VOCODERS) pelos Laboratórios Bell e Lincon (M.I.T.), onde as
simulações computacionais foram fundamentais no ajuste dos
filtros necessários para sua execução.
Apesar desta predominância dos sistemas analógicos, o
processamento digital lentamente começou a diferenciar-se,
principalmente com o aumento da complexidade dos algoritmos.
Rotinas para filtros homomórficos ou a análise cepstral foram
desenvolvidos apesar de não serem praticáveis pela ainda
55
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
incipiente tecnologia dos semicondutores.
Estes novos
algoritmos se mostravam bastante úteis nos sistemas de
remoção de eco ou de compressão de voz. A grande dificuldade
na implementação das técnicas citadas na época era o cálculo
da Transformada de Fourier, praticamente impossível com os
computadores analógicos.
Este problema foi minimizado em
meados da década de 60, com o desenvolvimento de uma classe
de algoritmos conhecida como Transformada Rápida de Fourier
(FFT).
A grande vantagem destas rotinas era a redução do
tempo de processamento, fator fundamental para os sistemas
computacionais lentos e caros
da época.
Outro fator
introduzido pela FFT foi
sua concepção de tempo discreto,
ao contrário
dos sistemas de tempo contínuo vigentes,
auxiliando
em
muito
o
desenvolvimento
dos
algoritmos
puramente digitais, diminuindo aquela impressão que o DSP era
simplesmente uma aproximação dos sistemas analógicos.
Mas mesmo com estes aperfeiçoamentos, a velocidade ainda
era o grande obstáculo, principalmente para aplicações que
exigiam tempo real de processamento
como os sistemas de
reconhecimento do voz.
A grande mola propulsora do DSP foi o desenvolvimento da
técnica de fabricação de circuitos integrados a partir da
década de 70. O surgimento de circuitos integrados em alta
escala (LSI) permitiu a implementação de processadores
digitais inteiros em um único chip.
Circuitos integrados
especializados
na
execução
de
algoritmos
aritméticos
possibilitaram a implementação de aplicações em tempo real.
Algoritmos para filtros digitais com taxas de amostragens na
faixa de megahertz tornaram-se práticos.
Processamento de
voz e imagens em tempo real já tornou-se possível.
Outras
áreas começaram a ser bastante beneficiadas, como a de
telecomunicações, aumentando a economia e flexibilidade tanto
nos sistemas de chaveamento como transmissão.
Passaremos a analisar os requisitos básicos de um
circuito integrado dedicado a realizar operações de DSP,
diferenciando-se desta forma dos microprocessadores de uso
geral do mercado. Utilizaremos como exemplo o DSP TMS320C25
da Texas Instruments, a despeito de existir um grande número
de fabricantes no mercado tais como a Analog Devices, AT&T,
Motorola e NEC, etc.
9.2) - Características da arquitetura de um circuito integrado dedicado a
DSP:
Os chips dedicados a funções que envolvam DSP apresentam
algumas características comuns que passaremos a analisar:
9.2.1) - Arquitetura Harvard: em contraste com a arquitetura
"von Neumann", que apresenta um único espaço de memória para
56
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
códigos de operação e dados, os sistemas baseados na
arquitetura Harvard possuem duas estruturas separadas de
memória para os códigos do programa e para os dados. Apesar
disto exigir um controle maior por parte do processador (pois
passam a existir dois controles de barramentos de endereço e
dois controles de
barramentos de dados), o poder de
processamento torna-se muito mais poderoso e principalmente
mais rápido, fatores decisivos na execução dos
algoritmos
numéricos existentes nas aplicações dos DSPs.
9.2.2) - Unidades para multiplicação e deslocamento separadas
da unidade lógica aritmética principal: devido a necessidade
de realizar operações de multiplicação e deslocamentos nos
algoritmos numéricos, existem unidades separadas para a
realização destas operações, otimizando-as.
Devido a
natureza repetitiva destas operações, um sistema de prevenção
de "estouro" (overflow) do resultado é necessário.
9.2.3) - Flexibilidade e rapidez na execução das instruções:
além de unidades separadas para realização de algoritmos
numéricos, é necessário a realização destas operações em
ciclos de busca ("fetch") curtos, decodificação e execução
otimizados de forma a
diminuir o tempo de execução das
instruções e aumentando consequentemente a velocidade do
sistema.
Alguns processadores DSP realizam instruções
inteiras aritméticas em um único ciclo de máquina.
Outros,
como é o caso do TMS320C25, utilizam uma estrutura denominada
"pipeline", onde em um único ciclo de clock são realizadas
simultaneamente o ciclo de busca de uma determinada
instrução, o ciclo de decodificação da instrução anterior e o
ciclo de execução de outra instrução.
9.2.4) - Operações de "loop" incondicional e condicional:
algoritmos
repetitivos
envolvendo
operações
lógica/aritméticas constituem uma das principais estruturas
utilizadas nos programas de aplicativos de DSPs.
Estas
estruturas, do tipo "If ... Then" ou "For ... Next",
necessitam
de
instruções
de
salto
incondicional
ou
condicional que dependem de determinadas condições contidas
principalmente nos registradores de "status" do processador,
tais como condição de estouro (OVM)), "carry" (C), zero (Z)
ou teste/controle (TC).
Como já ressaltado, o circuito integrado DSP TMS320C25
será utilizado como exemplo ilustrativo das características
descritas acima.
Este circuito integrado faz parte da
segunda geração de DSPs da Texas, apresentando como
principais características: ciclo de instrução de até 100 ns
(para clock de 40 MHz), 544 posições de
16 bits de RAM
interna, 4048 posições de 16 bits de ROM interna, 128 K/16
57
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
bits de acesso de memória de programa/dados externa e
acumulador principal de 32 bits. A figura 1 nos mostra um
diagrama em blocos da arquitetura interna do chip em questão.
Figura 1
Com o auxílio desta ilustração analisaremos a seguir as
características gerais fornecidas acima que possibilitam o
TMS320C25 desempenhar-se bem em situações críticas como em
tempo real nos aplicativos com DSPs.
Pode-se observar a existência dos sinais PS e DS,
responsáveis pelo controle da natureza do
barramento de
dados e controle.
Com o sinal PS em nível baixo, temos o
caracterizado o acesso à memória de programa.
Já com o
sinal DS em nível baixo temos o controle da memória de dados,
caracterizando a arquitetura Harvard explicada no item 2.1).
A figura 2 nos mostra um detalhamento maior da unidade
aritmética
do
TMS320C25.
Pode-se
observar
unidades
independentes para multiplicação, com a presença de um
registrador temporário de 16 bits (TR) e um registrador de de
produto (PR) de 32 bits para armazenamento do resultado.
Temos também uma unidade de deslocamento (bloco "Scaling
58
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
Shifter") com capacidade também de 16 bits.
Finalmente a
figura mostra a unidade aritmética principal (ALU) com
capacidade de 32 bits, acumulador principal composto de 2
registradores de 16 bits (ACCH e ACCL), bit carry (C) e dois
registradores especiais para execução de rotações para a
esquerda (SFL) e direita (SFR), dotando desta forma o sistema
com uma grande capacidade de processamento aritmético,
conforme indicado no item 7.2.2).
figura 2
Como já foi ressaltado, para agilizar a execução das
instruções, o TMS320C25 utiliza a operação "pipeline",
representada na figura 3.
Pode-se observar a execução
simultânea de busca, decodificação e execução de 2 ou 3
instruções
simultaneamente,
aumentando
grandemente
a
velocidade de execução das rotinas.
59
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
figura 3
Finalmente, o TMS320C25 é dotado de uma série de
instruções de salto condicional e incondicional viabilizando
a execução de estruturas com "loops", tão fundamentais nas
rotinas de DSP, tornando-as mais simplificadas e menores.
9.3) - Conclusão:
Apesar do grande avanço que sistemas baseados em D.S.P.
sofreram com o desenvolvimento da integração em alta escala
produzindo chips específicos , tais
como o analisado neste
artigo, e com algoritmos numéricos mais poderoso, não se vê
saturação nas aplicações deste sistemas. Nos próximos anos a
área de telecomunicações, de processamento de imagem e som e
sistemas
de
controle
serão
ainda
muito
beneficiadas,
proporcionando economia e flexibilidade aos sistemas citados.
7.4) - Bibliografia para P.D.S.:
- DISCRETE-TIME SIGNAL
Prentice Hall,1989
PROCESSING.
Oppenhein
e
Schafer.
- A SIMPLE APPROACH TO DIGITAL SIGNAL PROCESSING.
Craing e Ewers Gillian. Wiley Interscience.
Marven,
- DIGITAL SIGNAL PROCESSING A LABORATORY APPROACH USING PCDSP. Alkin, Oktay. Prentice Hall
- DIGITAL SIGNAL PROCESSING
FAMILY. Texas Instruments.
APPLICATIONS
WITH
THE
TMS320
60
MICROPROCESSADORES - VOL. II
IVAIR REIS N. ABREU
ANEXO I
SEMINÁRIO DE MICROPROCESSADORES
Em grupos de até 5 alunos, preparar um seminário em Power Point contendo os
itens mínimos abaixo do microcontrolador escolhido:
- HISTÓRICO DO FABRICANTE
- CARACTERISTICAS BÁSICAS
- ARQUITETURA BÁSICA
- MAPEAMENTO DA MEMÓRIA INTERNA/EXTERNA
- DESCRIÇÃO BÁSICA DOS REGISTRADORES DE CONTROLE (TIMER,
INTERRUPÇÃO, SERIAL, WATCH-DOG, ETC.)
- CONJUNTO DE INSTRUÇÕES MOSTRANDO O SIGNIFICADO BÁSICO
DAS MESMAS.
- APLICAÇÃO MOSTRANDO O SISTEMA MÍNIMO E UM PROJETO
EXEMPLO TÍPICO COM PROGRAMA EM ASSEMBLER.
- ENTREGAR UMA APOSTILA COM ENCADERNAÇÃO SIMPLES COM AS
INFORMAÇÕES ACIMA E UMA CÓPIA DO DOWN-LOAD DO SITE DA INTERNET
DA ARQUITETURA E DO CONJUNTO DE INSTRUÇÕES.
- ENTREGAR PARA OS ALUNOS UMA FOLHA COM O RESUMO DO
SEMINARIO, MOSTRANDO AS CARACTERÍSTICAS DO PROCESSADOR.
LISTA DE MICROCONTROLADORES:
MICROCHIP (WWW.MICROCHIP.COM)
1. PIC12F629
2. PIC16F648
3. PIC18F1220 (ou algum outro chip da família 18Fxx)
TEXAS INSTRUMENTS (www.ti.com)
7. MSP430F135
MOTOROLA (WWW.MOTOROLA.COM)
8. 68HC05
9. 68HC11
RABBIT (www.rabbitinfo.com)
10. RCM3700
CYPRESS (www.cypress.com)
11. PSOC
61
Download