Página 1 de 2
flip flop com 8051

Enviado:
17 Ago 2013 23:06
por renan-papaco
perdoem-me por esta pergunta... mas eu queria saber como fazer para q um programa leia uma entrada no 8051, um pulso alto e ai liga uma saida... um segundo pulso desliga essa saída.
Re: flip flop com 8051

Enviado:
18 Ago 2013 00:38
por Red Neck Guy
Pode, mas há restrições. Tem que levar em conta a frequência do sinal que irá ser o clock do teu "flip-flop", glitches e outras coisas. Mas dá pra fazer. Se for pra varrer o sinal do clock num looping a frequencia do clock tem que ser bem menor do que o teu ciclo desse loop. Agora se estiver amarrado na interrupção externa, aí pode ser mais alto. Não lembro ao certo pois faz tempo que não uso esse cara, mas o sinal de int pode ter 1/12 do clock.
Re: flip flop com 8051

Enviado:
18 Ago 2013 09:44
por tcpipchip
ou 1/4 para os DALLAS
Re: flip flop com 8051

Enviado:
18 Ago 2013 11:46
por andre_luis
Renan,
O que voce deseja implementar é praticamente uma função Toggle de subida de um sinal de entrada.
Isso seria facilitado se voce usasse o recurso de interrupção do microcontrolador, e se fosse por borda.
Tenta a implementação abaixo para ver se funciona ( pode ter erros de sintaxe, pois não compilei para testar ) :
- Código: Selecionar todos
if ( ENTRADA == 1 )
{
if ( DESCEU == 1 )
{
if ( SAIDA == 0 ) { SAIDA = 1 ; DESCEU = 0 ; }
if ( SAIDA == 1 ) { SAIDA = 0 ; DESCEU = 0 ; }
}
}
else
{
DESCEU = 1 ;
}
+++
Re: flip flop com 8051

Enviado:
18 Ago 2013 15:42
por Red Neck Guy
ou assim:
- Código: Selecionar todos
void loop_ff(void){
unsigned char anterior=0xff;
for(;;){
while(!CLK);
PINO_SAIDA ^= 0x01;
while(CLK);
}
}
Re: flip flop com 8051

Enviado:
19 Ago 2013 10:07
por ze2
ou assim, com interrupção...
- Código: Selecionar todos
#include <absacc.h> /* Include Macro Definitions */
#include <reg51.h>
#define PINO_SAIDA P00
#pragma AREGS // for other code it is save to use ARx symbols
static void int0 (void) interrupt 0 using 1 //INT0
{
PINO_SAIDA^=1;
}
//***************************************************************
void main( void )
{
EA=EX0=1;//hab. interrupt ext.
//-----------------eternamente é ter na mente éter na mente----------------------
for(;;)
{
}
}
(keil c)
Re: flip flop com 8051

Enviado:
19 Ago 2013 14:42
por renan-papaco
vlw pessoal... mas a questão é que eu precisava de 8 "flip flops" em 8 entradas. colocando 8 chaves em um port e 8 leds, relés, triacs e etc no port de saída escolhido por mim.
- Código: Selecionar todos
#include<at89x51.h>
#include<delay.h>
#include<lcd.h>
void lcdstart(){
LCD_init();
LCD_row1();
LCD_puts("INTERRUPTOR DE 8 ");
LCD_row2();
LCD_puts("CANAIS.");
}
unsigned char A1=0;
void main(){
lcdstart();
while(1){
A1 = P1;
switch(A1){
case 0x01:
P0=1;
delay_ms(100);
P0=0;
LCD_row1();
LCD_puts("LAMP 01 ON ");
LCD_row2();
LCD_puts(" ");
break;
case 0x02:
P0=2;
delay_ms(100);
P0=0;
LCD_row1();
LCD_puts("LAMP 02 ON ");
LCD_row2();
LCD_puts(" ");
break;
case 0x04:
P0=4;
delay_ms(100);
P0=0;
LCD_row1();
LCD_puts("LAMP 03 ON ");
LCD_row2();
LCD_puts(" ");
break;
case 0x08:
P0=8;
delay_ms(100);
P0=0;
LCD_row1();
LCD_puts("LAMP 04 ON ");
LCD_row2();
LCD_puts(" ");
break;
defaut:
P0=0;
}
}
}
o programa funciona, e só controla 4 pinos de saída... para controlar os 8 terei que editar e ampliar ele pra isso...atualmente eu apênas mando um pulso pra cada led. eu poderia instalar 4 CI's CD4013 usando 8 flip flops por fora do MCU, podendo controla-los individualmente.
Re: flip flop com 8051

