Microcontroladores
Prof. Guilherme PeronProf. Heitor S. LopesProf. Ronnier Rohrich
Prof. Rubão
Interface Serial e RTC
Conceitos● Paridade
○ Bit acrescentado ao dado, destinado à detecção de erro. A paridade simples detecta 1 erro, mas não corrige:■ Paridade par: número par de bits no estado 1,
incluindo o bit de paridade.■ Paridade ímpar: número ímpar de bits no estado 1,
incluindo o bit de paridade.○ Ex: caráter ASCII ‘A’é 65d=41h: 01000001b tem 2 bits
em 1:■ Se for usada a paridade ímpar: acrescenta-se mais
um bit 1 (3 bits 1 é ímpar): 010000011b■ Se for usada a paridade par: acrescenta-se mais um
bit 0 (2 bits 1 é par): 010000010b
Conceitos● Tanto o transmissor quanto receptor devem ter as
mesmas configurações quanto à velocidade, tamanho da palavra, paridade e número de stop bits.○ A paridade deve ser previamente definida entre TX e
RX: par, ímpar ou sem paridade.○ Normalmente se usa 1 ou 2 stop bits. Estes devem
garantir que o receptor tenha tempo de receber e armazenar o caráter, antes de receber o próximo.
○ A quantidade de bits na informação transmitida também pode variar: de 5 a 8 bits.
● Bit rate é o número de bits por segundo transmitidos através da interface serial.
Conceitos● Quando não há dados sendo transmitidos, a linha fica
em nível lógico 1.● O receptor reconhece a borda de descida do Start Bit e
sincroniza seu clock● Após 1 ciclo e meio começa a fazer a leitura dos
demais bits a cada clock
Padrão Elétrico da RS232-C● Opera com tensões referenciadas ao terra
○ Nível lógico 0: entre +3 e +25V (usualmente +12V)○ Nível lógico 1: entre -3 e -25V (usualmente -12V)
● Taxas de transmissão padronizadas: 110, 300, 600, 1200, 2400, 4800, 9600 e 19200
Driver de linha para RS232-C● MAX232:
○ Utiliza alimentação simples (0 e 5V)
○ Gera internamente tensões simétricas +12V e -12V
○ Tem 2 drivers e 2 receivers em um único chip.
○ Máx. bit-rate: 120kbps
Introdução
Interrupção serial no AT89C5131● USART - Porta serial TxD e RxD (P3.0 e P3.1)(Universal Synchronous - Assynchronous Receive-Transmit)● Modo de comunicação Full-duplex ● Endereço de hardware 0023h na memória de programa● Flags TI e RI responsáveis por atender a interrupção, ou
seja quando receber um dado pelo pino de RX (P3.0), o flag RI levanta. Na transmissão segue o mesmo processo, onde o flag TI levanta a partir do momento que o dado sai pelo pino TX (P3.1)
● Programação de registros adicionais (SBUF, SCON)● Pode operar em 03 modos assíncronos (modo 0 a 3) e 01
modo síncrono (Modo 0) que ele chama de shift register.
Endereço da interrupção serial
Flag da interrupção serial
Comunicação serial no 8051● SCON: byte que especifica o modo e o status
da comunicação● SBUF: registrador duplo, um para Tx e outro
para Rx
Byte de controle SCON● Endereço 98H do SFR
Byte de controle PCON● Endereço 87H do SFR
○ Não é bit-endereçável, deve ser modificado com a operação lógica OR:■ ORL PCON, #80H
Modos de operação● 4 modos possíveis, definidos pelos bits SM0 e
SM1● Define comunicação síncrona (modo 0) ou
assíncrona (demais modos)
Modo 0● Shift-register de 8 bits
● Pino P3.0 funciona como transmissor e receptor
● Pino P3.1 funciona como clock de referência
● Baud-rate fixo fclock/12
● Normalmente não é usado para comunicação.
Aplicação do Modo 0● Paginação de memória ou expansão de I/O
Modo 1● UART de 8 bits com taxa de comunicação
variável● O clock é ajustável através do timer 1● Transmissão de 10 bits: 1 start bit (1->0), 8 bits
de dado, 1 stop bit (0 -> 1)● A paridade é opcional e deve ser gerada por
software● Ao receber um byte, RI=1, SBUF=byte,
RB8=stop bit
Modos 2 e 3● UART de 9 bits com taxa de comunicação fixa (modo 2)
ou variável (modo 3)● Baud-rate:
○ Modo 2: o clock é fixo em 1/32 ou 1/64 de fclock do 8051 (ajustado pelo bit do SMOD do PCON)
○ Modo 3: o clock é ajustável através do timer 1● Comunicação com 11 bits: 1 start bit (1->0), 8 bits de
dado, 1 bit programável (em TB8/RB8), 1 stop bit (0 -> 1)
● A paridade é gerada automaticamente no bit P (PSW.0) ap artir do Acc e pode ser utilizada: PSW.0 => TB8
Controle das interrupções● TI (Transmit Interrupt)
○ TI=1 por hardware após transmitir o oitavo bit (modo 0) ou no início do stop bit (modos 1, 2, 3)
○ Deve ser zerado (TI=0) pela rotina de atendimento de interrupção
● RI (Receive Interrupt)○ RI=1 por hardware após receber o oitavo bit (modo
0) ou no meio do stop bit (modos 1, 2, 3)○ Deve ser zerado (RI=0) pela rotina de atendimento
de interrupção
Taxa de Transmissão - Baud rate ● A taxa pode ser programada através de um clock
externo, ou utilizar o mesmo clock do microcontrolador
Taxa de Transmissão - Baud rate ● Pode envolver o registro BDRCON, para controle da
taxa
Taxa de Transmissão - Baud rate
Baud-rates típicos● Calma que não precisa calcular para xtal 24.00 MHz
Baud-rates típicos● Calma que não precisa calcular para xtal 24.00 MHz
Leitura e envio de dados pela serial● Os dados devem ser lidos ou escritos em
SBUF (99H).● Por exemplo, para escrever o caráter ‘X’ na
porta serial:
MOV SBUF,#’X’
● Para ler um byte recebido pela serial:
MOV A,SBUF
Exemplo - ProgramaçãoORG 0023h ;endereço serial ljmp serial_intRETI ; quando sair da int serial, volta ao main
MAIN PROGRAM...CLR SM0SETB SM1 ;UART mode 1 (8-bit variable)CLR SM2 ;sem multi processamentoSETB EA ; habilita todas interrupçõesSETB REN ;habilita recepção da serialSETB ES ;habilita a interrupção serial
Exemplo - Programaçãocontinuação do Main--------------------
;definição de taxa (baud rate) em 4800 bps (bps por seg)MOV BRL,#243MOV BDRCON,#00000110b ; RBCK e SPD=1ORL PCON,#1000000b ; mascara SMOD=1 sem mexer nos ; demais bitsORL BDRCON,#00010000b ;set BRR=1 sem mexer no resto
Exemplo - Programaçãocontinuação do Main--------------------
; timer initializationMOV TMOD,#1 ;timer0 no modo1 (recarga automatica)MOV TH0,#00hMOV TL0,#00hSETB ET0 ;habilita int timer0SETB TR0 ;liga o timer e deixa ele ligado ever
JMP $ ; vamos ficar na mesma linha no main
(Ou seja o programa principal não irá executar nada. Só recebe e manda via serial)
Exemplo - Programaçãocontinuação da subrotina de atendimento da serial--------------------;SERIAL INTERRUPTserial_int: JNB RI,ri_not_set ;esperando recepção CLR RI ; byte recebeu, então devo zerar RI ; para novo byte entrar MOV A,SBUF ;byte recebido e armazenado no acc SJMP end_serial ; vai pro final da subrotina
ri_not_set: CLR TI ; se chegou aqui, é pq houve apenas ; transmissão ;então zera-se o flag de transmissãoend_serial: RET
Real-Time Clock
RTC● Para que serve um RTC?
○ Real-Time Clock○ DS1307
Características do DS1307● Conta segundos, minutos, horas, dia do mês, mês, dia da
semana e ano● Correção automática para ano bissexto● Baixíssimo consumo com bateria: 500nA● Contém uma memória RAM de 56 bytes● Contém um gerador de onda quadrada programável (1 Hz,
4 KHz, 8 KHz, 32 KHz)● Utiliza a interface 2-wire (I2C) com frequência máxima do
clock SCL de 100 KHz (modo standard)● Utiliza um cristal oscilador de 32,768KHz
Mapas de endereços e registradores
Características ● O conteúdo dos dados está em BCD● Bit 7 do registrador 0 (CH) liga (0)/desliga
(1) o clock● Ao ligar o chip, o conteúdo dos
registradores é indeterminado● Bit 6 do registrador de horas seleciona o
modo 12/24● No modo 12 horas, o bit 5 é AM/PM
Gerador de onda quadrada ● Registrador de controle
● SQWE: habilita o gerador (em 1)● OUT: nível lógico de SQW/OUT quando SQWE=0● RS1/RS0: seleção da frequência gerada:
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
OUT 0 0 SQWE 0 0 RS1 RS007h
Transferência de dados (I2C) ● Slave Address: 1101000
Ligação do DS1307 no kit
TWI no AT89C5131 ● Equivalente à I2c
Registrador SSCON (93h) ● Synchronous Serial Control Register:
○ CR0, CR1 e CR2 selecionam velocidade - ver datasheet
Registrador SSDAT (95h) ● Synchronous Serial Data Register (R/W):
Registrador SSCS (94h) ● Read-Synchronous Serial Control and Status Register
○ Códigos de status - ver datasheet
Registrador SSADR (96h) ● Synchronous Serial Address Register (R/W)