Autor Tema: problema con el portb.4 del 18f4550  (Leído 2480 veces)

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

Desconectado luen30

  • PIC10
  • *
  • Mensajes: 1
problema con el portb.4 del 18f4550
« en: 01 de Noviembre de 2018, 20:09:13 »
hola a todos alguien me podria ayudar con este programa que no me esta funcionando lo quiero hacer funcionar en un 18f4550 lo raro es que en un 16f877 si me funciona espero me puedan ayudar gracias.   




#include <18F4550.h>
#device adc=10
#fuses NOMCLR INTRC_IO, NOWDT, NOPROTECT, NOLVP, NOCPD, NOBROWNOUT, NOPUT, NODEBUG, HS, PBADEN   
//#FUSES WDT
#use delay(clock=8000000)

//* VARIABLES *
//*****************
#BYTE TRISA = 0xF92  // Dirección de los TRIS A, B, C, D y E.
#BYTE TRISB = 0xF93
#BYTE TRISC = 0xF94
#BYTE TRISD = 0xF95
#BYTE TRISE = 0xF96
#BYTE INTCON = 0xFF2 // Dirección del registro de interrupciones.

#Byte PortA = 0xF80            // Dirección del puerto A para la familia 18Fxx5x.
#Byte PortB = 0xF81            // Dirección del puerto B para la familia 18Fxx5x.
#Byte PortC = 0xF82            // Dirección del puerto C para la familia 18Fxx5x.
#Byte PortD = 0xF83            // Dirección del puerto D para la familia 18Fxx5x (Sólo 40/44 pines).
#Byte PortE = 0xF84            // Dirección del puerto E para la familia 18Fxx5x.



#define  enter     PIN_b5
#define  up        PIN_b6
#define  down      PIN_b7
#define  esc       PIN_b4




#include <stdio.h>
#include <string.h>   // for strcmp()
#include <math.h>   


#include <lcd20x4.c>
//Variables generales a utilizar
int16 value,variable,fwdmax,A,fwdd,NBASE,f3,nval,duty1,variable2,variable3,variable4,variable1;
UNSIGNED int8 conta,i,j,tempmax,swrmax,flag,flag2,jj,k,h,x;
 int8 tempmax1;
 
 unsigned int8 ntemp,setup,num; 

int1 alarm1_status, alarm2_status,bandera;

int8   second, minute, hour, day, date, month, year,
      alarm1_minute, alarm1_hour, alarm2_minute, alarm2_hour,
      status_reg,B1;
 //int8  porcentaje1,porcentaje2;
 float fecf2,porcentaje1,porcentaje2,T1,T2;
 
int16 ii,l;

long read_int16_eeprom(int8 address);
void write_int16_eeprom(int address,int16 val);
void  alarm();
void  beep();
void setfwd();
void setswr();
void settemp();
void beep2();
void beep3();
void bloqueo();
VOID RUM_FUNC(INT);
VOID setALARM();
int password();
VOID settemp1();






void main(){
   setup_oscillator(OSC_8MHZ);
port_b_pullups(true);
 //setup_adc(ADC_CLOCK_INTERNAL);            //
 // setup_wdt(WDT_ON|WDT_2S);
   setup_adc(ADC_CLOCK_DIV_8);
setup_adc_ports(AN0_TO_AN7);             // Configure RA0 (AN0) as analog
 
   Set_Tris_A(0b101111);      // Puerto A todo entradas, en este caso no usamos el Puerto A.
   Set_Tris_B(0b11110111);      // Puerto B todo entradas, sólo usamos las entradas RB0 y RB1.
   Set_Tris_C(0b00000000);      // Puerto C todo entradas, en este caso no usamos el Puerto C.
   Set_Tris_D(0b00000000);      // Puerto D todo salidas  (8 bits que irán a los LEDs).
   Set_Tris_E(0b1111);      // Puerto E todo entradas, en este caso no usamos el Puerto E.
                     // Enable global interrupts
    //Configuracion del conversor AD (RA0-->Analogico)
   setup_adc_ports(ALL_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
// configuracion timer0
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);

//enable_interrupts(GLOBAL);// Initialize LCD module
  // enable_interrupts(INT_RTCC);
  // EXT_INT_EDGE(l_TO_h);  //----- Cambio de estado de alto a bajo
 // enable_interrupts(INT_RB);
    lcd_init();
 
 
   
 
    char num[10]={'0','1','2','3','4','5','6','7','8','9'};//tabla de variables definidas
   char clave[5]={0};
   char ctrsna[5]={'4','3','2','1',0};//codigo+1

INT jj;
      i=0;
      j=1; 
      lcd_gotoxy(1,2);
   printf(lcd_putc,"              ");
    lcd_gotoxy(1,3);
   printf(lcd_putc,"              ");
retorno:
 FOR (Jj = 16; Jj >= 1; --jJ)
   {
      lcd_gotoxy (Jj, 1);
         printf (LCD_PUTC, "INTRODUZCA CLAVE    ");
      delay_ms (30);
   }
lcd_gotoxy(1,2);
   printf(lcd_putc,"0000               ");
write_clave:
    delay_ms(200);
    lcd_gotoxy(j,2);//Segunda linea "Escritura de clave"
    clave[j-1]=num;
    lcd_putc(num);

    //if(bit_test(IND,0)==1) {bit_clear(IND,0);goto inicio;}
    if(bit_test(PORTB,7)==0)
     {
      while(!input(PIN_B7));
      i=i+1;
      if(i==10) {i=0;}
     }
    if(bit_test(PORTB,6)==0)
     {
 
      while(!input(PIN_B6));
      i=i-1;
      if(i==255) {i=9;}
     }
    if(bit_test(PORTB,4)==0)
     {
      //while(!input(PIN_B4));
      lcd_gotoxy(j,2);
      lcd_putc('0');
      if(j==1) {goto write_clave;}
      i=0;
      j=j-1;
     }
    if(bit_test(PORTB,5)==0)
     {
      while(!input(PIN_B5));
      i=0;
      j=j+1;
      if(j==5) {goto comprueba;}//numero de clave mas 1
      lcd_gotoxy(j,2);
      lcd_putc(' ');
     
     }
     
   goto  write_clave;
   comprueba:
     if(strncmp(clave,ctrsna,4)==0)//numero de clave
     {
     
   
   printf(lcd_putc,"\f   clave correcta");
   delay_ms(2000);
   
 
}
}

     
 
     
   



Desconectado Ce.O

  • PIC10
  • *
  • Mensajes: 13
Re:problema con el portb.4 del 18f4550
« Respuesta #1 en: 02 de Noviembre de 2018, 12:32:03 »
Muchas veces el problemas de los fusibles. Supongo que usas el oscilador interno.

#fuses INTRC_IO//se usará cristal interno
#use delay(internal=8MHz)

setup_oscillator(OSC_8MHZ|OSC_INTRC);//este en el main

Prueba poniendo esos. Saludos

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 577
Re:problema con el portb.4 del 18f4550
« Respuesta #2 en: 02 de Noviembre de 2018, 14:06:11 »
Hola, cuál es el problema? Compila sin errores para el nuevo PIC?


 

anything