Enviado:
19 Ago 2013 17:23
por ze2
confusão...já que é assim...
não é flipflop. é tipo um monoestável com 555. supondo que 8 teclas em P1 estejam pro gnd...
- Código: Selecionar todos
for(;;)
{
a1=~P1
if (a1)
{
P0^=a1;
delay(xxx);
}
}
Mas meio que nada a ver fazer algo prático assim. Foi só pra voce ver uma otimização e [tentar] entender e me explicar... ou não. Te vira pra por a informação no display
Re: flip flop com 8051

Enviado:
31 Ago 2013 22:18
por renan-papaco
ze escreveu:confusão...já que é assim...
não é flipflop. é tipo um monoestável com 555. supondo que 8 teclas em P1 estejam pro gnd...
- Código: Selecionar todos
for(;;)
{
a1=~P1
if (a1)
{
P0^=a1;
delay(xxx);
}
}
Mas meio que nada a ver fazer algo prático assim. Foi só pra voce ver uma otimização e [tentar] entender e me explicar... ou não. Te vira pra por a informação no display
e mais ou menos isso q quero fazer.... 8 monoestáveis independentes com o 8051, e colocar no display a informação de qual foi o ultimo led acionado
eu declarei no programa 4 variaveis(pra controlar 4 monoestaveis) mas o q acontece? so posso acionar um por vez. eu pensei em colocar uns flip flops no port de saida definido no programa mas acho isso meio gambiarra . quero controlar td so pelo 8051 mesmo.
Re: flip flop com 8051

Enviado:
01 Set 2013 08:21
por andre_luis
A abordagem por Timer fechado não funciona, pois o programa ficaria preso num loop fechado para cada variável.
Tem de implementar o conceito de time-slot que te permite administrar separadamente a temporização de cada saída....dá uma procurada na web.
+++
Re: flip flop com 8051

Enviado:
13 Set 2013 22:21
por renan-papaco
andre_teprom escreveu:A abordagem por Timer fechado não funciona, pois o programa ficaria preso num loop fechado para cada variável.
Tem de implementar o conceito de time-slot que te permite administrar separadamente a temporização de cada saída....dá uma procurada na web.
+++
e como é q eu faço isso? procurei na net e não achei nada sobre time slot pra 8052
Re: flip flop com 8051

Enviado:
14 Set 2013 03:07
por Renie
Olá Renan,
Eu nunca usei 8051 nem C até hoje mas, se seu problema se restringe só ao que foi exposto,vou tentar ajudar escrevendo em pseudo-código!
Inicialização
:Aqui você configura seu chip!
Corpo principal
:Um loop
Identificar tecla apertada (não esqueça o debounce!)
se tecla 1, rotina togle com parêmetro "1"
se tecla 2, rotina togle com parêmetro "2"
se tecla 3, rotina togle com parêmetro "3"
...
se tecla 2000, rotina togle com parâmetro "2000"
:volta loop
:Rotina Togle
-togle (parâmetro:tipo de variável, depende da quantidade que for utilizar)
Porta -parâmetro- = Porta -parâmetro- XOR $01 ( Exclusive OR)
- fim rotina togle
:
\
Re: flip flop com 8051

Enviado:
14 Set 2013 03:17
por Renie
Olá Renan,
Limpando o pseudo-código!
Inicialização
:Aqui você configura seu chip!
Corpo principal
:Um loop
Identificar tecla apertada (não esqueça o debounce!)
rotina togle ( nr da tecla apertada )
:volta loop
:Rotina Togle
-togle (parâmetro:tipo de variável, depende da quantidade que for utilizar)
Porta -parâmetro- = Porta -parâmetro- XOR $01 ( Exclusive OR)
- fim rotina togle
Re: flip flop com 8051

Enviado:
16 Set 2013 15:42
por renan-papaco
eu ainda sou um pouco iniciante em programação de 8051... mas vamos a alguns detalhes:
1- não sei se vc sabe mas não precisa por nenhum código pra inicializar o 8051... ele é inicializado de acordo com a definição vc quer fazer pra ele na hora da programação...bastando usar os SFR's caso vá programa-lo em ASM. em C vc define isso com o uso de headers.
2-tenho o código aqui postado... e consigo comandar cada pino separadamente(e não simultâneamente) e escrever a informação do respectivo pino no LCD... porém cada pino só libera um pulso. oq quero fazer é manter um pino ou mais pinos ligados, como se fosse interruptores e lâmpadas em paralelo.
3-talvez eu possa usar flip-flops nas saídas... mas ficará algo iniciante demais... e não vou aprender a controlar o estado de cada saida só com um chip... por isso só peço q alguem me explique bem o que é time-slot e como implementa-lo aki no meu circuito.
Re: flip flop com 8051

Enviado:
16 Set 2013 16:49
por Djalma Toledo Rodrigues
Você deve Ler a Porta
a Variável em uma posição da Ram endereçável por bit
Modifica os Bits necessários e
Escreve esse Byte ( a Variável) na respectiva Porta
O objetivo ai é criar um espelho da Porta.
Lê / modifica / escreve.
DJ