Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
Entre para seguir isso  
jorgeletronico

traduzir codigo em c

Recommended Posts

Por favor alguem q entenda linguagem c poderia traduzir esse codigo pra linguagem humana pra eu poder ,reescrevelo em asm.Agradecido!

********************************************************************************

* Programa PicDimmer - Controlando la Potencia Eléctrica con PIC

* Rutinas originales: Scott Fink Microchip 1997

* Adaptación PIC16F84: Carlos Narvaez, 2002

* Compilado: CC5X Free V3.1

*

* RB0 = Pulsador Dim

* RB1 = Pulsador Brillo

* RA0 = Sensor de cruce por cero

* RA4 = Salida al optoacoplador

********************************************************************************/

#include <16f84.h>

#pragma bit Brtbut @ PORTB.0

#pragma bit Dimbut @ PORTB.1

#pragma bit LineInput @ PORTA.0

#pragma bit Salida @ PORTA.4

void Buttoncheck(void); //verificar los pulsadores

unsigned int PercentOn, Maxdim; //variables globales

unsigned int TestCheck, Outcount, TestCount;

unsigned int DelayCnt;

unsigned int LastBoth, FirstPass;

unsigned int Count;

unsigned int Maxbrt, NotInTest;

void main() {

Maxbrt = 0xf0; //brillo máximo

NotInTest = 3;

PercentOn = 0xd0; //periodo encendido

Maxdim = 0x70; //valor máximo Dim

TestCheck = 0; //

Outcount = 0; //contador salida del modo test

TestCount = 0; //contador modo test

DelayCnt = NotInTest; //contador retardo

LastBoth = 0; //bandera ambos pulsadores

//presionados la ultima vez

FirstPass = 1; //

Count = 0; //contador general

for(Count = 0; Count < 60; Count++) //estabilización tensión

{

while(LineInput == 1);

while(LineInput == 0);

clrwdt();

}

W = 0x5; //1:64 prescale, Pull-up activo

OPTION = W;

W = 0x11; //RA0, RA4 Entradas

TRISA = W;

PORTA = 0x10; //RA4 Latch high

W = 0x3; //RB0, RB1 Entradas

TRISB = W;

while(LineInput == 1) //Sincronización fase linea

clrwdt();

TMR0 = PercentOn;

while(TMR0 >= 3 && LineInput == 0) //retardo entrada punto apropiado

clrwdt();

Carlos A. Narváez V. 2002Regulación de la Potencia Eléctrica Aplicaciones Personales

while(1)

{

Count = 0;

while(Count < DelayCnt) //Verifica pulsadores

{ //cada DelayCnt cruce por cero

Count += 1;

if(LineInput == 1) //si línea AC esta en semiciclo

{ //positivo. incrementa Maxdin y

Maxdim +=5; //resincroniza con la línea

while(LineInput == 1);

while(LineInput == 0)

clrwdt();

}

else

{

while(LineInput == 0) //Espera el cruce por cero

clrwdt();

Maxdim = PercentOn - TMR0 + 2; //compensa valor de full Dim

}

if(FirstPass == 1) //Si es el primer pase Full Dim

{

FirstPass = 0;

PercentOn = Maxdim;

}

if(PercentOn < Maxdim)

PercentOn = Maxdim;

TMR0 = PercentOn;

while(TMR0 >= 3 && LineInput == 1) //Retarda encendido del triac

clrwdt();

PORTA = 0x00; //RA4 Lach Alto

W = 0x01; //RA0 entrada, RA4 Salida

TRISA = W; //Dispara triac

#asm

nop //Retardo disparo del triac

nop

nop

nop

nop

nop

nop

#endasm

W = 0x11; //RA4, entrada

TRISA = W; //Fin señal disparo triac

clrwdt();

if(LineInput == 0) //línea AC en semiciclo negativo?

{

Maxdim +=5; //si es asi incrementa Maxdim

while(LineInput == 0); //y resincroniza con la línea

while(LineInput == 1)

clrwdt();

}

else

{

while(LineInput == 1) //espera cruce por cero

clrwdt();

Maxdim = PercentOn - TMR0 + 2; //compensa full Dim

}

Carlos A. Narváez V. 2002Regulación de la Potencia Eléctrica Aplicaciones Personales

if(PercentOn < Maxdim) //corrija brillo

PercentOn = Maxdim;

TMR0 = PercentOn; //Retardo

while(TMR0 >= 3 && LineInput == 0)

clrwdt();

PORTA = 0x00;

W = 0x01;

TRISA = W; //dispare triac

#asm

nop

nop //retardo señal disparo

nop

nop

nop

nop

nop

#endasm

W = 0x11;

TRISA = W; //Fin señal disparo

clrwdt();

}

Buttoncheck(); //verifica pulsadores

}

}

/*************************************************************************

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem o que você quis dizer, é a conversão desse código em C# pra ASM ou pode ser pra C++ bem organizado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • nao amigo,em linguagem humana.Tipo o while, então ficaria enquanto x for maior que y entendeu?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×