Este experimento busca explorar a comunicação RS232 do 8051. Nesta demonstração, a comunicação é efetuada entre o kit e um computador, por meio do software Hyper Terminal (Software padrão do windows) cuja atalho foi criado no seu menu iniciar juntamente com os outros programas.
Neste experimento o programa gravado no 8051 reenviara de volta qualquer informação que chegar pela serial.
Usaremos o Hyper Terminal para enviarmos dados quaisquer, e a ideia é vermos esses dados retornarem a tela, uma vez que o 8051 reenviará de volta.
Obs: O Baud Rate fixado nesta comunicação é de 9600bps.
- CPU-8051-USB
- Grave o programa do experimento na CPU-8051-USB.
- Não deixe nenhuma módulo conectado a nenhum port do 8051 (Nenhuma conexão)
- Habilite o Led LD0, conforme imagem abaixo.
- Conecte o cabo RS232 fornecido junto com o kit na CPU-8051-USB, conforme imagem abaixo.
- Conecte a outra ponto na COM do computador.
-
Habilite a comunicação RS232 por meio da chave S1, conforme imagem abaixo.
ORS232 Habilitado = Chave travada em baixo. -
Abra o Software Hyper terminal
-
De um nome qualquer para a conexão.
-
Selecione da COM do seu computador que será usada para a comunicação.
-
Selecione Baud Rate de 9600 e controle de fluxo = Nenhum, como na imagem abaixo e clique em OK.
- Pressione e solte o botão RESET da CPU-8051-USB
-
Uma vez na tela do Hyper Terminal, basta começar a escrever que tudo será devolvido a tela, dando a impressão que esta escrevendo direto no Hyper Terminal.
Vale lembrar que você não esta escrevendo direto na tela, pois o que aparece na tela é o retorno que o 8051 enviou de volta.
Um bom teste a se fazer é no meio da escrita, desplugar o cabo RS232 do kit, que imediatamente o usuário perceberá que nada mais esta sendo escrito na tela.
Obs: A cada caracter enviado, o 8051 inverte o estado do Led LD0, sendo que o usuário consegue vê-lo piscando.
//################################################################################################
//# EMPRESA: ========== CONTROL CHIP ENGENHARIA ======== #
//# SITE: http://www.controlchip.com.br #
//#==============================================================================================#
//# PROGRAMADOR: Israel Cortez #
//# DATA DO SOFTWARE: 20/05/2009 #
//# VERSÃO ATUAL: VR3.1 #
//#==============================================================================================#
//# Hardware Necessário: CPU-8051-USB #
//#==============================================================================================#
//# Descrição: Quando um dado é recebido pela serial, o microcontrolador inverte o LED do kit #
//# LD0 e envia de volta o mesmo dado que foi recebido. #
//========== INCLUDES ==========
//------------------------------
#include "8051.H" //Flags do 8051
//========== PROTITIPOS ==========
void TIMER(unsigned char);
//========== VARIAVEIS DE USO GERAL ==========
unsigned char DADO=0;
//#############################################################
//=========================== MAIN ============================
//#############################################################
void main (void)
{
IE=0x90; //Habilita interrupcoes pela Serial
TMOD=0x20; //Timer 1 no modo 2 (8 bits com auto recarga) usado na geração do BaudRate
//---------- USART ----------
SCON=0x54; //canal serial ajustado para modo assincrono
PCON=0; //Não Dobra BAUDRATE mantendo em 9600bps
TL1=0xFD; //carrega taxa de transmissao p/ 9600bps
TH1=0xFD; //carrega taxa de transmissao p/ 9600bps
TR1=1; //Start Timer p/ geração do Baud Rate da Serial
//----- Loop infinito -----
while (1)
{
}
}
//#############################################################
//-------------------------------------------------------------
//======================= SUB ROTINAS =========================
//-------------------------------------------------------------
//#############################################################
void int_serial (void) interrupt 4 using 1
{
// ----- Verifica se Int é de RECEPÇÃO -----
if (RI ==1)
{
DADO=SBUF; //Guarda dado Recebido pela serial
TI=0; //Zera flag de Status de envio
SBUF=DADO; //Reenvia o dado Recebido
while(TI==0); //Espera fim da transmissão
P0_0=!P0_0; //Inverte estado do Led
RI = 0; //limpa pedido de interrupção de recepção
}
}
;################################################################################################
;# EMPRESA: ========== CONTROL CHIP ENGENHARIA ======== #
;# SITE: http://www.controlchip.com.br #
;#==============================================================================================#
;# PROGRAMADOR: Israel Cortez #
;# DATA DO SOFTWARE: 20/05/2009 #
;# VERSÃO ATUAL: VR3.1 #
;#==============================================================================================#
;# Hardware Necessário: CPU-8051-USB #
;#==============================================================================================#
;# Descrição: Quando um dado é recebido pela serial, o microcontrolador inverte o LED do kit #
;# LD0 e envia de volta o mesmo dado que foi recebido. #
;#==============================================================================================#
;# Procedimento: #
;# ------------- #
;# - Habilite o LD0 presente na placa através do Dip Switch p/ que possa visualizar o Led aceso #
;# - Conecte o Kit com o PC pelo cabo RS232 #
;# - Grave este programa na CPU-8051-USB #
;# - Abra o software Hyper terminal e configure a COM e o BaudRate de 9600bps #
;# - Precione o botão RESET e pronto, a cada dado recebido o estado do led será invertido #
;# sendo que o mesmo dado recebido será retransmitido de volta e poderá ser visualizado #
;# no hyperterminal #
;################################################################################################
ORG 00H
LJMP INICIO
;=======================================
;===== TRATAMENTO DAS INTERRUPÇÕES =====
;=======================================
ORG 23H
MOV A,SBUF
MOV SBUF,A ;Envia de volta o que foi recebido
ESPERA: JNB TI ,ESPERA ;Aguarda termino da transmissão
CLR TI ;Limpa flag TI
CPL P0.0 ;Inverte estado do LED.
CLR RI
RETI
;-----------------------------------------------------
;================== PARAMETRIZAÇÃO ===================
;-----------------------------------------------------
INICIO:
;---------- T0 ----------
MOV IE,#90H ;Habilita interrupcoes pela Serial
MOV TMOD,#20H ;Timer 1 no modo 2 (8 bits com auto recarga) usado na geração do BaudRate
;;---------- USART ----------
MOV SCON,#54H ;canal serial ajustado para modo assincrono
MOV PCON,#00 ;Não Dobra BAUDRATE mantendo em 9600bps
MOV TL1,#0FDH ;carrega taxa de transmissao p/ 9600bps
MOV TH1,#0FDH ;carrega taxa de transmissao p/ 9600bps
SETB TR1 ;Start Timer p/ geração do Baud Rate da Serial
;==============================
;===== PROGRAMA PRINCIPAL =====
;==============================
LOOP_INFINITO:LJMP LOOP_INFINITO ; Fica em loop infinito
END
;#################################################################################################################
;=================================================================================================================
;=================================== DESCRIÇÃO DOS REGISTRADORES ENVOLVIDOS ======================================
;=================================================================================================================
;#################################################################################################################
;#############################################
;================== SCON =====================
;#############################################
; --- --- --- --- --- --- -- --
;|SM0|SM1|SM2|REN|TB8|RB8|TI|RI|
; --- --- --- --- --- --- -- --
; | | | | | | | |________INTERRUPÇÃO POR RECEPÇÃO
; | | | | | | |____________INTERRUPÇÃO POR TRNASMISSÃO
; | | | | | |_______________OITAVO BIT RECEBIDO
; | | | | |___________________OITAVO BIT PARA A TRASMISSÃO
; | | | |_______________________HABILITAR RECEPÇÃO SERIAL
; | | |___________________________COMUNICAÇÃO MULTIPROCESSADOR
; | |_______________________________BIT 1 DO MODO
; |___________________________________BIT 0 DO MODO
;|-----|----|----|--------------------------------|---------------------------------------------------------|
;|MODO | M1 | M0 | DESCRIÇÃO | TAXA DE COMUNICAÇÃO (Baud Rate ) |
;|-----|----|----|--------------------------------|---------------------------------------------------------|
;| 0 | 0 | 0 | Transmissão Sincrona de 8 bits | Fixo = Clock/12 |
;|-----|----|----|--------------------------------|---------------------------------------------------------|
;| 1 | 0 | 1 | UART de 8 bits | Variável: definida pelo bit SMOD e pelo timer1 |
;|-----|----|----|--------------------------------|---------------------------------------------------------|
;| 2 | 1 | 0 | UART de 9 bits | CLOCK/64 (SMOD=0) OU CLOCK/32 (SMOD=1) / SMOD =PCON.7 |
;|-----|----|----|--------------------------------|---------------------------------------------------------|
;| 3 | 1 | 1 | UART de 9 bits | Variável: definida pelo bit SMOD e pelo timer1 |
;|-----|----|----|--------------------------------|---------------------------------------------------------|
;#############################################
;=================== IE ======================
;#############################################
;--- -- -- -- --- --- --- ---
;|EA|--|--|ES|ET1|EX1|ET0|EX0|
;--- -- -- -- --- --- --- ---
; | | | | | | | |________HABILITA INTERRUPÇÃO EXTERNA 0
; | | | | | | |____________HABILITA INTERRUPÇÃO PELO TIMER 0
; | | | | | |________________HABILITA INTERRUPÇÃO EXTERNA 1
; | | | | |____________________HABILITA INTERRUPÇÃO PELO TIMER 1
; | | | |________________________HABILITA INTERRUPÇÃO SERIAL
; | | |___________________________RESERVADO
; | |______________________________RESERVADO
; |_________________________________HABILITA A ESCOLHA DE TODAS AS INTERRUPÇÕES
;#############################################
;================== TMOD =====================
;#############################################
; ---- --- -- -- ---- --- -- --
;|GATE|C/T|M1|M0|GATE|C/T|M1|M0|
; ---- --- -- -- ---- --- -- --
; | | | | | | | |_________Define o modo de operação dos Timer0/Contador0
; | | | | | | |____________Define o modo de operação dos Timer0/Contador0
; | | | | | |_______________=0: Timer0 (entrada de clock interno - fcristal/12) // =1: Contador (entrada de clock pelo pino externo TX).
; | | | | |____________________=0: Timer/Contador hab sempre TR0=1 ( software) // =1:Timer/Contador habilitado pelo pino INT0 = 1 e TR0 =1 (software e hardware )
; | | | |________________________Define o modo de operação do Timer1/Contador1
; | | |___________________________Define o modo de operação dos Timer1/Contador1
; | |______________________________=0: Timer1 (entrada de clock interno - fcristal/12) // =1: Contador (entrada de clock pelo pino externo TX).
; |___________________________________=0: Timer/Contador hab sempre TR1=1 ( software) // =1:Timer/Contador habilitado pelo pino INT1 = 1 e TR1 =1 (software e hardware )
;-------------------------------------------------------------------------------------------------------------------------------|
;MODO | M1 | M0 | DESCRIÇÃO |
;-------------------------------------------------------------------------------------------------------------------------------|
; 0 | 0 | 0 | Timer de 13 bits (THX8=xxxx xxxx TLX5= ***x xxxx) |
;-------------------------------------------------------------------------------------------------------------------------------|
; 1 | 0 | 1 | Timer/Contador de 16 bits (THX8 TLX8) |
;-------------------------------------------------------------------------------------------------------------------------------|
; 2 | 1 | 0 | Timer/Contador de 8 bits com recarga automática. (TLx é recarregado automaticamente com o valor de THx) |
;-------------------------------------------------------------------------------------------------------------------------------|
; 3 | 1 | 1 | TL0= TIMER DE 8 BITS usando TR0 e TF0 // TH0= TIMER DE 8 BITS usando TR1 e TF1 //TIMER 1 NÃO PODERÁ SER USADO |
;-------------------------------------------------------------------------------------------------------------------------------|
;#############################################
;================== PCON =====================
;#############################################
; ---- ---- --- --- ---- --- --- ---
;|SMOD|/POR|PFW|WTR|EPFW|EWT|---|---|
; ---- ---- --- --- ---- --- --- ---
; | | | | | | | |________RESERVADO
; | | | | | | |____________RESERVADO
; | | | | | |________________Quando =1 Habilita o RESET do TIMEOUT do WATCHDOG
; | | | | |_____________________Quando =1 habilita o alarme de falha na alimentação (PFW), Quando =0 Desabilita
; | | | |_________________________Quando =1 Indica que ocorreu um TIMEOUT do WATCHDOG (P/ voltar a 0 é necessária uma leitura de PCON)
; | | |_____________________________Quando =1 Indica que alimentação esta abaixo do aceitavel (P/ voltar a 0 é necessária uma leitura de PCON)
; | |__________________________________Quando =0 significa que o ultimo reset foi feito numa sequencia de POWER-ON
; |_______________________________________Quando =1 Duplica o BAUDRATE da UART quando nos modos 1,2 ou 3