Multiplicação das portas utilizadas como saida no PIC
3 participantes
Página 1 de 1
Multiplicação das portas utilizadas como saida no PIC
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?
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 : 51
Localização : Belo Horizonte
Re: Multiplicação das portas utilizadas como saida no PIC
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
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
Bibliotecas
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
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
Tópicos semelhantes
» RESULTADO DE UM MULTIPLICACAO E TAMANHO DO NUMERO
» PWM e saída em rampa
» Kit multi pic
» como controlar o duty cycle do PWM
» Como configuro USART no pic18f4550?
» PWM e saída em rampa
» Kit multi pic
» como controlar o duty cycle do PWM
» Como configuro USART no pic18f4550?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos