Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Engenharia de
Telecomunicaes e Informtica
Stack
Timers/Counters
Microcontroladores
2 Ano A07
1
Directivas
Categoria
Controlo do
estado
Definio de
smbolos
Directiva
Sntaxe
Funo
Especifica um valor para contador de
localizao do segmento activo
ORG
ORG
END
END
USING
USING
expresso
expresso
SEGMENT
Smbolo
SEGMENT
tipo_de_segmento
EQU
Smbolo
EQU
expresso
SET
Smbolo
SET
expresso
DATA
Smbolo
DATA
expresso
IDATA
Smbolo
IDATA
expresso
XDATA
Smbolo
XDATA
expresso
BIT
Smbolo
BIT
expresso
CODE
Smbolo
CODE
expresso
Directivas
Categoria
Incializao e
reserva de
armazenamento
Program linkage
Directiva
Sntaxe
Funo
DS
[LABEL:]
DS
expresso
DBIT
[LABEL:]
DBIT
expresso
DB/DW
[LABEL:]
DB/DW
expresso
PUBLIC
PUBLIC
EXTRN
EXTRN
Tipo_segmento(smbolo
[,smbolo] [...], ...)
Seleco de
Segmentos
NAME
NAME
Nome_do_mdulo
RSEG
RSEG
Nome_do_segmento
CSEG
CSEG
[ AT endereo ]
...
DSEG
[ AT endereo ]
XSEG
XSEG
[ AT endereo ]
outro segmento
A07-3
Exemplos
A07-4
A07-5
A07-6
Ateno:
Como a stack aps o reset est localizada na
posio 7H, que corresponde a zona dos
bancos de registos, conveniente mudar a sua
localizao caso queiramos usar os bancos.
Por ex.:
A07-7
Ateno: Exemplo
Nota #2:
A pilha pode ser inicializada para a
posio 7FH.
Como o acesso indirecto atravs
do SP, a pilha implementada na
IDATA e o espao de SFR est
salvaguardado.
Ateno #1:
Ao ser colocado valores na pilha o
segundo banco ser afectado
80H
7FH
30H
2FH
Exemplo:
Inicializamos a SP
para
20H
1FH
18H
17H
10H
0FH
08H
07H
00H
A07-8
A07-9
2 bytes
2 cycles
1100 0000
direct
Na operao de PUSH,
1. O valor do stack pointer incrementado em uma unidade.
SP
(SP)
SP + 1
(directo)
A07-10
SP
Programa:
PUSH
PUSH
DPL
DPH
0BH
01H
23H
09H
A07-11
2 bytes
2 cycles
direct
Na operao de POP,
1. O contedo da posio da RAM interna apontada pelo stack pointer
lido e o valor do stack pointer decrementado.
2. O valor lido carregado na posio da RAM indicada como argumento
da operao.
(directo)
(SP)
((SP))
(SP) - 1
A07-12
SP
32H
Programa:
30H
01H
23H
20H
POP
POP
POP
DPH
DPL
SP
A07-13
A07-15
banco
indica ao assembler qual o banco em cada
momento
USING 1
PUSH AR7
Nota:
Antes de usar a diretiva USING deve-se comutar de banco atravs da
programao do registo PSW
Esta diretiva necessria para se poder fazer PUSH e POP da forma
representada acima
PUSH e POP apenas aceitam endereos absolutos, por isso
necessrio USING, para que o valor de ARx seja corretamente
calculado
A07-17
Nota:
Antes de usar a directiva using deve-se comutar de
banco atravs da programao do registo PSW;
Em vez de se utilizar MOV PSW,#18H podamos ter
utilizado ORL PSW,#18H? (ps e contras?)
A07-18
Ciclo Mquina
A07-19
R2,#X
R2,$
DELAY2: MOV
D2LOOP: MOV
DJNZ
DJNZ
RET
R3,#Y
R2,#X
R2,$
R3,D2LOOP
DELAY3: MOV
D3L1:
MOV
D3L2:
MOV
DJNZ
DJNZ
DJNZ
RET
R4,#Z
R3,#Y
R2,#X
R2,$
R3,D3L2
R4,D3L1
NC=1+2*X+2=3+2*X
X=1NC=5
X=0NC=515
delay (seg)=12*NC/(frequncia cristal)
NC=(3+2*X)*Y+3
A07-20
Difceis de controlar:
Para alm de ocuparem registos, o valor a colocar em cada registo
no simples de obter. Muitas vezes opta-se por implementar uma
rotina de delay fixo (ex:1000s) e invoc-la vrias vezes;
Dependem:
Do nmero de registos e dos seus valores, do n de ciclos mquina
necessrios execuo das instrues e do cristal utilizado utilizado.
A07-21
SETB
CLR
SJMP
P1.1
P1.1
ONDA
;NC=11s
;NC=11s
;NC=22s
T=4sf=250KHz
D=ton/T*100=1s/4s=25%
Timers/Counters
Como se divide um sinal de relgio?
O sinal de clock
seria obtido atravs
do relgio do
microcontrolador
temporizador
ou
atravs de um sinal de
relgio externo ligado a um
pino de E/S do
microcontrolador contador de eventos
A07-23
Timers/Counters
O 8051 tem duas unidades de temporizao e contagem:
Timer 0 e Timer 1;
Os modelos da famlia 8052 tm mais uma unidade: Timer 2.
Timers/Counters
No modo de contagem, os registos do timer so
incrementados sempre que h uma transio de 1-para-0 no
respectivo pino de entrada (T0, T1 ou T2).
O pino de entrada amostrado durante o estado S5P2 do
ciclo de instruo.
A07-25
Timers/Counters
A07-26
Timers/Counters
TMOD: 89h;
TL0:
8Ah
TL1:
8Bh
TH0:
8Ch
TH1:
8Dh
A07-27
Timers/Counters
Registo: TMOD (89h)
MSB
GATE1
LSB
C/T1
M11
M01
GATE0
Timer 1
C/T0
M10
M00
Timer 0
C/Tx:
Timers/Counters
Registo: TMOD (89h)
M1, M0:
0 0
0 1
1 0
1 1
1 1
GATE
M1
Timer 1
M0
GATE
C/T
M1
M0
Timer 0
A07-29
Timers/Counters
Registo: TCON* (88h)
MSB
TF1
LSB
TR1
TF0
TR0
IE1
IT1
IE0
IT0
Timers/Counters
Timer1(ou 0): funcionamento no modo 0
OSC
x 1/ 12
C/ T = 0
CON TROL
TL1 [ 5 bi t s]
TH 1 [ 8 bi t s]
TF1
I N TERRUPT
C/ T = 1
T1 PI N
TR1
13 bits
GATE
I N T1 PI N
A07-31
Timers/Counters
Timer1(ou 0): funcionamento no modo 1
OSC
x 1/ 12
C/ T = 0
CON TROL
TL1
TH 1
TF1
I N TERRUPT
C/ T = 1
T1 PI N
registo de 16-bit
TR1
GATE
I N T1 PI N
A07-32
Timers/Counters
Timer1(ou 0): funcionamento no modo 2
OSC
x 1/ 12
registo de 8-bit
C/ T = 0
CON TROL
TL1
TF1
I N TERRUPT
C/ T = 1
T1 PI N
TR1
GATE
I N T1 PI N
TH 1
Sempre que ocorre o overflow do registo TLx, este recarregado com o valor de THx.
A07-33
Timers/Counters
Timer0: funcionamento no modo 3
OSC
x 1/ 12
1 / 1 2 f osc
1 / 1 2 f osc
C/ T = 0
CON TROL
TF0
TH 0
TF1
I N TERRUPT
C/ T = 1
T0 PI N
TR0
GATE
I N T0 PI N
CON TROL
1 / 1 2 f osc
I N TERRUPT
TR1
Timer 1: pode ser usado como baud rate generator para porta srie. Este timer desativado
colocando-o no modo 3 e, ativado num dos outros modos
A07-34
Timers/Counters
O timer 2 um timer/counter de 16-bit (apenas na famlia
8052);
Este permite trs modos de funcionamento:
Modo 0: temporizador/contador de 16-bit com autocarregamento;
Modo 1: modo de captura de 16-bit;
Modo 2: gerador de baud-rate para as comunicaes
srie.
A07-35
Timers/Counters
Registos usados na programao do timer 2:
T2CON: Permite controlar a activao e verificar o estado
dos timers P89C51 ainda tem o T2MOD;
TH2/TL2: Registo de 16-bit (TH2: MSB, TL2: LSB);
RCAP2H/RCAP2L: Registo de 16-bit usado na captura e
recarregamento;
[IE: Permite controlar a gerao da interrupo associada aos timers]
(T2CON*:0C8h;T2MOD:0C9h;TH2:0CDh;TL2:0CCh;RCAP2H:0CBh;RCAP2L:0CAh) SFR
A07-36
Timers/Counters
Registo: T2CON* (0C8h)
MSB
TF2
LSB
EXF2
RCLK
TCLK EXEN2
TR2
C/T2 CP/RL2
TF2:
A07-37
Timers/Counters
Registo: T2CON* (0C8h)
MSB
TF2
LSB
EXF2
RCLK
TCLK EXEN2
TR2
C/T2 CP/RL2
Arranque/paragem do timer 2
C/T2:
A07-38
Timers/Counters
Registo: T2CON* (0C8h)
MSB
TF2
LSB
EXF2
RCLK
TCLK EXEN2
TR2
C/T2 CP/RL2
A07-39
Timers/Counters
Registo: T2MOD* (0C9h)
MSB
TF2
LSB
EXF2
RCLK
TCLK EXEN2
TR2
C/T2 CP/RL2
DCEN (Down Counter Enable bit): Se o bit estiver ativo,o pino T2EX
controla a direo da contagem
(T2EX=0 contagem decrescente)
(T2EX=1 contagem crescente)
T2OE (Timer 2 Output Enable bit): Ativa o pino P1.0 como sada de clock
A07-40
Timers/Counters
Timer 2: Modo 0 / Auto-reload
OSC
x 1/12
C/T = 0
CONTROL
TL2
TH2
TF2
C/T = 1
TR2
T2 PIN
RELOAD
TRANSITION
DETECTOR
INTERRUPT
RCAP2L
RCAP2H
CONTROL
EXF2
T2EX PIN
EXEN2
Timers/Counters
Timer 2: Modo 1 /Captura
OSC
x 1/ 12
C/ T = 0
CON TROL
TL2
TH 2
TF2
C/ T = 1
TR2
T2 PI N
TRAN SI TI ON
DETECTOR
CAPTURE
CON TROL
I N TERRUPT
RCAP2 L
RCAP2 H
EXF2
T2 EX PI N
EXEN 2
Timers/Counters
Timer 2: Modo 2
A07-43
Timers/Counters
Exemplo
Escreva um programa que gere uma onda quadrada com 1 KHz de frequncia
no pino P1.0, usando o timer 0.
Anlise:
1.
Repare que o perodo de uma onda quadrada de 1KHz de 1000 s, sendo que o tempo em alto
igual ao do tempo em baixo 500 s;
2.
Como este intervalo de 500 s superior a 256 s torna-se impossvel usar o timer no modo autoreload porque neste modo funciona como temporizador de 8-bit;
3.
i.
A07-44
Timers/Counters
Exemplo
Qual o problema com esta soluo?