Transmissão serial

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Transmissão serial

Mensagempor dedos » 13 Out 2008 19:16

Pessoal estou transmitindo 10bytes de dados, porém tenho dúvidas
1ªUtilizo TI para identificar que a palavra foi enviada?
2ªComo é setado TI (como essa informação chega até o 8051)?
3ªHá maneira de envia dado em ASCII em programação em Assembly?
4ª Posso enviar todos os bytes de uma vez?

Pessoal sou novato em 8051 e desculpe pelos minha dúvidas!

Obrigado pela ajuda!
dedos
Bit
 
Mensagens: 6
Registrado em: 18 Set 2008 21:20

Mensagempor brasilma » 13 Out 2008 19:22

1 sim
2 não chega faz parte do hard do controlador, setado pelo sistema de transmissão qdo o byte é enviado
3 envia o que quiser em qualquer linguagem
4 a transmissão é feita por bytes com 1 bit por vez de forma automática (transmissão serial)

O processo de tranmissão serial é o mesmo independente da paltaforma, aproveita aprender logo antes que acabe
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Re: Transmissão serial

Mensagempor dedos » 13 Out 2008 20:03

Não entendi sobre a transmissão em Assembly, como posso definir isso em em liguagem de máquina?
Exemplifique:

como transmitir a palavra SUNDAY?

Outra dúvida, habilitei o ES interrupção serial, como posso assegurar que numa transmissão de 10 bytes recebi realmente 10 bytes?
A rotina de RI deve estar dentro do endereço de interrupção?

Obrigado pela ajuda!
dedos
Bit
 
Mensagens: 6
Registrado em: 18 Set 2008 21:20

Mensagempor brasilma » 13 Out 2008 20:48

Vc pode armazenar em um DB 'SUNDAY' e recuperar utilisando um MOVC, ou pode carregar manualmente: 53H, 55H, 4EH, 44H, 41H, 59H.

MOV SBUF,"DADO"
JNB TI,$
CLR TI

Não esquecer de configurar o TIMER, SCON, PCON, com o modo e velocidade desejada (baud rate) de acordo com seu cristal.

Depois abilitar interrupação serial ES e interrupção geral EA.

Ligar timer TR.

Veja um exemplinho abaixo de configuração para um cristal de 24MHz:

INITTIMER: MOV TMOD,#21H ; Timer 1 (2=timer 8 bits auto-reload) e timer 0 (1=timer 16bits)
MOV TH0,#0E0H ; 24MHz/12=2MHz/8192=244Hz (65535-8192=E000H)
MOV TL0,#0 ;
;MOV TH1,#0CCH ; 1202 = ((2^SMOD)/32)*(OSC/(12*(256-204))) =
;MOV TL1,TH1 ; = ((2^0)/32)*(24x10^6/(12*(52))) (CCH=204)
MOV TH1,#0F3H ; 4808 = ((2^SMOD)/32)*(OSC/(12*(256-243))) =
MOV TL1,TH1 ; =((2^0)/32)*(24x10^6/(12*(13))) (F3H=243)
;MOV TH1,#0F3H ; 9615 = ((2^SMOD)/32)*(OSC/(12*(256-243))) =
;MOV TL1,TH1 ; =((2^1)/32)*(24x10^6/(12*(13))) (F3H=243)


; *** Não esquecer de ajustar o SMOD ***
; Inicializa Serial
INITSERIAL: MOV SCON,#50H ; Serial Mode 1 (8-bit, start (0), 8 data, stop (1) Baud Rate Var-
; -iable ) + REN (Rec Enable) = 1

;*** Configurado aqui e reconfugurado mais abaixo (configuracao da balanca) para conf printer ***
;MOV PCON,#00H ; SMOD 0 - obs: este registrador nao e bit enderessavel - 1200, 4800
MOV PCON,#80H ; SMOD 1 - obs: este registrador nao e bit enderessavel - 9600

; Inicializa Ints
INITINT: SETB EA ; Abilita Interrupcoes
SETB ET0 ; Abilita T0
;SETB ES ; Abilita Serial - Config no programa; evita recepcao qdo fora hora
MOV IP,#10H ; Define Serial Port Interrupt como High

; Liga Timers
ONTIMER: SETB TR0 ; Liga timer 0
SETB TR1 ; Liga timer 1

SETB ES ;

Transmitiu ou recebeu??? se a rotina é de transmissão, após cada byte ser transmitido é gerado um TI, portanto se forem gerados 10 interrupções 10 bytes devem ter sido enviados, na recepção é o mesmo, ou seja, um RI para cada byte recebido.

Se vc iniciar o processo de transmissão (ou recepção) e as interrupções estiverem habilitadas, sempre que for gerado um TI ou RI o processamento será desviado para o vetor de tratamento da interrrupção, para vc tratá-la.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra


Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x