Upload
cion-cassiano-basso
View
96
Download
4
Embed Size (px)
DESCRIPTION
Programação e utilização dos temporizadores/contadores do microcontrolador 8051
Citation preview
Nmero
UTFPR Campus Curitiba - Departamento Acadmico de Eletrnica
Curso Tcnico em Eletrnica Microcontroladores 1 - Prof. Cion nov/2010Diagrama em Blocos do 8051
Pinos da Porta P3 Funes EspeciaisPinoNomeFuno
P3.0RxDEntrada da recepo serial
P3.1TxDSada da transmisso serial
P3.2INT0Entrada da interrupo 0
P3.3INT1Entrada da interrupo 1
P3.4T0Entrada do contador 0
P3.5T1Entrada do contador 1
P3.6WRSinal de operao de escrita na RAM
P3.7RDSinal de operao de leitura na RAM
Interrupes
FonteTipoPinoVetor da ISRPrioridade
RESETNo Mascarvel1RST0000H(
INT0MascarvelP3.20003H
C/T 0MascarvelInterna C/T 0000BH
INT1MascarvelP3.30013H
C/T 1MascarvelInterna C/T 1001BH
SerialMascarvelInterna Serial0023H
1No Mascarvel Interrupo que no pode ser desabilitada por softwareRegistradores Associados Interrupo
IE Habilitao da Interrupo (Interrupt Enable)
Endereo A8H (bit enderevel)
End. do bitAFHAEHADHACHABHAAHA9HA8H
Nm. Do bitIE.7IE.6IE.5IE.4IE.3IE.2IE.1IE.0
Nome do bitEA--ESET1EX1ET0EX0
FinalidadeHabilitao de todas as interrupesHabilita int. pela serialHabilita int. pelo
C/T 1Habilita inter. pelo pino INT1 (P3.2)Habilita inter. pelo
C/T 0Habilita int. pelo pino INT0 (P3.2)
Como efetuar o set/clear de um bit ou do byte no reg. IESETB IE.7
ou
SETB EA
ou
SETB 0AFH
ou
MOV IE,#80H
IP Prioridade da Interrupo (Interrupt Priority)
Endereo B8H (bit enderevel)
BFHBEHBDHBCHBBHBAHB9HB8H
IP.7IP.6IP.5IP.4IP.3IP.2IP.1IP.0
---PSPT1PX1PT0PXO
Prioriza int. pelo canal serialPrioriza int. do T/C1Prioriza int. do pino INT1 (P3.3)Prioriza int. pelo T/C0Prioriza int. pelo pino INT0 (P3.2)
TCON Controle do Temporizador (Timer Control)
Endereo 88H (bit enderevel)
8FH8EH8DH8CH8BH8AH89H88H
TCON.7TCON.6TCON.5TCON.4TCON.3TCON.2TCON.1TCON.0
TF1TR1TF0TR0IE1IT1IE0ITO
Flag de overflow do C/T 1Disparo do C/T 1Flag de overflow do C/T 0Disparo do C/T 0Flag que indica ocorrncia de borda de descida no pino INT1Controle do tipo de int. no pino INT1
(P3.3)
Flag que indica ocorrncia de borda de descida no pino INT0Controle do tipo de int. no pino INT0
(P3.2)
HWSWHWSWHWSWHWSW
Se
TF1 == 0, sem overflow0 ( Stop1 ( StartSe
TF0 == 0, sem overflow0 ( Stop1 ( Start0 ( por nvel 0
1 ( por borda de descida0 ( por nvel 0
1 ( por borda de descida
Se
TF1 == 1, ocorreu overflowSETB TCON.6
ou
SETB TR1
ou
SETB 8EHSe
TF0 == 1, ocorreu overflowSETB TCON.4
ou
SETB TR0ou
SETB 8CH
Modelo de estrutura de programa para a interrupo externa no pino INT 0.
RtuloInstruoComentrio
ORG 0000H; reset
JMP Inicio; salta endereo do vetor interrupo da INT 0
ORG 0003h; vetor interrupo da INT 0
LMP ISR0; desvia para a Rotina de Servio de Interrupo
; Inicializao dos registradores de controle
Inicio:MOV IE,#10000001B; inicializa registrador IE com EA = 1 e EX0 = 1
MOV TCON,#1; dispara INT 0 com borda de descida IT0 = 1
; Programa principal
Loop:
instruo 1
instruo 2
instruo n
JMP Loop; incio do programa principal
; ...
; ...
; programa em loop, aguardar interrupo
; Rotina de servio da interrupo (ISR Interrupt Service Routine)
ISR0:
instruo 1
instruo 2
instruo nRETI; incio da ISR
; ...
; ...
; retorna da interrupo
Exemplo de Aplicao:
Este programa comuta o estado de dois LEDs (LED0 ligado ao pino P1.0 e LED1 ligado ao pino P1.1) quando um pedido de interrupo e provocado no pino INT0.
RtuloInstruo
Comentrio
ORG 0000H; reset
JMP Inicio; salta endereo do vetor interrupo da INT 0
ORG 0003H; endereo do vetor interrupo da INT 0
JMP ISR0; desvia para a Rotina de Servio de Interrupo
Inicio:MOV IE,#10000001B; inicializa registrador de habilitao da interrupo
MOV TCON,#1; dispara INT 0 com borda de descida
CLR P1.0; ativa LED0
SETB P1.1; apaga LED1
Loop:JMP Loop; programa entra em loop e aguarda interrupo
ISR0:SETB P1.0; apaga LED0
CLR P1.1; ativa LED1
RETI; retorna da interrupo
REGISTRADORES LIGADOS AOS CONTADORES/TEMPORIZADORES
TMOD Modos do Temporizador (Timer Mode)
Endereo 89H (byte enderevel)
Controle do C/T 1Controle do C/T 0
bit 7 bit 6bit 5bit 4bit.3bit 2bit 1bit 0
T1GT1C/TT1M1T1M0T0GT0C/TT0M1T0M0
Gate do C/T 1Seleo do contador ou temporizador do C/T1Definio
do modo de operao do C/T 1Definio
do modo de operao do C/T 1Gate do C/T 0Seleo do contador ou temporizador do C/T 0Definio do modo de operao do C/T 0Definio do modo de operao do C/T 0
0 ( Timer1 ( Counter0 ( Timer1 ( Counter
Modo 000Modo 000
Modo 101Modo 101
Modo 210Modo 210
Modo 311Modo 311
REGISTRADORES DE PR-CARGA
1. Contador/Temporizador 0 (C/T 0)TL0 Byte Menos Significativo - Endereo: 8AH
D7D6D5D4D3D2D1D0
TH0 Byte Mais Significativo - Endereo: 8CH
D7D6D5D4D3D2D1D0
2. Contador/Temporizador 1 (C/T 1)
TL1 Byte Menos Significativo - Endereo: 8BH D7D6D5D4D3D2D1D0
TH1 Byte Mais Significativo - Endereo: 8DHD7D6D5D4D3D2D1D0
Todos os quarto registradores so somente bytes endereveisModelo Simplificado dos Modos de Operao 1 e 2 dos Contadores/Temporizadores
Roteiro para utilizao dos Contadores/Temporizadores
1. Definir a fonte dos pulsos para a operao do(s) C/T(s), como:
(a) Temporizador (fonte interna): pulsos para entrada do(s) contador(es) o clock/12 (bit C/Ti = 0, do registrador TMOD).
(b) Contador (fonte externa): pulsos aplicados aos pinos T0 (P3.4) ou T1 (P3.5). como:
(b.1) Contagem de eventos bit G0 = 0 ou bit G1 = 0, para C/T 0 e C/T 1, respectivamente.
(b.2) Largura de pulso bit G0 = 1 ou bit G1 = 1, para C/T 0 ou C/T 1, respectivamente. A entrada INT0ou INT1 determina o intervalo de tempo de contagem dos pulsos.
2. Definir o modo de operao do(s) C/T(s), como:
(a) Modo 0 Contador /Temporizador divisor de fclock/32.
(b) Modo 1 Contador/Temporizador de 16 bits.
(c) Modo 2 Contador/Temporizador de 8 bits com recarregamento automtico.
(d) Modo 3 Dois contadores/temporizadores de 8 bits no T/C 0 (T/C 1 inoperante) neste modo
3. Definir a forma de deteco do final da operao de contagem/temporizao, como:
(a) polling consultar por software o estado do flag TF0 ou TF1 do registrador TCON, para C/T 0 ou C/T1, respectivamente.
(b) Interrupo habilitar a interrupo por meio do C/T 0 ou C/T1 (bits ET0 e ET1 do registrador IE, respectivamente).Exemplos:
1. Este programa opera com um gerador de pulsos no pino P1.0, com 200 s de durao. Utiliza o C/T 0 no modo 2 (contador de 8 bits com recarga automtica).
RtuloInstruoComentrio
ORG 0000H; reset
Inicio:MOV TMOD,#00000010B; define modo 2 no T/C 0
MOV TL0,#56H; valor para gerar 200 contagens (256-56=200)
MOV TH0,#56H; valor de recarga de TL0
SETB TR0; dispara contagem
Loop: JNB TF0,Loop; testa overflow da contagem em T/C 0 no bit TF0
CLT TR0; parade da contagem
CPL P1.0; complementa bit p1.0
CLR TF0; limpa flag de overflow da contagem
SETB TR0; habilita contagem
JMP Loop; retorna ao loop
2. O programa a seguir opera como temporizador de 65 ms no C/T 1, com emprego de interrupo. Ao final da temporizao, o LED 1 comuta seu estado. RtuloInstruoComentrio
ORG 0000H; reset
JMP Inicio
; salta para o inicio do programa principal
ORG 001BH; vetor interrupo do timer 1 (001BH)
JMP IsrCT1; entrada da ISR do C/T 1
Inicio:MOV TMOD,#00010000B; define o modo 1 para o C/T 1
MOV TH1,#02H
; valor de carga do C/T 1 = 536 (0218H = 536)
MOV TL1,#18H; temporizao de 65.536 536 = 65.000 s (65 ms)
MOV IE,#10001000B; EA=1 (habilita int.), ET1=1 (habilita int. do C/T 1)
SETB TR1; dispara timer
Loop: JMP Loop; programa em loop infinito, aguarda interrupo
IsrCT1: CLR TR1
; parada do temporizador
CPL P1.0
; comuta estado do pino P1.0 (muda estado do LED 1)
MOV TH1,#02H; recarrega C/T 1 com 536 (= 0218H)
MOV TL1,#18H
SETB TR1
; dispara temporizador
RETI; retorna da ISR
3. Programa que pisca alternadamente o LED0 e o LED1 por 1 segundo de intervalo cada.
; Pisca alternadamente 2 LEDs ligados nos pinos P1.0 e P1.1.
; O LED ativado com nvel lgico "0".
; Utiliza C/T 1 para contar 50.000 ciclos e gera interrupo no fim da contagem.
; Define R0 como contador de interrupo.
; R0 carregado com 20, assim R0(20) * 50 ms = 1 s.
RtuloInstruoComentrio
ORG 0000H; reset
JMP Inicio; salta vetor interrupo do C/T 1
ORG 001BH; endereo do vetor interrupo do C/T 1
JMP IsrCT1
; entrada da ISR do C/T 1
Inicio:MOV TMOD,#00010000b; define o modo 1 para o C/T 1
MOV TH1,#HIGH(15536); carrega a parte alta em TH1 para 50.000
MOV TL1,#LOW(15536) ; carrega a parte baixa em TL1
MOV R0,#20
; contador do nmero de interrupes
SETB P1.0; desativa LED0
CLR P1.1; ativa LED1
MOV IE,#10001000B
; habilita interrupo do timer 1
SETB TR1; dispara timer
Loop: JMP Loop; programa em loop, sada por interrupo
; Rotina de Servio de Interrupo
IsrCT1: CLR TR1
; parada de C/T 1
DEC R0
; decrementa contador de interrupes
CJNE R0,#0FFH,Segue; se contador ffh, no recarrega
MOV R0,#20
; se sim, recarrega contador
CPL P1.0
; complementa pino P1.0
CPL P1.1; idem para P1.1
Segue: MOV TH1,#HIGH(15536); recarrega a parte alta em TH1
MOV TL1,#LOW(15536); recarrega a parte baixa em TL1
SETB TR1; dispara C/T1
RETI
; retorna da interrupo
PAGE 230/09/2013