Página 1 de 1
Ligar 2 microcontroladores pela Serial

Enviado:
15 Jan 2007 10:35
por j-menezes
Alguem aqui sabe como se Liga 2 microcontroladores pela Serial ?
eu Simplesmente liguei um ao outro pela TX e RX invertendo, e
nada de funcionar.
valeu
[]'s

Enviado:
15 Jan 2007 10:40
por rubenprom
Acho que não há necessecidade de somente ligar o RX/TX invertidos. Você pode usar os pinos de I/O para isto. Criar uma rotina na programação na ora de escrever e ler de um microcontrolador para outro, fazendo alguns tipo de protocolos. Mas para isso voce deve setar direito os comandos de programação no caso TMOD, SCON, e assim por diante, no caso do 8051

Enviado:
15 Jan 2007 12:27
por brasilma
E as rotinas Ruben?

Enviado:
15 Jan 2007 12:48
por rubenprom
Pois ai que está, eu tou acostumado a fazer isso nos AVR, que a sintaxe de programação conheço. Sobre o 8051 sei o qeu s epode fazer, pois isso vi aqui na facultade, porem as rotinas, especialmente as configurações nao sei.
Posso ate dar um palpite, mas nao quero fazer errar o nosso amigo. Eu ja fiz esse procedimento, deu certo.
Aqui passo uma sintaxe do que pode ser feito:
Tanto seja no Microcontrolador Mestre e no Escravo
void escreve(unsigne int endereco, unsigned int dado)
{
unsigned char xdata *pointer;
pointer= (unsigned char xdata *)((unsigned int)(endereco&0xFFFF));
*pointer= dado;
//Aqui coloque a Rotina que manipula o envio do dado
//tamanho, caracteres e velocidade
}
void le(unsigned int endereco)
{
unsigned char xdata *pointer;
unsigned char dado= 0;
pointer= (unsigned char xdata *)((unsigned int)((endereco)&0xFFFF));
dado= *pointer;
return(dado);
//Aqui coloque a rotina que manipula o recebimento do dado
//tamanho, caracteres e velocidade
}
Espero que dê uma visão, porem nao sei o que voce quer escrever e ler no seus microcontroladores. Foi assim que eu fiz numa cadeira, deu certo, porem a gente teveproblemas, porque ambos processadores trabalhavam com velocidades diferentes.
Vou procurar nos meus arquivos e posto aqui. Se alguem souber um jeito mais facil, gostaria tb eu aprender

Enviado:
15 Jan 2007 14:05
por j-menezes
Pois ai que está, eu tou acostumado a fazer isso nos AVR, que a sintaxe de programação conheço. Sobre o 8051 sei o qeu s epode fazer, pois isso vi aqui na facultade, porem as rotinas, especialmente as configurações nao sei.
Posso ate dar um palpite, mas nao quero fazer errar o nosso amigo. Eu ja fiz esse procedimento, deu certo.
Aqui passo uma sintaxe do que pode ser feito:
Tanto seja no Microcontrolador Mestre e no Escravo
void escreve(unsigne int endereco, unsigned int dado)
{
unsigned char xdata *pointer;
pointer= (unsigned char xdata *)((unsigned int)(endereco&0xFFFF));
*pointer= dado;
//Aqui coloque a Rotina que manipula o envio do dado
//tamanho, caracteres e velocidade
}
void le(unsigned int endereco)
{
unsigned char xdata *pointer;
unsigned char dado= 0;
pointer= (unsigned char xdata *)((unsigned int)((endereco)&0xFFFF));
dado= *pointer;
return(dado);
//Aqui coloque a rotina que manipula o recebimento do dado
//tamanho, caracteres e velocidade
}
Neste caso voce mandou em qtos Pinos ?
Eu tenho disponivel apenas os Pinos da Serial TX e RX

