Multiplicação das portas utilizadas como saida no PIC

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Multiplicação das portas utilizadas como saida no PIC

Mensagem  Luiz Claudio em Ter Mar 02, 2010 6:27 pm

Caros colegas, montei um circuito que transforma quatro portas do PIC em 32 saídas ou mais, através de um circuito integrado denominado 74hc595,porém preciso transformar o programa abaixo em uma biblioteca pois cada vez que tenho que mudar uma das portas preciso reescrevê-lo.
Alguém pode me ajudar?
Código:

//** I N C L U D E S **********************************************************/
#include <p18cxxx.h>   // Necessário para que o compilador adicione a biblioteca
         // com as definições do PIC selecionado no projeto, neste
             // caso, o modelo 18F4550.

#include <delays.h>      // Biblioteca padrão de rotinas de atraso do C18 Microchip



/** D E F I N E S ************************************************************/

#define     SH_CP                 PORTDbits.RD0
#define     DATA             PORTDbits.RD1
#define     ST_CP               PORTDbits.RD2
#define     LIBERA_DADOS          PORTDbits.RD3


/**  P R O T O T I P O S  P R I V A D O S ***********************************/


unsigned char  DADOS[32],i, CI3_Q7,CI3_Q6,CI3_Q5,CI3_Q4,
CI3_Q3,CI3_Q2, CI3_Q1, CI3_Q0,CI2_Q7, CI2_Q6,CI2_Q5,CI2_Q4,
CI2_Q3,CI2_Q2,CI2_Q1,CI2_Q0,CI1_Q7, CI1_Q6, CI1_Q5, CI1_Q4,
CI1_Q3,CI1_Q2, CI1_Q1,CI1_Q0, CI4_Q7, CI4_Q6, CI4_Q5, CI4_Q4,
CI4_Q3,CI4_Q2, CI4_Q1,CI4_Q0 ;                     //Saidas que serão ativadas

                                                      
void ConfiguraSistema (void);

 

void main(void)


{

 ConfiguraSistema();
                      //Configura quem são as entradas e saidas no PIC

//** TRNSFORMA 4 PORTAS EM 32 SAIDAS*******************************************************************************/

//** SAIDAS DO CI74HC595  Nº 4  **********************************************************************************/
DADOS[0]= CI4_Q7;
DADOS[1]= CI4_Q6;
DADOS[2]= CI4_Q5;
DADOS[3]= CI4_Q4;
DADOS[4]= CI4_Q3;
DADOS[5]= CI4_Q2;
DADOS[6]= CI4_Q1;
DADOS[7]= CI4_Q0;

//** SAIDAS DO CI74HC595  Nº 3  ***********************************************************************************/

DADOS[8]= CI3_Q7 ;
DADOS[9]= CI3_Q6 ;
DADOS[10]= CI3_Q5;
DADOS[11]= CI3_Q4;
DADOS[12]= CI3_Q3;
DADOS[13]= CI3_Q2;
DADOS[14]= CI3_Q1;
DADOS[15]= CI3_Q0;

//** SAIDAS DO CI74HC595  Nº 2  **************************************************************************************/

DADOS[16]= CI2_Q7 ;
DADOS[17]= CI2_Q6 ;
DADOS[18]= CI2_Q5 ;
DADOS[19]= CI2_Q4 ;
DADOS[20]= CI2_Q3 ;
DADOS[21]= CI2_Q2 ;
DADOS[22]= CI2_Q1 ;
DADOS[23]= CI2_Q0 ;

//** SAIDAS DO CI74HC595  Nº 1  ************************************************************************************/

DADOS[24]= CI1_Q7 ;
DADOS[25]= CI1_Q6 ;
DADOS[26]= CI1_Q5 ;
DADOS[27]= CI1_Q4 ;
DADOS[28]= CI1_Q3 ;
DADOS[29]= CI1_Q2 ;
DADOS[30]= CI1_Q1 ;
DADOS[31]= CI1_Q0 ;


//** INIBE SAIDAS DOS DADOS ENQUANTO CARREGA OS FLIP FLOPS DE TODOS OS 74HC595  ************************************/

LIBERA_DADOS =1;

//** CRIA LAÇO CONDICIONAL PARA ARMAZENAMENTO DE DADOS  ************************************************************/ 

for(i = 0; i < 32; i++)
{
if(DADOS[i] == 1 )
{

//** SETA BIT ARMAZENADOS NO ENDEREÇO DE MEMORIA (DADOS[i])  ********************************************************/

 DATA = 1;

//** ZERA OS DOIS CLOCKS DE DESLOCAMENTO E RECOLHIMENTO DE DADOS DO  74HC595  *****************************************/

 SH_CP = 0;
 ST_CP = 0;

//**  SETA BIT DA POSIÇÃO ''QX'' DO 74HC595 ************************************************************************/ 
 SH_CP = 1;
 //Delay10KTCYx(yy);   // se nescessário( ocilação)
 ST_CP = 1;
 //Delay10KTCYx(yy);   // se nescessário( ocilação)
}
else
{

//** RESETA BIT ARMAZENADOS NO ENDEREÇO DE MEMORIA (DADOS[i])  *****************************************************/

 DATA = 0;

//** ZERA OS DOIS CLOCKS DE DESLOCAMENTO E RECOLHIMENTO DE DADOS DO  74HC595  ***************************************/

 SH_CP = 0;
 ST_CP = 0;

//**  RESETA BIT DA POSIÇÃO ''QX'' DO 74HC595 **********************************************************************/ 

 SH_CP = 1;
 //Delay10KTCYx(yy);   // se nescessário( ocilação)
 ST_CP = 1;
 //Delay10KTCYx(yy);   // se nescessário( ocilação)
}
}

//**  LIBERA LEITURA DAS PORTAS DO 74HC595  *************************************************************************/ 

 LIBERA_DADOS =0;



 ConfiguraSistema();                      //Configura quem são as entradas e saidas no PIC


}//end main

