Você está na página 1de 4

Universidade Federal de Mato Grosso

Faculdade de Arquitetura, Engenharia e Tecnologia


Departamento de Engenharia Elétrica
Laboratório de Microprocessadores

Laboratório 10
Comunicação Serial via USART

Engenharia Elétrica

Docente: Prof. Nicolás Eusebio Cortez Ledesma

Discentes:
Bárbara Morais Gianesini

Turma: N1
Data da realização do laboratório:
30 de Março de 2016
1. Objetivos

 Entender os procedimentos para projetar aplicações que necessitam de transferência


serial de dados utilizando o padrão USART.

2. Atividades

a) Escreva o programa em assembly no ambiente MPLAB. No processo de simulação


usando Proteus, estude os procedimentos para entender o módulo USART.

Durante a aula de laboratório os alunos implementaram o código base, disponibilizado pelo


professor, e em seguida realizaram a simulação do mesmo no Proteus. Com a simulação foi
possível entender, com mais detalhes, como funciona a comunicação serial (módulo USART)
do PIC. No código implementado, foi necessário implementar a captura do dado (a, d, outro
caractere), que foi digitado através do Virtual Terminal, pelo microprocessador. Depois disso foi
feito o processamento desse dado pelo microprocessador, e de acordo com a sua função no
código, foram transmitidos dados do microprocessador para o Virtual Terminal.

b) Realize as mudanças necessárias no programa, para que, em resposta à tecla ‘t’


digitada no “Virtual Terminal”, a aplicação realize a amostragem de dados do
sensor de temperatura LM35 e transmita para o “Virtual Terminal” o valor da
temperatura em ºC, em intervalos de 1 segundo.

list p =16f877a
#include <p16f877a.inc> call UART_iniciar
__CONFIG H'3F32' call Iniciar_AD0
reinicio
ERRORLEVEL -305 call UART_RxCar
ERRORLEVEL -302 btfss regrx,0
goto $-2
cblock 0x20 movwf car_rx
contador xorlw 't' ;mostra temperatura
car_rx btfsc STATUS,Z
endc goto mostra_temp
movwf car_rx
inicio: xorlw 'a' ;contagem UP
clrf PORTE btfsc STATUS,Z
bsf STATUS, RP0 goto cont_up
movlw 0x84 movwf car_rx
movwf ADCON1 xorlw 'd' ;contagem DOWN
bsf TRISA, RA0 btfsc STATUS,Z
bsf TRISA, RA1 goto cont_down
bsf TRISA, RA3
movlw B'11111000' call Prt_Cmd_invalido
movwf TRISE goto fim
bcf STATUS, RP0

Nesta primeira parte do código, as portas de entrada e saída relacionadas com a


aplicação são configuradas, como a porta A e a porta E, assim como o registrador ADCON1
que configura as saída da porta A e E como digitais ou analógicas.
Logo em seguida se inicia o módulo USART através da subrotina UART_iniciar.
Agora, se espera que o usuário entre com algum caractere no Virtual Terminal, para que
o uP capture esse caractere e execute a respectiva subrotina de acordo com o caractere
digitado.
Se o usuário digitar a, são exibidos no Virtual Terminal os números de 1 à 20 em ordem
crescente. Se o usuário digitar d, são exibidos no Virtual Terminal os números de 1 à 20 em
ordem decrescente. Se o usuário digitar t será mostrada a temperatura lida pelo sensor no
Virtual Terminal a cada um segundo. Por fim, se o usuário digitar qualquer outro caractere,
aparecerá uma mensagem na tela dizendo “comando inválido”.

cont_down cont_up
call av_linha call av_linha
movlw .20 movlw .1
movwf contador movwf contador

loop_cd loop_ca
call limpa_binarios call limpa_binarios
movwf contador movfw contador
movwf Binario1 movwf Binario1
call bin40_bcd call bin40_bcd
call UART_Envia_2BCD call UART_Envia_2BCD
call av_linha call av_linha
decfsz contador,F incf contador, F
goto loop_cd movfw contador
goto fim xorlw .21
btfss STATUS,Z
goto loop_ca
goto fim

As subrotinas acima são as executadas quando o usuário digita d (esquerda) ou a


(direita). Como explicado anteriormente, elas utilizam o módulo USART para transmitir dados
do uP para o Virtual Terminal.

