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 enviara continuamente o caracter “A”, sendo que a ideia é visualizarmos o dado chegando na tela do computador por meio do Hyper Terminal.
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
-
Na tela do Hyper Terminal você verá caracteres “A” sendo recebidos a cada 0,3 segundos
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.3 #
//#==============================================================================================#
//# Hardware Necessário: CPU-8051-USB #
//#==============================================================================================#
//# Descrição: Envia ciclicamente o caracter (A) através da porta serial a 9600bps #
//# e a cada envio, inverte o estado do bit 0 da porta P0, sendo que isso pode #
//# ser observado através do LED (LD0) na propria CPU-8051-USB #
//#==============================================================================================#
//========== INCLUDES ==========
#include "8051.H" //Flags do 8051
//========== PROTITIPOS ==========
void TIMER(unsigned char);
//-------------------------------------------------------------
//=========================== MAIN ============================
//-------------------------------------------------------------
void main (void)
{
IE=0;
PCON=0;
SCON=0x54; //canal serial ajustado para modo assincrono
TMOD=0x20; //TIMER 1 no modo 2 - temporizador de 8 bits com autoreload
PCON=0; //NAO Dobra BAUDRATE
TL1=0xFD; //carrega taxa de transmissao
TH1=0xFD; //carrega taxa de transmissao
TR1=1; //Liga TIMER 1 p/ geração do BAUD_RATE
//----- Loop infinito -----
while (1)
{
TI=0; //Zera flag de Status de envio
SBUF='A';
while(TI==0); //Espera fim da transmissão
TIMER(100);
}
}
//#############################################################
//-------------------------------------------------------------
//======================= SUB ROTINAS =========================
//-------------------------------------------------------------
//#############################################################
//----------------------------------------------------------------
//========================= TEMPORIZADOR =========================
//----------------------------------------------------------------
void TIMER(unsigned char TEMPO)
{
unsigned char CONTA1=0;
unsigned char CONTA2=0;
unsigned char CONTA3=0;
while(CONTA1<=TEMPO)
{
CONTA1++;
CONTA2=0;
while(CONTA2<=2)
{
CONTA2++;
CONTA3=0;
while(CONTA3<=90)
{
CONTA3++;
}
}
}
}
;################################################################################################
;# EMPRESA: ========== CONTROL CHIP ENGENHARIA ======== #
;# SITE: http://www.controlchip.com.br #
;#==============================================================================================#
;# PROGRAMADOR: Israel Cortez #
;# DATA DO SOFTWARE: 20/05/2009 #
;# VERSÃO ATUAL: VR3.3 #
;#==============================================================================================#
;# Hardware Necessário: CPU-8051-USB #
;#==============================================================================================#
;# Descrição: Envia ciclicamente o caracter (A) através da porta serial a 9600bps #
;# e a cada envio, inverte o estado do bit 0 da porta P0, sendo que isso pode #
;# ser observado através do LED (LD0) na propria CPU-8051-USB #
;#==============================================================================================#
BAUD_RATE EQU 0FDH ;taxa de transmissao de 9600 bps COM CLOCK DE 11.0592MHz
;================================================================
;-------------------- PARAMETRIZAÇÃO DE T1 ----------------------
;No 8051 o Baud Rate é gerado pelo T1
;VALOR_TH1 = 256 - [ (2^SMOD x freqcristal) / (32 x 12 x taxa) ]
;===============================================================
ORG 0000H
LJMP INICIO
ORG 03H
RETI
ORG 13H
RETI
ORG 0BH
RETI
ORG 1BH
RETI
ORG 23H
RETI
ORG 2BH
RETI
ORG 30H
INICIO:
MOV IE,#0
MOV PCON,#0
MOV SCON,#01010100B ;canal serial ajustado para modo assincrono
MOV TMOD,#20H ;TIMER 1 no modo 2 - temporizador de 8 bits com autoreload
MOV PCON,#0 ;NAO Dobra BAUDRATE
MOV TL1,#BAUD_RATE ;carrega taxa de transmissao
MOV TH1,#BAUD_RATE ;carrega taxa de transmissao
SETB TR1 ;liga TIMER 1 p/ geração do BAUD_RATE
;========================================
;========== PROGRAMA PRINCIPAL ==========
;========================================
ENVIA: ; ---- Envia Letra (A) ----
MOV A,#'A'
MOV SBUF,A ;Envia o Caracter A
ESPERA: JNB TI ,ESPERA ;Aguarda termino da transmissão
CLR TI ;Limpa flag TI
CPL P0.0 ;A cada caracter enviado, inverte o estado do led
CALL TIMER ;Chama temporizador
LJMP ENVIA ;Volta ao inicio p/ enviar A novamente
;===================================
;========= TEMPORIZADOR 1 ==========
;===================================
TIMER: MOV R1,#200D
MOV R2,#200D
REPETE_TEMPO: NOP
NOP
DJNZ R1,REPETE_TEMPO
MOV R1,#200D
DJNZ R2,REPETE_TEMPO
RET
END
;#################################################################################################################
;=================================================================================================================
;============================================= OBSERVAÇÕES GERAIS ================================================
;=================================================================================================================
;#################################################################################################################
;########################################################
;================== MAPA DE MEMORIA =====================
;########################################################
;==================================================================================================
;00h - 07h ------------------------------- R0 - R7 do banco 0 |
;08h - 0Fh ------------------------------- R0 - R7 do banco 1 |
;10h - 17h ------------------------------- R0 - R7 do banco 2 | -> Interligado a ULA
;18h - 1Fh ------------------------------- R0 - R7 do banco 3 |
;==================================================================================================
;20h - 2Fh ------------------------------- Uso geral | -> endereçavel bit a bit 128 bits
;==================================================================================================
;30h - 7Fh ------------------------------- Uso Geral
;==================================================================================================
;#################################################################################################################
;=================================================================================================================
;=================================== 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 | M0 | M1 | 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