void ConfiguraSistema (void)
{


//**Configura todas as 13 portas analógicas ANx (portas do conversor A/D) como pinos digitais

      ADCON1 |= 0x0F;            // Todos os pinos como digital




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

    //SAIDAS
 



TRISDbits.TRISD0 = 0;
TRISDbits.TRISD1 = 0;   
TRISDbits.TRISD2 = 0;     
TRISDbits.TRISD3 = 0;
   
}//end ConfiguraSistema

Luiz Claudio

Mensagens : 1
Data de inscrição : 01/03/2010
Idade : 45
Localização : Belo Horizonte

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Multiplicação das portas utilizadas como saida no PIC

Mensagem  Bruno S. Avelar em Qui Mar 11, 2010 9:25 pm

Olá,
Você faz muito bem em criar uma biblioteca para isto. Bibliotecas são importantes para manter o código organizado e também para poder ter um bom reaproveitamento em outros projetos.

Primeiro eu vou te dar algumas dicas como funciona uma biblioteca e o que você precisa fazer para criar uma. Depois eu dou uma olhada no seu projeto.

Uma biblioteca é um conjunto de funções e definições que trabalham com um "objeto" comum. Você já conhece bem algumas bibliotecas, por exemplo: A de LCD que possui funções e definições necessárias para utilizar o LCD, a do conversor AD, a de 7 segmentos etc.

Existem dois tipos de bibliotecas: Bibliotecas de usuário e bibliotecas do compilador. Bibliotecas de usuários são feitas por nós programadores enquanto bibliotecas do compilador são feitas por quem produziu o compilador. Por exemplo: a bliblioteca dos displays de LCD e de 7 segmentos que você possui são bibliotecas de usuário enquanto a do conversor AD é do compilador C18.

Em C, uma bilioteca é formada por 2 arquivos. Um arquivo .h que é chamado de header e outro .c ou .o que é chamado de fonte. O arquivo .o geralmente é usado quando queremos que outros usuários possam usar a biblioteca que desenvolvemos, mas não possam ver como foi desenvolvido ou modifica-la. No nosso caso criaremos uma biblioteca com um arquivo .h e um arquivo .c

O header (arquivo .h) é o cabeçalho da biblioteca. Ele possui protótipos das funções existentes na biblioteca e alguns defines em alguns casos. É neste arquivo que você deve fazer a maior parte dos seus comentários.

O fonte (arquivo .c) é onde cada função que você prototipou no arquivo header deve ser implementada. Basta escrever as funções normalmente neste arquivo. Importante: Voce deve inlcuir o arquivo header no arquivo .c. Então a primeira linha do seu arquivo .c sempre vai ser #include "xxxxxxx.h" onde "xxxxxxx" é o nome do seu header.

Para utilizar a biblioteca basta incluir ela (o header) no seu projeto, incluir ela no main (por exemplo. Uma biblioteca também pode usar funçoes de outras bibliotecas, basta incluir) e chamar as funções como fazemos com o LCD e o 7 segmentos.

Sobre seu projeto eu recomendo você começar dividindo ele em funçoes. Por exemplo: Uma funçao para configurar as portas utilizadas pelo multiplicador de portas do PIC. Outra função que receba a porta que se deseja mudar como parametro. Outra que muda um conjunto de portas que utilize esta que muda uma só. e ai vai....

Aí é só agrupar as funções em uma biblioteca. Afinal, biblioteca é um conjunto de funções e definições trabalham com um "objeto" comum, no seu caso este multiplicador de portas.

Espero ter ajudado,
Bruno S. Avelar
avatar
Bruno S. Avelar
Admin

Mensagens : 74
Data de inscrição : 26/07/2009
Idade : 33
Localização : Belo Horizonte MG

Ver perfil do usuário http://picminas.forumeiros.com

Voltar ao Topo Ir em baixo

Bibliotecas

Mensagem  Jonathas em Seg Maio 23, 2011 5:27 pm

E o que mais é necessário para criar uma biblioteca.
vc poderia me mandar um exemplo.
Eu devo criar um arquivo em .c copilar ele em .h?
como criar esse arquivo .h que vc citou?
eu vi que precisa definir a funçao como extern, o que mais esse arquivo da biblioteca tem de ser diferente dos projetos comuns?


obrigado

Jonathas

Mensagens : 2
Data de inscrição : 13/05/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Multiplicação das portas utilizadas como saida no PIC

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum