copyright, 1998, 1999 © sérgio cavalcante registradores do 8051 sérgio cavalcante grupo de...
TRANSCRIPT
Copyright, 1998, 1999 © Sérgio Cavalcante
Registradores do Registradores do 80518051
Sérgio CavalcanteSérgio Cavalcante
Grupo de Engenharia da Grupo de Engenharia da ComputaçãoComputação
Departamento de Informática - Departamento de Informática - UFPEUFPE
Sérgio CavalcanteSérgio Cavalcante
Grupo de Engenharia da Grupo de Engenharia da ComputaçãoComputação
Departamento de Informática - Departamento de Informática - UFPEUFPE
GRECO
DEPARTAMENTODE INFORMÁTICA
UFPE
Família 8051Família 8051Port
1Port
3
Port
2Port
0
Seri
al
Timer1
CPU RAM EPROM
Timer0Oscil.
Latc
hLa
tch
Latc
hLa
tch
DPTRPC
MBRInterrupt
Data Bus
Address Bus
Timers/contadoresTimers/contadores
• Timer0 e Timer1Timer0 e Timer1
• Duas funções: timer e contadorDuas funções: timer e contador
• Frequência máxima como timerFrequência máxima como timer– Frequência do Clock / 12Frequência do Clock / 12
• Frequência máxima como contadorFrequência máxima como contador– Frequência do Clock / 24Frequência do Clock / 24
Timer/contadorTimer/contador
TH0TH0 TL0TL0
CarryCarryCarry
Interrupt Entrada
ContadoresContadores
Data BusData Bus
RDRD WR RDRD WRWR
Timers/contadoresTimers/contadores
• Vários modos de operação:Vários modos de operação:– Modo 0:Modo 0:
• Timer/contador de 13 bitsTimer/contador de 13 bits
• Pode ter interrupção ao chegar em zero.Pode ter interrupção ao chegar em zero.
• Frequência Timer = Frequência do Frequência Timer = Frequência do Clock Clock
(12 * (8192 - (12 * (8192 - ValorInicial))ValorInicial))
Timer 0 no Modo 0Timer 0 no Modo 0
Osc.1/12
TL05 bits5 bits
TH08 bits
TF0T0
TR0
INT0
GATE
interrupçãoC / T
Timers/contadoresTimers/contadores
• Modo 1:Modo 1: – Timer/contador de 16 bitsTimer/contador de 16 bits
– Pode ter interrupção ao chegar em Pode ter interrupção ao chegar em zero.zero.
– Frequência Timer = Frequência do Frequência Timer = Frequência do Clock Clock
(12 * (65536 - (12 * (65536 - ValorInicial))ValorInicial))
Timer 0 no Modo 1Timer 0 no Modo 1
Osc.1/12
TL08 bits8 bits
TH08 bits
TF0T0
TR0
INT0
GATE
interrupçãoC / T
Timers/contadoresTimers/contadores
• Modo 2:Modo 2: – Timer/contador de 8 bitsTimer/contador de 8 bits
– Reload (recarga) automáticoReload (recarga) automático
– Frequência Timer = Frequência do Frequência Timer = Frequência do Clock Clock
(12 * (256 - Valor (12 * (256 - Valor THTHii ))))
Timer 0 no Modo 2Timer 0 no Modo 2
Osc.1/12
TL08 bits
TH08 bits
TF0T0
TR0
INT0
GATE
interrupçãoC / T
recarga
Timers/contadoresTimers/contadores
• Modo 3:Modo 3:
– TL0 funciona como um timer/contador de 8 TL0 funciona como um timer/contador de 8 bits controlado por TR0.bits controlado por TR0.
– TH0 funciona como timer de 8 bits TH0 funciona como timer de 8 bits controlado por TR1 e usa TF1 para overflowcontrolado por TR1 e usa TF1 para overflow
– Timer 1 fica habilitado todo o tempo, mas Timer 1 fica habilitado todo o tempo, mas não pode gerar interrupção. Se Timer 1 não pode gerar interrupção. Se Timer 1 também for posto no Modo 3, ele pára.também for posto no Modo 3, ele pára.
Timer/contadorTimer/contador
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TCON
TFi - flag de overflow do Timer i. Se o 8051 forconfigurado para gerar interrupção quando
esteflag vai para 1 (um), seu valor volta para 0
(zero)automaticamente após execução da rotina
deinterrupção.
TRi - bit de controle do Timer iTRi = 0 Timer i desligado = 1 Timer i ligado
OBS: os bits de TCON podem ser acessadosdiretamente
Timer/contadorTimer/contador
gate C/T M1 M0 gate C/T M1 M0 TMOD
gate = 0 Timer i é habilitado se TRi = 1= 1 Timer i é habilitado se INTi = 1 e TRi
= 1
C/T = 0 Timer i funciona como contador= 1 Timer i funciona como timer
M1,M0 = 00 Timer ifunciona no Modo 0 = 01 Timer ifunciona no Modo 1 = 10 Timer ifunciona no Modo 2 = 11 Timer 0funciona no Modo 3
Timer 1 pára.
OBS: os bits de TMOD NÃONÃO podem ser acessadosdiretamente
Timer 0 no Modo 1Timer 0 no Modo 1
#define FrClk 12000000#define FrClk 12000000
#define FreqTimer0_emHz 100#define FreqTimer0_emHz 100
#define VALOR_TH0 ((65536 - (FrClk / (12 * FreqTimer0_emHz - 17 ))) >>8)#define VALOR_TH0 ((65536 - (FrClk / (12 * FreqTimer0_emHz - 17 ))) >>8)
#define VALOR_TL0 ((65536 - (FrClk / (12 * FreqTimer0_emHz - 17 ))) & 0xFF)#define VALOR_TL0 ((65536 - (FrClk / (12 * FreqTimer0_emHz - 17 ))) & 0xFF)
O 17 TA ERRADO!!!O 17 TA ERRADO!!!
mmain()ain(){{……EA=1; //Habilita o tratamento de interrupçõesEA=1; //Habilita o tratamento de interrupções……}}
Timer 0 no Modo 1Timer 0 no Modo 1
void timer0_inicializa() { TR0 = 0; // Desliga Timer0 TMOD = (TMOD & 0xF0) | 0x01; // Timer 0 programado como timer de 16 bits TH0 = VALOR_TH0; // Programa contagem do Timer0 TL0 = VALOR_TL0; ET0 = 1; // Habilita interrupcao do timer 0 TR0 = 1; // Habilita contagem do timer 0 }
void timer0_int (void) interrupt 1 using 2 { TR0 = 0; // Desliga Timer0 TH0 += VALOR_TH0; // Programa contagem do Timer0 TL0 += VALOR_TL0; TR0 = 1; // Habilita contagem do timer 0 ... }
Interface SerialInterface Serial
• Vários modos de operaçãoVários modos de operação– Modo 0Modo 0
• Transmissão síncrona, 8 bitsTransmissão síncrona, 8 bits• Baudrate = Frequência do Clock / 12Baudrate = Frequência do Clock / 12
– Modo 1Modo 1• Transmissão assíncrona, 10 bits sendo 1 start bit, Transmissão assíncrona, 10 bits sendo 1 start bit,
8 bits de dados e 1 stop bit8 bits de dados e 1 stop bit• Na recepção, o stop bit é armazenado em RB8Na recepção, o stop bit é armazenado em RB8i i ((ii
indica qual a interface serial usada, caso haja indica qual a interface serial usada, caso haja mais de uma).mais de uma).
• Baudrate variávelBaudrate variável
Interface SerialInterface Serial
• Vários modos de operaçãoVários modos de operação– Modo 2Modo 2
• Transmissão assíncrona, 11 bits sendo 1 start Transmissão assíncrona, 11 bits sendo 1 start bit, 8 bits de dados, 1 bit especial (valor definido bit, 8 bits de dados, 1 bit especial (valor definido por TB8por TB8ii) e 1 stop bit.) e 1 stop bit.
• Na recepção, o bit especial é armazenado em Na recepção, o bit especial é armazenado em RB8RB8ii
• Baudrate = 1/32 ou 1/64 Freq.ClockBaudrate = 1/32 ou 1/64 Freq.Clock
– Modo 3Modo 3• Transmissão igual ao Modo 2Transmissão igual ao Modo 2• Baudrate variávelBaudrate variável
Interface SerialInterface Serial• TransmissãoTransmissão
– É realizada assim que um byte é armazenado em SBUFÉ realizada assim que um byte é armazenado em SBUF– Ao transmitir faz com que o bit TIAo transmitir faz com que o bit TIii seja 1 seja 1
• RecepçãoRecepção– Ao receber faz com que o bit RIAo receber faz com que o bit RIii seja 1. seja 1.– Modo 0 (comunicação síncrona):Modo 0 (comunicação síncrona):
• É realizada quando RIÉ realizada quando RIii =0 e REN =0 e RENii =1 =1
– Modo 1, 2 e 3 (comunicação assíncrona):Modo 1, 2 e 3 (comunicação assíncrona):• É realizada quando RENÉ realizada quando RENii =1 e ocorre a chegada de um start =1 e ocorre a chegada de um start
bit.bit.
Interface SerialInterface Serial• InterrupçãoInterrupção
– Pode ou não ser habilitada.Pode ou não ser habilitada.– Quando habiitada, é gerada se TIQuando habiitada, é gerada se TIii = 1 ou RI = 1 ou RIii
= 1.= 1.– O mesmo vetor de interrupção é usado tanto O mesmo vetor de interrupção é usado tanto
para transmissão quanto para recepção. O para transmissão quanto para recepção. O valor de TIvalor de TIii e RI e RIii deve ser testado para deve ser testado para verificar se houve transmissão e/ou verificar se houve transmissão e/ou recepção, respectivamente.recepção, respectivamente.
Interface SerialInterface Serial
SM0 SM1 SM2i RENi TB8i RB8i Tii RIi SiCONSM0,SM1: Se 00Modo 0; 01Modo 1; 10Modo 2; 11Modo 3
SM2i Se Modo = 0, SM2i deve ser 0. Se Modo = 1, define se o stop bit deve ser igual a 1 para que RIi = 1 Se Modo = 2 ou 3, define se o bit especial deve ser igual a 1 para
que RIi = 1. (Comun. em rede)
RENi Habilita a recepção.
TB8i Nos modos 0 e 1, guarda cópia do bit 8 de transmissão Nos modos 2 e 3, guarda o valor do bit especial.
RB8i No modo 0 não é usado. No modo 1, se SM2i = 0, guarda o stop bit recebido. Nos modos 2 e 3, guarda o valor do bit especial recebido.
TIi Flag de fim de transmissão. TIi = 1 quando o último bit começa a ser transmitido.
RIi Flag de fim de recepção. RIi = 1 quando o último bit é recebido.
Interface SerialInterface Serial• Comunicação em Rede ou MultiprocessadorComunicação em Rede ou Multiprocessador
– Quando modo = 2 ou 3, e se SM2Quando modo = 2 ou 3, e se SM2ii = 1, a interrupção de recepção só é gerada = 1, a interrupção de recepção só é gerada se o bit especial = 1.se o bit especial = 1.
– Esta característica pode ser usada em redes mestre-escravo da seguinte forma:Esta característica pode ser usada em redes mestre-escravo da seguinte forma:
1) Se o mestre deseja se comunicar com um dos escravos,1) Se o mestre deseja se comunicar com um dos escravos, primeiro ele envia o endereço do escravo. primeiro ele envia o endereço do escravo.
2) Endereços diferem de dados porque endereços tem o bit2) Endereços diferem de dados porque endereços tem o bit especial = 1 e os dados tem este bit = 0. especial = 1 e os dados tem este bit = 0. 3) Se SM23) Se SM2ii = 1, nenhum escravo será interrompido por = 1, nenhum escravo será interrompido por bytes de dados. Mas todos serão interrompidos por bytes bytes de dados. Mas todos serão interrompidos por bytes de endereços. de endereços.
4) Ao receber seu endereço, o escravo faz com que 4) Ao receber seu endereço, o escravo faz com que SM2 SM2i i = 0 de modo a permitir a recepção de bytes de= 0 de modo a permitir a recepção de bytes de dados. dados.
Interface SerialInterface Serial• Taxas de Comunicação (Baud Rates)
– A interface serial requer um clock 16 vezes maior que a taxa de comunicação desejada.
• Baudrate Modo 0 = Freq. Clock / 12
• Baudrate Modo 2– SMOD é o bit 7 do registrador PCON
– baudrate = (2SMOD/64) x Freq. Clock, ouFreq. Clock / 64 se SMOD = 0Freq. Clock / 32 se SMOD = 1
Interface SerialInterface Serial• Baudrate Modos 1 e 3
– Pode ser fornecido pelo pelo Timer1 (padrão) ou pelo gerador de baudrate (apenas no 80517).
– Para usar o timer 1 faça BD = 0. Baudrate = (2SMOD / 32) x Freq.Timer1
• Se Modo Timer1 = 2 (auto-reload) Baudrate = 2SMOD x Freq.Clock
12 x 32 x (256 - TH1)
– Para usar o gerador de baudrate faça BD = 1 (BD é o bit 7 do registrador ADCON). Bom para taxas de 4800 e 9600 bit/s) Baudrate = (Freq. Clock x 2SMOD) / 2496