DTForuM


:brindis:    BIENVENIDO AL NUEVO DTForuM -- YA FUNCIONA EL BOTÓN ARCHIVOS -- -- Si tienes alguna duda sobre el uso de este nuevo formato, puedes publicar tu mensaje en MENSAJES PARA EL STAFF ... .... D T F o r u M .... El de siempre, pero mejor !! 
..:: DTForuM.INFO ::.. Manuales de Servicio y toda la Información técnica - Uniendo a los amantes de la electrónica de todo el mundo. From here, to the world !!! 
..:: DTForuM.INFO ::.. Antes de pedir información, búsquela presionando el botón BUSCAR.

..:: DTForuM.INFO ::.. Punto de reunión de amantes de la electrónica.
DESTACADOS, la zona con lo mejor de DTForuM.INFO  ( Hacé click ) ..:: DTForuM.INFO ::.. ..:: 2005- 2006- 2007- 2008- 2009-2010- 2011- 2012- 2013- 2014- 2015- 2016- 2017-2018 ::..
..:: DTForuM.INFO ::.. Uniendo Técnicos desde hace más de 13 años !! ...::DTForuM.INFO::... ...:::La mayor Comunidad de intercambio de Información Técnica:::... El de siempre, pero mejor !!

Premium Membership

Si abona su suscripción

con PAYPAL

solo costará

U$D 18 POR AÑO

Pague con Paypal o con Tarjeta de Crédito de forma SEGURA!

Nota: Si Ud. anula, elimina o desactiva la suscripción, perderá su calidad de Miembro Premium.

¿Qué es PayPal?

SUSCRÍBASE YA !

Otras formas de pago:

Donar + PREMIUM

Conviertase en MIEMBRO PREMIUM y acceda a más de 5 TeraBytes de información, de forma ilimitada.


No cobramos los archivos ni el material que los usuarios suben, solo les pedimos que cada uno pague por el ancho de banda que consume, ya que cada vez es más costoso el bandwidth y no podemos pagar lo que los usuarios descargan sin ningún tipo de control.

Bienvenido(a), Visitante. Por favor, ingresa o regístrate. ¿Perdiste tu email de activación?
noviembre 21, 2018, 07:53:43 am

Ingresar con nombre de usuario, contraseña y duración de la sesión

AllDataSheets

Buscar Datasheet
Buscar en AllDatasheet.com

CuentaDigital

Web Amiga

Clase 13 Curso PIC C18

Visitante · 16 · 16078

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado wilrey

  • Miembro PREMIUM
  • GOLD MEMBER
  • *
    • Mensajes: 912
    • DT$ 537
Respuesta #16 on: enero 22, 2010, 20:13:20 pm
Boticario-TUX.. abrazoo
Saludos desde colombia..
Tengo una pregunta, a ver si no me salgo del tema.