mostra_temp fim
call av_linha call av_linha
call Converte_AD movlw 'f'
call conv_binario_temp call UART_TxCar
call bin40_bcd movlw 'i'
call UART_Envia_3BCD3 call UART_TxCar
call av_linha movlw 'm'
call ret1s call UART_TxCar
call av_linha
call UART_RxCar call av_linha
btfss regrx,0 call ret1s
goto mostra_temp call ret1s
movwf car_rx goto reinicio
xorlw 'f' ; vai para o fim
btfsc STATUS,Z
goto fim
goto mostra_temp

A subrotina mostra_temp foi implementada para enviar ao Virtual Terminal o valor da


temperatura lido pelo sensor LM 35. Para isso, é utilizado o módulo conversor analógico digital,
logo, chama-se a rotina Converte_AD para iniciar a conversão do valor de entrada (Porta A,0).
Em seguida, é chamada uma outra subrotina para fazer a conversão do número binário lido
pelo módulo CAD para o valor em binário correspondente à temperatura em graus célsius (essa
subrotina será explicada com mais detalhes posteriormente). O valor da temperatura é então
transmitido pelo uP para o Virtual Terminal, onde ele já é exibido com uma vírgula antes das
três últimas casas decimais (precisão).
Nesse subrotina, se o usuário desejar parar de transmitir os dados de temperatura, ele
deve digitar a tecla f, caso ele digite qualquer outra tecla, ele permanecerá no modo de
visualização da temperatura.
Ao final, o programa passa para a etiqueta fim, que mostra a mensagem “fim” no Virtual
Terminal e reinicia o programa, onde o usuário deve novamente entrar com um novo caractere.

av_linha
conv_binario_temp movlw .10 ;line feed
call limpa_binarios call UART_TxCmd
movfw binario_L movlw .13 ;car return
movwf Op1_L call UART_TxCmd
movfw binario_H return
movwf Op1_H
movlw 0xE9 limpa_binarios
movwf Op2_L clrf Binario5
movlw 0x01 clrf Binario4
movwf Op2_H clrf Binario3
call Multi16 clrf Binario2
movfw Rpta1 clrf Binario1
movwf Binario1 return
movfw Rpta2
movwf Binario2 #include "up_atrasos.asm"
movfw Rpta3 #include "up_bin40-bcd.asm"
movwf Binario3 #include "up_CAD.asm"
movfw Rpta4 #include "up_matemat.asm"
movwf Binario4 #include "up_msg.asm"
return #include "up_rs-232.asm"
#include "up_tx_BCD.asm"
end

A subrotina conv_binario_temp, como dito anteriormente, converter o valor lido pelo CAD
(entre 0 e 1023) para o valor binário correspondente à temperatura. Utiliza-se a equação:

𝑏𝑖𝑛𝑎𝑟𝑖𝑜𝐶𝐴𝐷 ∗ 500
𝑡𝑒𝑚𝑝𝑏𝑖𝑛𝑎𝑟𝑖𝑜 = ( ) ∗ 1000
1023

Onde, 1023 é o número de níveis do conversor analógico digital, 500 é a temperatura


em graus célsius correspondente aos 1023 lidos pelo CAD e 1000 corresponde a precisão de
três casas decimais. Uma virgula será inserida antes dos 3 últimos números serem enviados
ao LCD.
A equação pode ser resumida em:
𝑡𝑒𝑚𝑝𝑏𝑖𝑛𝑎𝑟𝑖𝑜 = 𝑏𝑖𝑛𝑎𝑟𝑖𝑜𝐶𝐴𝐷 ∗ 489

Por fim, a subrotina av_linha é usada para pular para a próxima linha do Virtual Terminal,
enquanto que a subrotina limpa_binarios limpa (coloca em zero) todos os registradores
utilizados na conversão de binário para decimal.

3. Conclusão

Através da realização das atividades propostas os alunos puderam aplicar na prática os


conhecimentos adquiridos em sala de aula. Isso proporcionou aos alunos um maior
entendimento da utilização do módulo de comunicação serial através do protocolo USART do
microprocessador PIC. Sendo assim, conclui-se que os objetivos propostos na realização desse
laboratório foram alcançados com sucesso.

Você também pode gostar