Enviado:
15 Jan 2007 15:35
por brasilma
Hum, fiz apenas algumas brincadeiras com C até agora, porem creio que estes trechos que colocou não manipulam a serial não.
Teria de ter uma secção de configuração, que em assembler seria assim (sei que a formatação vai ficar ruim, para melhorar, copie e cole num editor):
INITTIMER:
MOV TMOD,#21H ; Timer 1 (2=timer 8 bits auto-reload) e timer 0 (1=timer 16bits)
MOV TH1,#0E6H ; 2404 = ((2^SMOD)/32)*(OSC/(12*(256-230))) =
MOV TL1,TH1 ; = ((2^0)/32)*(24x10^6/(12*(52))) (E6H=230)
; 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
MOV PCON,#00H ; SMOD 0 - obs: registrador nao e bit enderessavel - 1200, 2400, 4800
; Inicializa Ints
INITINT:
SETB EA ; Abilita Interrupcoes
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 TR1 ; Liga timer 1
Na sequencia viriam as rotinas (de preferência por interrupção) que enviam e recebem os dados pela seria, de uma forma bem elementar, seria assim:
(recepção)
SERIAL_INT: JB RECSTARTED,SERIAL_INTD1
MOV R0,RAMBUFIDX ; endereco base da RAM_LCD e STRING_BUFFER
MOV A,SBUF
SERIALD3: MOV @R0,A
INC R0
MOV A,R0
CJNE A,STRLENGHT,SERIALD1 ; recebidos 14 caracteres?
CLR ES
MOV R0,#RAMLCDSTRBUF ; Reposiciona ponteiro no inicio do Buffer LCD / Rec String
SERIALD1: MOV RAMLCDSTRBUFIDX,R0
SERIALD2: CLR RI
RETI
(transmissão)
ENVIASTRINGD1: MOV R0,#75H
ENVIASTRINGL1: MOV SBUF,@R0 ; escreve na serial o conteudo do acumulador
JNB TI,$
CLR TI
DEC R0
CJNE R0,#72H,ENVIASTRINGL1 ; enviados todos caracteres?
Abraços,
MArcos.

Enviado:
15 Jan 2007 19:56
por pomboeletronic
Ainda estou começando a programar em "c"....
vou montar um equema com 2 at89s8253 com as linhas de rx e tx cruzadas...
Depois tenho que configurar os 2 uc's para comunicação serial, vou usar uma taxa de 9600....
é facil de fazer, pois estou com um projeto que faço isso...
tenho uma placa que envia um dado que é gerado segundo uma funçao que escrevi... para outra placa que recebe este dado faz algumas contas e me retorna outro valor correspondende ao dado gerado pela 1ª placa...
pra saber se esta funcionado uso 2 programas tipo hipertetminal para monitorar as linhas de rx e tx...
por exemplo...
a 1ª placa envia o dado 23 53 42 30 30 31 23 53 42
e a 2ª placa responde 23 53 42 00 00 01 23 53 42

Enviado:
15 Jan 2007 20:02
por rubenprom
J-menezes, os pinos que utilizei forma da porta 2 em ambos controladores.
P2.7 e P.2.6. Porem tinhamos de fazer que eles se comunicasem em forma FULL DUPLEX, apenas o teste qeu foi feito, foram ligar alguns leds na saida da porta3, mas a intenção era que o que fosse processador aparece-se no display LCD tb este ligada à porta 3 do microcontrolador. Detalhe: Os dados que mandavamos pelo LCD eram em nibble, ou seja usavamos 4 bits para mandar os dados. Sinceramente foi dificil, terminei rodando a cadeira, eu nao consegui, apenas algumas coisinhas, alguma ideia que poderia ai te ajudar
um abraço,

Enviado:
15 Jan 2007 20:05
por rubenprom
Eu acho ainda, que se se quise-se pra um bom começo 2 portas serias em dois microcontroladores, deveria-se usar o modo HALF DUPLEX, pois ora, uma vez escreve, ora uma vez faz a leitura. Entao pode-se usar dois pinos, de cada microcontrolador, por exemplo mandar um byte o processador entenda que esta em modo de escrita e no mesmo pino mandar um byte dizendo que o microcontrolador esta em modo de leitura.