Realice este codigo..de un ejemplo del mismo c ccs.
Aqui interrogo, sobre el bufer usb..y funciona bien
este es el trozo de codigo que no se como modificar,,modo hid

 if(usb_cdc_kbhit()){ // En espera de nuevos caracteres en el buffer de recepción.
          if(usb_cdc_getc()=='r'){ //si es este caracter
            printf(usb_cdc_putc,"javier.\n\r");  //imprimo esto en la terminal..

no logro acomodarlo, para que en vez de que saque el mensaje si se oprime la tecla"r"
me trabaje en modo eco..lo que digito aparezca en la terminal..
Me puedes ayudar? :please: :please:
 graciassss graciassss


hector27

  • Visitante
Respuesta #15 on: octubre 04, 2009, 12:25:48 pm
En la interrupcion ahora tambien incremento en cada una la variable CuentaTick2, y cuando llega a 759 es porque conte durante un segundo, y alli entonces leemos el timer1 y cargamos el contenido del timer1 en la variable TMR1_conteo.
Tambien chequeamos si la interrupcion se debe al timer1 y en ese cado incrementamos of_conteo, para poder contar mas de 16 bits, que es el maximo del timer.



//----------------------------------------------------------------------------
// High priority interrupt routine

#pragma code
#pragma interrupt InterruptHandlerHigh

void
InterruptHandlerHigh ()
{
  if (INTCONbits.TMR0IF)
    {                                   //check for TMR0 overflow
           //clear interrupt flag
   //el timer 0 genera pulsos de 500 Hz
   WriteTimer0 (0xFD8F);
   ContaTick++;
   ContaTick2++;
      if(ContaTick==1){
      DIGITO_1=0;
      DIGITO_2=0;
      DIGITO_3=0;
      DIGITO_4=0;
      DIGITO_5=0;
      }

      if(ContaTick==2){
        ContaTick=0;
        Flags.Bit.Timeout = 1;            //indicate timeout
      digito++;
      if(digito==5) digito=0;
          switch(digito)
          {
             case 0:
         DIGITO_1=1;
         PongoNumero (mybuff2[0]);
            break;
           case 1:
         DIGITO_2=1;
         PongoNumero (mybuff2[1]);
            break;
           case 2:
         DIGITO_3=1;
         PongoNumero (mybuff2[2]);
            break;
           case 3:
         DIGITO_4=1;
         PongoNumero (mybuff2[3]);
            break;
           case 4:
         DIGITO_5=1;
         PongoNumero (mybuff2[4]);
            break;
           default:
            break;
            }     
      }
      if(ContaTick2==759){
        ContaTick2=0;
      TMR1_conteo=ReadTimer1();
        Flags.Bit.Timeout1 = 1;            //indicate timeout
      WriteTimer1 (0x0000);
      }

      INTCONbits.TMR0IF = 0;
    }
  if (PIR1bits.TMR1IF)
    {                                   //check for TMR1 overflow
of_conteo++;
PIR1bits.TMR1IF=0;
   }
}


hector27

  • Visitante
Respuesta #14 on: octubre 03, 2009, 16:13:13 pm
//Y si el interruptor esta abierto muestro los pulsos contados en el timer 1 cada segundo (frecuencimetro):

//aqui es frecuencimetro
if(FUNCION==1)
{
if(Flags.Bit.Timeout1 == 1){
Flags.Bit.Timeout1 = 0;
conteo=(unsigned long)TMR1_conteo +65536*(unsigned long)of_conteo;
of_conteo=0;
ltoa(conteo,mybuff);
   if(conteo<=99999)FlagEscala=0;
   if(conteo<=9999)FlagEscala=1;
   if(conteo<=999)FlagEscala=2;
   if(conteo<=99)FlagEscala=3;
   if(conteo<=9)FlagEscala=4;
   
      switch(FlagEscala)
      {
      case 0:
      mybuff2[0]=mybuff[0];
      mybuff2[1]=mybuff[1];
      mybuff2[2]=mybuff[2];
      mybuff2[3]=mybuff[3];
      mybuff2[4]=mybuff[4];
      break;
      case 1:
      mybuff2[1]=mybuff[0];
      mybuff2[2]=mybuff[1];
      mybuff2[3]=mybuff[2];
      mybuff2[4]=mybuff[3];
      mybuff2[0]=' ';
      break;
      case 2:
      mybuff2[2]=mybuff[0];
      mybuff2[3]=mybuff[1];
      mybuff2[4]=mybuff[2];
      mybuff2[1]=' ';
      mybuff2[0]=' ';
      break;
      case 3:
      mybuff2[3]=mybuff[0];
      mybuff2[4]=mybuff[1];
      mybuff2[2]=' ';
      mybuff2[1]=' ';
      mybuff2[0]=' ';
      break;
      case 4:
      mybuff2[4]=mybuff[0];
      mybuff2[1]=' ';
      mybuff2[2]=' ';
      mybuff2[3]=' ';
      mybuff2[0]=' ';
      break;
      default:
      break;
      }     
}
}


hector27

  • Visitante
Respuesta #13 on: octubre 02, 2009, 18:33:42 pm
//En la funcion main chequeo si esta cerrado el interruptor FUNCION, si está cerrado mido con el ADC exactamente
// de la misma manera que en el TP anterior:

//me fijo si uso voltimetro o frecuencimetro
   if(FUNCION==0)
   {
   //aqui es voltimetro
   
   indice=0;
   sumatoria=0;
         while(indice<699)
         {
         //aqui leemos el ADC
         
         ConvertADC(); // Start conversion
         indice++;
         while( BusyADC() ); // Wait for completion
         tension= ReadADC();
         sumatoria = sumatoria + (unsigned long)tension;
         }
   sumatoria = sumatoria/143;
   tension=(unsigned int)sumatoria;
   
   itoa(tension,mybuff);
   
   
   mybuff2[0]=' ';
   
   if(tension<=9999)FlagEscala=1;
   if(tension<=999)FlagEscala=2;
   if(tension<=99)FlagEscala=3;
   if(tension<=9)FlagEscala=4;
   
      switch(FlagEscala)
      {
      case 1:
      mybuff2[1]=mybuff[0];
      mybuff2[2]=mybuff[1];
      mybuff2[3]=mybuff[2];
      mybuff2[4]=mybuff[3];
      break;
      case 2:
      mybuff2[2]=mybuff[0];
      mybuff2[3]=mybuff[1];
      mybuff2[4]=mybuff[2];
      mybuff2[1]=' ';
      break;
      case 3:
      mybuff2[3]=mybuff[0];
      mybuff2[4]=mybuff[1];
      mybuff2[2]=' ';
      mybuff2[1]=' ';
      break;
      case 4:
      mybuff2[4]=mybuff[0];
      mybuff2[1]=' ';
      mybuff2[2]=' ';
      mybuff2[3]=' ';
      break;
      default:
      break;
      }     
   }


hector27

  • Visitante
Respuesta #12 on: octubre 01, 2009, 07:52:56 am
En el TP44 tenemos un proyecto muy similar al TP43; agregamos un interruptor referido a masa al terminal 2 de JP2 (señal FUNCION) y un conector para entrada de pulsos en el terminal 1 de JP2. En una posicion del interruptor tendremos el mismo voltimetro del TP43 y en la otra posicion un frecuencimetro.


hector27

  • Visitante
Respuesta #11 on: octubre 01, 2009, 07:44:58 am
//finalmente tenemos la funcion PongoNumero, que no hace otra cosa que encender los segmentos del display de LEDs,
// correspondientes al numero que le ingresamos en ASCII; utilizando un condicional switch - case

void PongoNumero (unsigned char numero)
{
switch(numero)
{
case '0':
//pongo un 0
SEGMENTO_a=0;
SEGMENTO_b=0;
SEGMENTO_c=0;
SEGMENTO_d=0;
SEGMENTO_e=0;
SEGMENTO_f=0;
SEGMENTO_g=1;
SEGMENTO_dp=1;
break;
case '1':
//pongo un 1
SEGMENTO_a=1;
SEGMENTO_b=0;
SEGMENTO_c=0;
SEGMENTO_d=1;
SEGMENTO_e=1;
SEGMENTO_f=1;
SEGMENTO_g=1;
SEGMENTO_dp=1;
break;
case '2':
//pongo un 2
SEGMENTO_a=0;
SEGMENTO_b=0;
SEGMENTO_c=1;
SEGMENTO_d=0;
SEGMENTO_e=0;
SEGMENTO_f=1;
SEGMENTO_g=0;
SEGMENTO_dp=1;
break;
case '3':
//pongo un 3
SEGMENTO_a=0;
SEGMENTO_b=0;
SEGMENTO_c=0;
SEGMENTO_d=0;
SEGMENTO_e=1;
SEGMENTO_f=1;
SEGMENTO_g=0;
SEGMENTO_dp=1;
break;
case '4':
//pongo un 4
SEGMENTO_a=1;
SEGMENTO_b=0;
SEGMENTO_c=0;
SEGMENTO_d=1;
SEGMENTO_e=1;
SEGMENTO_f=0;
SEGMENTO_g=0;
SEGMENTO_dp=1;
break;
case '5':
//pongo un 5
SEGMENTO_a=0;
SEGMENTO_b=1;
SEGMENTO_c=0;
SEGMENTO_d=0;
SEGMENTO_e=1;
SEGMENTO_f=0;
SEGMENTO_g=0;
SEGMENTO_dp=1;
break;
case '6':
//pongo un 6
SEGMENTO_a=0;
SEGMENTO_b=1;
SEGMENTO_c=0;
SEGMENTO_d=0;
SEGMENTO_e=0;
SEGMENTO_f=0;
SEGMENTO_g=0;
SEGMENTO_dp=1;
break;
case '7':
//pongo un 7
SEGMENTO_a=0;
SEGMENTO_b=0;
SEGMENTO_c=0;
SEGMENTO_d=1;
SEGMENTO_e=1;
SEGMENTO_f=1;
SEGMENTO_g=1;
SEGMENTO_dp=1;
break;
case '8':
//pongo un 8
SEGMENTO_a=0;
SEGMENTO_b=0;
SEGMENTO_c=0;
SEGMENTO_d=0;
SEGMENTO_e=0;
SEGMENTO_f=0;
SEGMENTO_g=0;
SEGMENTO_dp=1;
break;
case '9':
//pongo un 9
SEGMENTO_a=0;
SEGMENTO_b=0;
SEGMENTO_c=0;
SEGMENTO_d=0;
SEGMENTO_e=1;
SEGMENTO_f=0;
SEGMENTO_g=0;
SEGMENTO_dp=1;
break;
case ' ':
//pongo un blanco
SEGMENTO_a=1;
SEGMENTO_b=1;
SEGMENTO_c=1;
SEGMENTO_d=1;
SEGMENTO_e=1;
SEGMENTO_f=1;
SEGMENTO_g=1;
SEGMENTO_dp=1;
break;
default:
break;
}
return;
}


hector27

  • Visitante
Respuesta #10 on: septiembre 30, 2009, 18:51:45 pm
//La interrupcion de baja prioridad no la hemos usada, por lo tanto dejamos esa funcion vacia (no hace nada).


//----------------------------------------------------------------------------
// Low priority interrupt routine

#pragma code
#pragma interrupt InterruptHandlerLow

void
InterruptHandlerLow ()
{
//
}


hector27

  • Visitante
Respuesta #9 on: septiembre 30, 2009, 07:59:52 am
//Respecto a la interrupcion de alta prioridad (puesta para el timer 0) lo que hacemos es contar interrupciones en la variable  ContaTick.
//Cuando Contatick vale 5 apago todos los digitos, y cuando vale 6 cargo el valor del digito en cuestion (se va alternando del digito 1 al 5,
// segun el contenido de la variable digito), ademas reseteo la variable Contatick para comenzar un nuevo ciclo.
//para cargar el valor del digito llamo a la funcion PongoNumero.
//Los digitos se apagan un poco antes (cuando Contatick vale 5) que cuando cargo el digito (Contatick=6), esto es para que a la vista los
//segmentos que deben estar apagados esten apagados, sino se observa un leve brillo en segmentos que no deben brillar.
//Si disminuimos ese valor (Contatick==5) bajaremos el brillo del display, si lo ponemos a su maximo valor(Contatick==6 el brillo sera maximo.


//----------------------------------------------------------------------------
// High priority interrupt routine

#pragma code
#pragma interrupt InterruptHandlerHigh

void
InterruptHandlerHigh ()
{
  if (INTCONbits.TMR0IF)
    {                                   //check for TMR0 overflow
           //clear interrupt flag
   //el timer 0 genera pulsos de 500 Hz
   WriteTimer0 (0xFFD0);
   ContaTick++;
if(ContaTick==5){
DIGITO_1=0;
DIGITO_2=0;
DIGITO_3=0;
DIGITO_4=0;
DIGITO_5=0;
}

      if(ContaTick==6){
        ContaTick=0;
        Flags.Bit.Timeout = 1;            //indicate timeout
      digito++;
      if(digito==5) digito=0;
          switch(digito)
          {
             case 0:
         DIGITO_1=1;
         PongoNumero (mybuff2[0]);
            break;
           case 1:
         DIGITO_2=1;
         PongoNumero (mybuff2[1]);
            break;
           case 2:
         DIGITO_3=1;
         PongoNumero (mybuff2[2]);
            break;
           case 3:
         DIGITO_4=1;
         PongoNumero (mybuff2[3]);
            break;
           case 4:
         DIGITO_5=1;
         PongoNumero (mybuff2[4]);
            break;
           default:
            break;
            }     
      }
      INTCONbits.TMR0IF = 0;
    }
}


hector27

  • Visitante
Respuesta #8 on: septiembre 29, 2009, 08:00:27 am
//respecto a las interrupciones, tal como lo hemos hecho en otras oportunidades
//realizamos saltos (goto) a las rutinas de manejo para ambas interrupciones respectivamente (alta y baja prioridad)
#pragma code InterruptVectorLow = 0x18
void
InterruptVectorLow (void)
{
  _asm
    goto InterruptHandlerLow //jump to interrupt routine (prioridad baja)
  _endasm
}


#pragma code InterruptVectorHigh = 0x08
void
InterruptVectorHigh (void)
{
  _asm
    goto InterruptHandlerHigh //jump to interrupt routine
  _endasm
}


hector27

  • Visitante
Respuesta #7 on: septiembre 28, 2009, 20:23:43 pm
//luego dentro de la funcion main tenemos el loop de trabajo

while(1)
{
//iniciamos la variable indice, que es usada para contar el numero de mediciones que hacemos con el ADC
indice=0;

//iniciamos la variable sumatoria, donde sumamos 699 mediciones y las promediamos
sumatoria=0;

//loop hasta realizar 699 mediciones
while(indice<699)
{
//aqui leemos el ADC

ConvertADC(); // comenzamos la medicion conversion
indice++; //incrementamos el indice que cuenta el numero de mediciones
while( BusyADC() ); // esperamos que termine la conversion del ADC
//una vez terminada la conversion del ADC leemos el resultado
tension= ReadADC();
//sumamos la medicion a la sumatoria
sumatoria = sumatoria + (unsigned long)tension;
}
//aqui ya hice las 699 mediciones y sali del loop de repeticion de mediciones
//divido la sumatoria por 143 para leer 5000 cuando leo 5 voltios
sumatoria = sumatoria/143;

//cargo la variable tension con el valor obtenido y pasado a entero
tension=(unsigned int)sumatoria;

//convierto la variable tension a ASCII y cargo el resultado el el array mybuff[]
itoa(tension,mybuff);

//aqui cargo el resultado en el array mybuff2[], de tal manera que quede justificado a la derecha
// (itoa justifica a la izquierda), entonces segun la escala, cargo el array de diferente manera.
//el array mybuff2[] será utilizado en la interrupcion para escribir el resultado en el display

mybuff2[0]=' ';
if(tension<=9999)FlagEscala=1;
if(tension<=999)FlagEscala=2;
if(tension<=99)FlagEscala=3;
if(tension<=9)FlagEscala=4;

switch(FlagEscala)
{
case 1:
mybuff2[1]=mybuff[0];
mybuff2[2]=mybuff[1];
mybuff2[3]=mybuff[2];
mybuff2[4]=mybuff[3];
break;
case 2:
mybuff2[2]=mybuff[0];
mybuff2[3]=mybuff[1];
mybuff2[4]=mybuff[2];
mybuff2[1]=' ';
break;
case 3:
mybuff2[3]=mybuff[0];
mybuff2[4]=mybuff[1];
mybuff2[2]=' ';
mybuff2[1]=' ';
break;
case 4:
mybuff2[4]=mybuff[0];
mybuff2[1]=' ';
mybuff2[2]=' ';
mybuff2[3]=' ';
break;
default:
break;
}     

}
return;
}//aqui termina la funcion main


hector27

  • Visitante
Respuesta #6 on: septiembre 28, 2009, 08:27:33 am
//inicializo poniendo a 0 todos los digitos
DIGITO_1=0;
DIGITO_2=0;
DIGITO_3=0;
DIGITO_4=0;
DIGITO_5=0;

//configuro la interrupcion del timer 0 a alta prioridad
INTCON2bits.TMR0IP=1;

//no habilito interrupciones de baja prioridad
INTCONbits.GIEL=0;

//habilito todas las interrupciones de alta prioridad
INTCONbits.GIEH=1;

//habilito la interrupcion por desbordamiento del timer 0
INTCONbits.TMR0IE=1;

//configuro el adc para que use la referencia interna (5V), sin el uso interrupcion, con un clock del oscilador del sistema/2, y justificado a la derecha.
OpenADC( ADC_FOSC_2 &ADC_RIGHT_JUST &ADC_2_TAD,ADC_CH0 &ADC_VREFPLUS_VDD &ADC_VREFMINUS_VSS &ADC_INT_OFF, 0b01111110);

//habilito el canal 0 de lectura del ADC
SetChanADC( ADC_CH0 );


hector27

  • Visitante
Respuesta #5 on: septiembre 27, 2009, 12:56:52 pm
//luego tenemos la funcion principal, donde comenzamos definiendo la frecuencia del oscilador interno pra 8MHz

void main(void){
//oscilador interno
//OSCCON=0b01110000; //8Mhz
OSCCONbits.IRCF2=1;
OSCCONbits.IRCF1=1;
OSCCONbits.IRCF0=1;


//configuramos e inicializamos  los puertos A y B, como salidas, excepro bit 0 del puerto A que será entrada analogica (para la entrada del ADC)
PORTA=0;
PORTB=0;
TRISB = 0b00000000;
TRISA = 0b00000001;
PORTA=0;
PORTB=0;

//Configuramos las interrupciones y el timer 0.
//el timer 0 se utiliza para generar una interrupcion periodica que usaremos para multiplexar los digitos, es decir,
// durante un tiempo estará encendido el digito 1, luego se apaga el 1 y se enciende el 2 y asi sucesivamente
// hasta el digito 5 y luego comenzamos nuevamente con el digito 1.
//la frecuencia de "barrido" de los digitos debe ser suficientemente alta, como para no notar el parpadeo,
//pero no tan alta que haga que el micro no pueda hacer otra cosa.
//cuando inicializamos el timer 0 hacemos que cuente los pulsos de reloj internos, con un contador de 16 bits,
//pasados por un preescaler que divide por 256,
//es decir contará pulsos a un frecuencia de: (8MHz/4)/256=>  7812.5Hz.
//Al timer lo cargamos con el numero 0xFFD0, y repetiremos esa escritura al timer 0 en cada interrupcion del timer 0
//por lo tanto la interrupcion ocurrirá cuando desborde, es decir cuando el contador pase de 0xFFD0 a =0x10000;
//por lo tanto los pulsos contados son: 0x10000 - 0xFFD0 = 0x30 => 48 en decimal. Por lo tanto las interrupciones
//se generaran con una frecuencia de 7812.5 / 48 = 162.8


//El modo de interrupcion que utilizaremos es con vector (modo de la serie 18F y no el de la serie 16F)
//Tambien configuramos el ADC para que la entrada habilitada sea la del puerto A bit 0.


//timer0 habilitado
T0CON=0b10000111;
//interrupciones deshabilitadas (luego las habilitamos cuando esta todo configurado)
INTCON=   0b00000000;
//modo de interrupcion PIC18F
RCONbits.IPEN=1;
ADCON1=0b01111110;
//inicializo el timer0
OpenTimer0(T0_16BIT||T0_SOURCE_INT||T0_EDGE_RISE||T0_PS_1_256||TIMER_INT_ON);
WriteTimer0(0xFFD0);


hector27

  • Visitante
Respuesta #4 on: septiembre 27, 2009, 10:57:25 am
//declaro un flag para indicar que ocurrió una interrupcion, de la misma manera que ya lo hemos
// hecho en otros TP donde usamos interrupciones:

union
{
  struct
  {
    unsigned Timeout:1;         //flag to indicate a TMR0 timeout
  } Bit;
  unsigned char Byte;
} Flags

//Luego declaramos funciones y variables:
void main (void);
void InterruptHandlerHigh (void);
void InterruptHandlerLow (void);
void PongoNumero (unsigned char numero);
unsigned char ContaTick=0;
unsigned char digito=0;
unsigned long sumatoria=0;
unsigned int tension=0;
unsigned int indice=0;
char mybuff2[6]="     ";
char mybuff[6]="     ";
char FlagEscala;


hector27

  • Visitante
Respuesta #3 on: septiembre 26, 2009, 20:08:35 pm
//incluimos las bibliotecas necesarias:
#include <stdio.h>
#include <stdlib.h>
#include "delays.h"
#include "timers.h"
#include "adc.h"


//Definimos los puertos utilizados para cada segmento y para cada digito.
//Obviamente se debe hacer segun nuestro circuito, y si desean hacer esto
// con otro micro o circuito deberan modificarlo según el hardware
#define SEGMENTO_a      PORTBbits.RB2
#define SEGMENTO_b      PORTAbits.RA4
#define SEGMENTO_c      PORTAbits.RA2
#define SEGMENTO_d      PORTBbits.RB1
#define SEGMENTO_e      PORTBbits.RB0
#define SEGMENTO_f      PORTBbits.RB3
#define SEGMENTO_g      PORTAbits.RA1
#define SEGMENTO_dp      PORTAbits.RA3

#define DIGITO_1      PORTAbits.RA6
#define DIGITO_2      PORTAbits.RA7
#define DIGITO_3      PORTBbits.RB7
#define DIGITO_4      PORTBbits.RB4
#define DIGITO_5      PORTBbits.RB5


hector27

  • Visitante
Respuesta #2 on: septiembre 26, 2009, 16:14:37 pm
Los bit de configuracion de este PIC son algo diferente de lo que vimos con el 18F2550, sobre todo en referencia al oscilador, que detallo:

#pragma config FSCM = OFF

//aqui defino el uso del reloj interno, y que los terminales del cristal son utilizados como puertos y no como oscilador.
#pragma config OSC = INTIO2

#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOR = ON
#pragma config BORV = 45
#pragma config WDT = OFF
#pragma config WDTPS = 32768
#pragma config MCLRE = OFF
#pragma config LVP = OFF
#pragma config STVR = OFF
#pragma config DEBUG = OFF
#pragma config CP0 = OFF
#pragma config CP1 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRTB = OFF
#pragma config WRTC = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTRB = OFF


Tags: