Teoria linguagem c


Registrador de Controle da Porta Serial - SCON



Baixar 2.75 Mb.
Página24/30
Encontro30.10.2016
Tamanho2.75 Mb.
1   ...   20   21   22   23   24   25   26   27   ...   30

10.1. Registrador de Controle da Porta Serial - SCON

O registrador de controle de status da porta serial é o registrador especial de funções SCON, mostrado na tabela 10.1.



bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
SCON


FE/SM0

SM1

SM2

REN

TB8

RB8

TI

RI

FE, SM0 e SM1 – Serial Mode


  • FE - Bit Framing Error (ativado quando o bit SM0=1) ou SM0=0 – para desativar a detecção de erro.




  • SM0 e SM1 – Serial Mode (bit 0 e bit 1). Através destes dois bits seleciona-se um dos quatro modos de operação da comunicação serial, conforme a tabela abaixo:




SM0

SM1

MODO

Descrição

Baud-rate

0

0

0

Shift Register

Cristal/12

0

1

1

UART 8 bits

Variável

1

0

2

UART 9 bits

Cristal/64 ou Cristal/32

1

1

3

UART 9 bits

Variável


Tabela 10.1 – Modos de operação da porta serial.
SM2 – Serial Mode
Possui diferentes funções em cada um dos quatro modos de funcionamento:


  • MODO 0: não tem efeito, devendo ficar em nível lógico zero.




  • MODO 1: quando em nível lógico 1, desabilita o pedido de interrupção se for recebido um bit stop inválido. Isto evita que o nono bit, utilizado nos modos 2 e 3 sejam confundidos com o stop bit do modo 1.




  • MODO 2 e 3: Quando em nível lógico 1, habilita a comunicação serial entre vários microcontroladores e desabilita o pedido de interrupção se for recebido um nono Bit de dado igual a zero.

REN – Reception Enable
Nível lógico 0 – desabilita a recepção serial.

Nível lógico 1 – habilita a recepção serial.



TB8 – Transmit Bit 8
Nos modos 2 e 3 indica o estado do nono bit a ser transmitido, programado por software.


RB8 – Receive Bit 8
Não é utilizado no modo 0, e no modo 1 indica o estado do stop bit recebido. Se o bit SM2 estiver em nível lógico 0. Nos modos 2 e 3 indica o estado do nono bit recebido.

TI – Transmit Interrupt
É o bit de requisição de interrupção da transmissão de dados, sendo setado pelo microcontrolador após a transmissão do oitavo bit de dados no modo 0 ou ao início do stop bit nos modos 1, 2 e 3. Deve ser zerado por software durante a execução da rotina de atendimento para permitir novas interrupções.

RI – Receive Interrupt
É o bit de requisição de interrupção da transmissão de dados, sendo setado pelo microcontrolador após a recepção do oitavo bit de dados no modo 0 ou ao início do stop bit nos modos 1, 2 e 3. Deve ser zerado por software durante a execução da rotina de atendimento para permitir novas interrupções.


Figura 10.2 – Registrador RI é setado ao final da recepção do dado serial.

10.2. Transmissão e Recepção de Dados
Para utilizar a comunicação serial, esta edição do livro utiliza o arquivo serial232.h, cujo conteúdo será apresentado na próxima página. Para utilizá-lo, seu conteúdo deverá ser salvo com o nome serial232.h, no diretório C:\8051\SDCC\INCLUDE.


#define XTAL 12000000

#define T1_CLOCK XTAL/12
void init_sio_poll(unsigned int baud_rate){

TR1=0; //pára Timer 1 para programá-lo.

ET1=0; //desabilita interrupção Timer1

TMOD &=0x0F; //Setup timer1 no modo 2

TMOD |=0x20; //8-bit auto-reload timer.

TH1=256-((T1_CLOCK/32)/ baud_rate); //valor da recarga

TR1=1; //timer1 no modo ‘roda’

SCON=0x50; //Modo 1 com 8 bits

TI=1; //indicate TX buffer empty

}
char _getkey(void){

char dado;

while(!RI); //Aguarda enquanto nao receber dado

dado=SBUF; //Armazena dado recebido na variável

RI=0; //Zera RI para receber novo dado

return dado;

}
void putchar(char outChar){

while(!TI); //Aguarda até transmitir o dado

SBUF=outChar; //Envia dado para a porta serial

TI=0; //Zera RI para transmitir novo dado

}


Figura 10.1 – Conteúdo do arquivo serial232.h

Inicialmente o arquivo utiliza o recurso de definição, o qual permite dar um apelido à um determinado dado (uma constante). Isto significa que a constante XTAL equivale a freqüência do Cristal, que neste exemplo, é 12.000.000Hz (12MHz). Em seguida a constante T1_CLOCK (Timer1 Clock) recebe o valor da freqüência do cristal dividida por 12, que é a freqüência interna do microcontrolador.


Na função init_sio_poll temos a definição do baud-rate da porta serial, no qual a base de tempo é gerada pelo Timer1. Inicialmente o timer é parado (TR1=0) para que possa ser programado. Como não existe uma função especial a ser realizada com o estouro do Timer1, o pedido de interrupção do mesmo é desabilitado (ET1=0 – Enable Timer Interrupt). Logo após temos as definições do registrador especial TMOD. A instrução TMOD &=0x0F e TMOD |=0x20 manipulam os bits individuais do registrador TMOD afim de programá-lo no modo 2, com contagem de 8 bits (256 contagens) e com auto-reload, ou seja, toda vez que o timer estoura a contagem, ele é reiniciado novamente com o valor da carga definida em TH1. O valor de TH1 depende da velocidade de transmissão (baud-rate) e da freqüência do cristal do circuito, conforme a equação descrita no programa. A divisão por 32 deve-se ao prescaler do timer, que quando no modo 2, multiplica a freqüência interna por 32.
Após a carga de TH1(timer1 high Byte), o timer é colocado em funcionamento TR1=1. A instrução SCON=0x50 tem por efeito, modificar os seguintes bits deste registrador:
0x50hexadecimal 0101 0000binário

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0


SCON


FE/SM0

SM1

SM2

REN

TB8

RB8

TI

RI

Bits ativos 0 1 0 1 0 0 0 0

Com efeito, REN=1 (receive serial enable) habilita a recepção de dado serial. SM1=1 (serial mode=1) define a transmissão do tipo 8 bits com baud-rate variável.



      1. Função _getkey( )

A função _getkey( ) do arquivo serial232.h retorna o valor do primeiro caractere lido na entrada do buffer serial (SBUF). Caso o buffer serial esteja vazio, o valor 0 (zero) será retornado. Este comando, por utilizar a técnica de polling faz com que o processamento aguarde até que um caractere chegue no buffer serial do 8051. Após o recebimento, prossegue executando as demais instruções do programa.

Pooling é uma técnica empregada para monitorar alguma ação de modo que o processador detenha toda atenção à espera deste evento. Além do Polling, podemos empregar o uso da interrupção serial para otimizar o desempenho do sistema.

Nota
Exemplo de uso da função _getkey():




#include //contém as definições do chip

#include //contém as definições da porta serial
void main(){

char dado=0;

init_sio_poll(300); //inicializa serial com baud rate=300bps

while(1){

dado=_getkey();

if(dado==‘A‘) P2_0=1; //Liga P2.0

if(dado==‘B‘) P2_0=0; //Desliga P2.0

}

}



// Programa 10.2 – Comunicação serial – Recepção de dados

O programa acima tem a função colocar o pino P2.0 em nível lógico 1 toda vez que o 8051 receber a letra A (maiúscula) pelo canal serial e desliga-o sempre que receber a letra B (maiúscula).


É importante observar que o arquivo serial232.h é um header que deve ser copiado para o diretório C:\8051\SDCC\INCLUDE. Além disso, para que a comunicação funcione corretamente, é necessário definir neste arquivo a freqüência do cristal utilizado. Por padrão está definido o cristal de 12MHz.



      1. Função putchar( )

A função putchar( ) envia pela porta serial do 8051 o valor de uma variável ou constante do programa.
Exemplo de uso da função putchar( ):

#include //contém as definições do chip

#include //contém as definições da porta serial
void main(){

init_sio_poll(300); //inicializa serial com baud rate=300bps

while(1){

if(P3_7)putchar(’A’); //envia a letra A pela porta serial

} //se entrada P3.7 receber nível 1

}
// Programa 10.3 – Comunicação serial – Envio de dados



O programa anterior tem a função de enviar A (maiúscula) pelo canal serial enquanto o pino P3.7 estiver em nível lógico 1.



    1. Hardware para Comunicação Serial

Para que o microcontrolador comunique o mundo exterior, utiliza-se o circuito integrado MAX232. Este circuito trata-se de um conversor de níveis lógicos de +5V para -12V e 0V para -12V que é o padrão da comunicação serial RS232 (Realize Standard 232).
Abaixo temos o esquema do hardware:


Tx
8051

Rx


Figura 10.2 – Hardware para Comunicação serial


    1. BaudRate e Frequência do Cristal

Dependendo do baudrate empregado na comunicação serial, é necessário utilizar um cristal com freqüência específica para gerar o tempo do timer com 100% de precisão. Observe a tabela abaixo:

Baudrate


Cristal

3686400Hz

11059200Hz

300

*

*

600

*

*

1200

*

*

2400

*

*

4800

*

*

9600

*

*

19200

*

*

28800

.

*


CAPÍTULO


Baixar 2.75 Mb.

Compartilhe com seus amigos:
1   ...   20   21   22   23   24   25   26   27   ...   30




©bemvin.org 2020
enviar mensagem

    Página principal
Prefeitura municipal
santa catarina
Universidade federal
prefeitura municipal
pregão presencial
universidade federal
outras providências
processo seletivo
catarina prefeitura
minas gerais
secretaria municipal
CÂmara municipal
ensino fundamental
ensino médio
concurso público
catarina município
Dispõe sobre
reunião ordinária
Serviço público
câmara municipal
público federal
Processo seletivo
processo licitatório
educaçÃo universidade
seletivo simplificado
Secretaria municipal
sessão ordinária
ensino superior
Relatório técnico
Universidade estadual
Conselho municipal
técnico científico
direitos humanos
científico período
espírito santo
pregão eletrônico
Curriculum vitae
Sequência didática
Quarta feira
prefeito municipal
distrito federal
conselho municipal
língua portuguesa
nossa senhora
educaçÃo secretaria
segunda feira
Pregão presencial
recursos humanos
Terça feira
educaçÃO ciência
agricultura familiar