Página 1 de 1

Como inserir condições?

MensagemEnviado: 10 Nov 2007 23:09
por KILB
Estou com uma duvida no exemplo "EXPIO" da CCS, que é de expanção de IO, que é a de como inserir
condições para um determinado funcionamento, ou melhor dizendo, se for observado o trecho abaixo a gente
nota que entre a varredura de entrada e saida existe uma condição de funcionamento ao acionar uma determinada
entrada.


void main() {
BYTE data;
do {
read_expanded_inputs (&data);

data |= 0xF8; //Force the unused input bits on
data -= (!(data&0x01)&!(data&0x02))<<2; //Turn on bit 2 it both inputs are
//toggled
write_expanded_outputs (&data);
} while (TRUE);
}


Mas a condição mostrada no exemplo não é muito clara, pelo menos pra mim.
Alguem poderia me dar um exemplo um pouco mais claro?

Obrigado



Marcos

MensagemEnviado: 16 Nov 2007 07:15
por fabim
xiii. kilb. Ta fod´s.. Voce não esta entendendo a sintaxi ou a lógica usada neste trecho ?

Abraços

Fabim

"OBS> programo só em ASM,BASIC,PASCAL"Mânssss.. posso de ajudar na logica.

MensagemEnviado: 16 Nov 2007 19:19
por KILB
Seguinte na verdade eu tava querendo usar algo que me oferecesse um numero maior de entrada e saida com o pic, pode ser em asm mesmo.
Neste caso eu tava tentando usar o exemplo da CCS e até entendi alguma coisinha sim, mas quando imaginei, pô e se eu quizer inserir algumas condições como é que fica?
A sintaxe até que deu pra entender mas a lógica ta meio estranha.



Valeu


Marcos

MensagemEnviado: 19 Nov 2007 22:18
por Doglao
Ola!
acho que ta meio extranha mesmo esta logica mas funciona sim, dei uma modificada no programa e parece mais legivel e voce pode aplicar com mais facilidade, mas desta forma o programa vai ficando muido grande, o exemplo da ccs esta taquigrafico, mas eh mais funcional e eficiente que este que fiz.

Código: Selecionar todos
#include <74595.c>
#include <74165.c>


void main() {
   int Pointer = 1; //apontador para varredura do byte lido nas entradas
   int resultado=0;
   int contador=0;//conta as vezes que foi rotacionado o Pointer entao vai ser o pino de entrada especifico
   BYTE data;
   do {
      contador=1;
      read_expanded_inputs (&data);
      if(data){
          while(!resultado){//aqui se pode inverter a logica como acionamento alto ou baixo
              resultado = Pointer & data;
                  if(resultado) {
                       resultado=0; 
                          
                       break;
                   }
                   Pointer <<= 1;
                   contador++;
            }
        }
        if(contador==3){// aqui voce faz a condicao que voce quizer com o valor em contador
           //sua funcao
       }
       if(contador==5){
          //sua funcao
      }
   } while (TRUE);
}


sho estou usando o dispositivo de entrada que precisa encontrar o pino que foi acionado, para saida ta facil nem preciso comentar nada para saidas. se voce for colocando mais dispositivos para entrada o sistema de varredura eh o mesmo e eh soh adicionar um valor 8 no final do resultado para cada dispositivo, no terceiro voce tem que adicionar 16 e assim vai.
abcs