Bits de Configuración en PIC18F4550 para PICBasic Pro

Estoy programando un pic 18f4550 en Picbasic Pro....

uso MPASM 5.20, Microcodestudio 3.0.0, PBP2.46
antes usaba el winpic800 y ahora uso el master-prog+

bueno cuando usaba el winpic800 para configurar el pic me bastaba ir a la pestaña de configuracion...

Dibujo1.JPG

pero ahora que uso el master-prog+, me doy cuenta que no cuenta con esa caracteristica sino que hay que configurar el pic desde software, enviando solo un aviso de que faltan los bits de configuracion...

Dibujo2.JPG

por lo que me surge la necesidad de hacerlo desde el Microstudio.... pero al compilarlo me tira una advertencia de que no se grabaron los bits de configuracion y que use la directiva config la cual no tengo idea de que sea...

Dibujo.JPG


el inc del 18f4550 es este...
Dibujo3.JPG

Yo comente las lineas de configuracion....
Dibujo4.JPG

y las agrege al microstudio...
Dibujo5.JPG

pero al compilarlo me sigue tirando las mismas advertencias...


¿alguien sabe como usar esa directiva en MPASM?
 
Última edición:
Ya lo solucione ....

si es como lo estaba yo haciendo...

se puede poner el comando
ASM
ENDASM

o

el @ arroba...

asi quedo mi codigo para configurar por software los fuses...
los primeros cuatro se tienen que eliminar del archivo 18f4550.inc para poder ponerlos en el codigo
Código:
@ __CONFIG _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
@ __CONFIG _CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEN_ON_1H & _IESO_ON_1H
@ __CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H 
@ __CONFIG _CONFIG3H, _PBADEN_OFF_3H & _MCLRE_ON_3H & _CCP2MX_ON_3H & _LPT1OSC_ON_3H
@ __CONFIG _CONFIG4L, _LVP_OFF_4L & _ICPRT_OFF_4L & _XINST_OFF_4L & _STVREN_OFF_4L & _DEBUG_OFF_4L
@ __Config _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L
@ __Config _CONFIG5H, _CPD_OFF_5H & _CPB_OFF_5H
@ __Config _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
@ __Config _CONFIG6H, _WRTB_OFF_6H & _WRTC_OFF_6H & _WRTD_OFF_6H
@ __Config _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
@ __Config _CONFIG7H, _EBTRB_OFF_7H 

DEFINE OSC 12
ADCON1=$0F
CmCon=$07

USBBuffer        Var Byte[8] 
USBBufferCount   Var Byte 
TrisA=$7F
TrisB=$00
TrisC=$C7
TrisD=$FF
TrisE=$07
usbinit

ProgramStart: 
 gosub DoUSBIn
 gosub DoUSBOut
 PORTB = USBBuffer[7]
goto ProgramStart  

DoUSBIn:
 USBBufferCount = 8
 USBService                                
 USBIn 1, USBBuffer, USBBufferCount, DoUSBIn
return

DoUSBOut:
 USBBufferCount = 8
 USBService        
 USBOut 1, USBBuffer, USBBufferCount, DoUSBOut 
return
   
   
;==========================================================================
;
;   IMPORTANT: For the PIC18 devices, the __CONFIG directive has been
;              superseded by the CONFIG directive.  The following settings
;              are available for this device.
;
;   PLL Prescaler Selection bits:
;     PLLDIV = 1           No prescale (4 MHz oscillator input drives PLL directly)
;     PLLDIV = 2           Divide by 2 (8 MHz oscillator input)
;     PLLDIV = 3           Divide by 3 (12 MHz oscillator input)
;     PLLDIV = 4           Divide by 4 (16 MHz oscillator input)
;     PLLDIV = 5           Divide by 5 (20 MHz oscillator input)
;     PLLDIV = 6           Divide by 6 (24 MHz oscillator input)
;     PLLDIV = 10          Divide by 10 (40 MHz oscillator input)
;     PLLDIV = 12          Divide by 12 (48 MHz oscillator input)
;
;   CPU System Clock Postscaler:
;     CPUDIV = OSC1_PLL2   [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]
;     CPUDIV = OSC2_PLL3   [OSC1/OSC2 Src: /2][96 MHz PLL Src: /3]
;     CPUDIV = OSC3_PLL4   [OSC1/OSC2 Src: /3][96 MHz PLL Src: /4]
;     CPUDIV = OSC4_PLL6   [OSC1/OSC2 Src: /4][96 MHz PLL Src: /6]
;
;   USB Clock Selection bit (used in Full Speed USB mode only; UCFG:FSEN = 1):
;     USBDIV = 1           USB clock source comes directly from the primary oscillator block with no postscale
;     USBDIV = 2           USB clock source comes from the 96 MHz PLL divided by 2
;
;   Oscillator Selection bits:
;     FOSC = XT_XT         XT oscillator, XT used by USB
;     FOSC = XTPLL_XT      XT oscillator, PLL enabled, XT used by USB
;     FOSC = ECIO_EC       External clock, port function on RA6, EC used by USB
;     FOSC = EC_EC         External clock, CLKOUT on RA6, EC used by USB
;     FOSC = ECPLLIO_EC    External clock, PLL enabled, port function on RA6, EC used by USB
;     FOSC = ECPLL_EC      External clock, PLL enabled, CLKOUT on RA6, EC used by USB
;     FOSC = INTOSCIO_EC   Internal oscillator, port function on RA6, EC used by USB
;     FOSC = INTOSC_EC     Internal oscillator, CLKOUT on RA6, EC used by USB
;     FOSC = INTOSC_XT     Internal oscillator, XT used by USB
;     FOSC = INTOSC_HS     Internal oscillator, HS used by USB
;     FOSC = HS            HS oscillator, HS used by USB
;     FOSC = HSPLL_HS      HS oscillator, PLL enabled, HS used by USB
;
;   Fail-Safe Clock Monitor Enable bit:
;     FCMEN = OFF          Fail-Safe Clock Monitor disabled
;     FCMEN = ON           Fail-Safe Clock Monitor enabled
;
;   Internal/External Oscillator Switchover bit:
;     IESO = OFF           Oscillator Switchover mode disabled
;     IESO = ON            Oscillator Switchover mode enabled
;
;   Power-up Timer Enable bit:
;     PWRT = ON            PWRT enabled
;     PWRT = OFF           PWRT disabled
;
;   Brown-out Reset Enable bits:
;     BOR = OFF            Brown-out Reset disabled in hardware and software
;     BOR = SOFT           Brown-out Reset enabled and controlled by software (SBOREN is enabled)
;     BOR = ON_ACTIVE      Brown-out Reset enabled in hardware only and disabled in Sleep mode (SBOREN is disabled)
;     BOR = ON             Brown-out Reset enabled in hardware only (SBOREN is disabled)
;
;   Brown-out Voltage bits:
;     BORV = 0             Maximum setting
;     BORV = 1             
;     BORV = 2             
;     BORV = 3             Minimum setting
;
;   USB Voltage Regulator Enable bit:
;     VREGEN = OFF         USB voltage regulator disabled
;     VREGEN = ON          USB voltage regulator enabled
;
;   Watchdog Timer Enable bit:
;     WDT = OFF            HW Disabled - SW Controlled
;     WDT = ON             HW Enabled - SW Disabled
;
;   Watchdog Timer Postscale Select bits:
;     WDTPS = 1            1:1
;     WDTPS = 2            1:2
;     WDTPS = 4            1:4
;     WDTPS = 8            1:8
;     WDTPS = 16           1:16
;     WDTPS = 32           1:32
;     WDTPS = 64           1:64
;     WDTPS = 128          1:128
;     WDTPS = 256          1:256
;     WDTPS = 512          1:512
;     WDTPS = 1024         1:1024
;     WDTPS = 2048         1:2048
;     WDTPS = 4096         1:4096
;     WDTPS = 8192         1:8192
;     WDTPS = 16384        1:16384
;     WDTPS = 32768        1:32768
;
;   MCLR Pin Enable bit:
;     MCLRE = OFF          RE3 input pin enabled; MCLR disabled
;     MCLRE = ON           MCLR pin enabled; RE3 input pin disabled
;
;   Low-Power Timer 1 Oscillator Enable bit:
;     LPT1OSC = OFF        Timer1 configured for higher power operation
;     LPT1OSC = ON         Timer1 configured for low-power operation
;
;   PORTB A/D Enable bit:
;     PBADEN = OFF         PORTB<4:0> pins are configured as digital I/O on Reset
;     PBADEN = ON          PORTB<4:0> pins are configured as analog input channels on Reset
;
;   CCP2 MUX bit:
;     CCP2MX = OFF         CCP2 input/output is multiplexed with RB3
;     CCP2MX = ON          CCP2 input/output is multiplexed with RC1
;
;   Stack Full/Underflow Reset Enable bit:
;     STVREN = OFF         Stack full/underflow will not cause Reset
;     STVREN = ON          Stack full/underflow will cause Reset
;
;   Single-Supply ICSP Enable bit:
;     LVP = OFF            Single-Supply ICSP disabled
;     LVP = ON             Single-Supply ICSP enabled
;
;   Dedicated In-Circuit Debug/Programming Port (ICPORT) Enable bit:
;     ICPRT = OFF          ICPORT disabled
;     ICPRT = ON           ICPORT enabled
;
;   Extended Instruction Set Enable bit:
;     XINST = OFF          Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
;     XINST = ON           Instruction set extension and Indexed Addressing mode enabled
;
;   Background Debugger Enable bit:
;     DEBUG = ON           Background debugger enabled, RB6 and RB7 are dedicated to In-Circuit Debug
;     DEBUG = OFF          Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
;
;   Code Protection bit Block 0:
;     CP0 = ON             Block 0 (000800-001FFFh) code-protected
;     CP0 = OFF            Block 0 (000800-001FFFh) not code-protected
;
;   Code Protection bit Block 1:
;     CP1 = ON             Block 1 (002000-003FFFh) code-protected
;     CP1 = OFF            Block 1 (002000-003FFFh) not code-protected
;
;   Code Protection bit Block 2:
;     CP2 = ON             Block 2 (004000-005FFFh) code-protected
;     CP2 = OFF            Block 2 (004000-005FFFh) not code-protected
;
;   Code Protection bit Block 3:
;     CP3 = ON             Block 3 (006000-007FFFh) code-protected
;     CP3 = OFF            Block 3 (006000-007FFFh) not code-protected
;
;   Boot Block Code Protection bit:
;     CPB = ON             Boot block (000000-0007FFh) code-protected
;     CPB = OFF            Boot block (000000-0007FFh) not code-protected
;
;   Data EEPROM Code Protection bit:
;     CPD = ON             Data EEPROM code-protected
;     CPD = OFF            Data EEPROM not code-protected
;
;   Write Protection bit Block 0:
;     WRT0 = ON            Block 0 (000800-001FFFh) write-protected
;     WRT0 = OFF           Block 0 (000800-001FFFh) not write-protected
;
;   Write Protection bit Block 1:
;     WRT1 = ON            Block 1 (002000-003FFFh) write-protected
;     WRT1 = OFF           Block 1 (002000-003FFFh) not write-protected
;
;   Write Protection bit Block 2:
;     WRT2 = ON            Block 2 (004000-005FFFh) write-protected
;     WRT2 = OFF           Block 2 (004000-005FFFh) not write-protected
;
;   Write Protection bit Block 3:
;     WRT3 = ON            Block 3 (006000-007FFFh) write-protected
;     WRT3 = OFF           Block 3 (006000-007FFFh) not write-protected
;
;   Boot Block Write Protection bit:
;     WRTB = ON            Boot block (000000-0007FFh) write-protected
;     WRTB = OFF           Boot block (000000-0007FFh) not write-protected
;
;   Configuration Register Write Protection bit:
;     WRTC = ON            Configuration registers (300000-3000FFh) write-protected
;     WRTC = OFF           Configuration registers (300000-3000FFh) not write-protected
;
;   Data EEPROM Write Protection bit:
;     WRTD = ON            Data EEPROM write-protected
;     WRTD = OFF           Data EEPROM not write-protected
;
;   Table Read Protection bit Block 0:
;     EBTR0 = ON           Block 0 (000800-001FFFh) protected from table reads executed in other blocks
;     EBTR0 = OFF          Block 0 (000800-001FFFh) not protected from table reads executed in other blocks
;
;   Table Read Protection bit Block 1:
;     EBTR1 = ON           Block 1 (002000-003FFFh) protected from table reads executed in other blocks
;     EBTR1 = OFF          Block 1 (002000-003FFFh) not protected from table reads executed in other blocks
;
;   Table Read Protection bit Block 2:
;     EBTR2 = ON           Block 2 (004000-005FFFh) protected from table reads executed in other blocks
;     EBTR2 = OFF          Block 2 (004000-005FFFh) not protected from table reads executed in other blocks
;
;   Table Read Protection bit Block 3:
;     EBTR3 = ON           Block 3 (006000-007FFFh) protected from table reads executed in other blocks
;     EBTR3 = OFF          Block 3 (006000-007FFFh) not protected from table reads executed in other blocks
;
;   Boot Block Table Read Protection:
;     EBTRB = ON           Boot block (000000-0007FFh) protected from table reads executed in other blocks
;     EBTRB = OFF          Boot block (000000-0007FFh) not protected from table reads executed in other blocks
;
;==========================================================================
;==========================================================================

no supe como se soluciono, pero al parecer actualice al PBP2.5 y listo....
 
Última edición:
Que tal Lubeck:

Sabes me interesa incrementar mi memoria del PIC16F877A y dar un poco de mas velocidad a mis proyectos y vi que manejas este Pic18f4620, asì como el Pic18f4550 ò el Pic18f452 pero siendote franco desconozco por completo estos pero, realmente no creo que sea muy dificil declarar puertos, registros y fusibles para hechar a andar los puertos analogicos, entradas y salidas digitales asi como el mclr cierto ?¿

Te adjunto mi programa para que veas de lo que hablo y por que tan pesado jeje igual si me apoyas un poco con tu experiencia me puedas decir que puedo mejorar y utilizao el microcode studio para programar y el compilador picbasic pro, igual si pudieras decirme de que manera puedo calcular el peso de mi programa o la memoria que ocupa mi programa al irlo programando ya sea en code designer lite o microcode studio, utilizo tu quemador master pic prog pero esta fallandome en veces por eso quiero uno nuevo.

Tambièn quiero ponerme a tus òrdenes cualquier cosa que necesites de material, para fabricar circuitos impresos de manera profesional, sensores fotoelectricos, inductivos, opticos, diferentes marcas como sick, banner, omron, etc o material elèctrico.

Espero me puedas contestar pronto saludos y que tengas un grandioso fin de semana.


 
Última edición por un moderador:
realmente no creo que sea muy dificil declarar puertos, registros y fusibles para hechar a andar los puertos analogicos, entradas y salidas digitales asi como el mclr cierto ?¿

no, esos no son dificiles...

No se subio tu codigo.. si gustas intenta subirlo de nuevo y con gusto te apoyo en lo que pueda...

Saludos
 
Código:
'****************************************************************
'*  Name    : 2 SINGULADORES MISSION VERSION 0.0                *
'*  Author  : ING. ROJO AGUILAR CHAVEZ                          *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 15/03/2012                                        *
'*  Version : 0.0                                               *
'*  Notes   : PROGRAMA PARA CONTROLAR 2 SINGULADORES SEGUN LA   *
'*            CANTIDAD DE PIEZAS QUE SE LE PROGRAME PARA CONTAR *
'*            POR CADA BANDA SINGULADORA O TRANSPORTADOR        *
'****************************************************************
;  º                                                             º 
;  º        _\\|//_                                                º 
;  º       (` o-o ')                                               º
;  º------ooO-(_)-Ooo-------------------------------------------º
;  º                                                               º
;  º                              ING. ROJO AGUILAR CHAVEZ      º
;  º    .oooO     Oooo                                            º
;  º    (   )     (   )        INGENIERIA EN MECATRONICA        º
;  º_____\ (_______) /__________________________________________º
;  º      \_)     (_/                                           º
;
;
;
;  --------------------SECUENCIA DEL PROGRAMA-------------------------
;
;   PASO 1: DECLARO LIBRERÍAS
;   PASO 2: PUERTOS DE ENTRADA, SALIDA, TECLADO Y LCD
;   PASO 3: RESETEO PUERTOS Y VARIABLES
;   PASO 4: MUESTRO EN LCD QUIEN FABRICO PROYECTO
;   PASO 5: PREGUNTO SI ENCIENDO BANDA A O NO ? (EN CASO DE SER NO SALTO HASTA PASO 17)
;   PASO 6: SI>CONFIGURO BANDA A CONTADOR 1 A 7 Y TIEMPO DE SELLADO 0 A 700mS
;   PASO 7: MANDO SEÑAL CON PORTA.4 PARA INICIO LECTURA DEL CONTADOR NO MAYOR A 1250mS
;   PASO 8: APAGO SEÑAL PORTA.4 PARA EVITAR ERRORES
;   PASO 9: MANDO SEÑAL A PIC16F84A LOS 3 BIT DEL CONTADOR 1 A 7 IF PORTA=%000111
;   PASO 10: APAGO SEÑAL A PIC16F84A LOS 3 BIT DEL CONTADOR 1 A 7 IF PORTA=%000111 
;   PASO 11: MANDO SEÑAL CON PORTA.4 PARA INICIO LECTURA DEL TIMER ENBOLSADORA NO MAYOR A 1200mS
;   PASO 12: APAGO SEÑAL PORTA.4 PARA EVITAR ERRORES
;   PASO 13: MANDO SEÑAL A PIC16F84A LOS 3 BIT DEL TIMER 100 A 700mS IF PORTA=%000111
;   PASO 14: APAGO SEÑAL A PIC16F84A LOS 3 BIT DEL TIMER 100 A 700mS IF PORTA=%000111 
;   PASO 15: MANDO SEÑAL CON PORTA.4 PARA FINALIZAR CONFIGURACION DE PIC16F84A NO MAYOR A 1250mS
;   PASO 16: APAGO SEÑAL PORTA.4 PARA EVITAR ERRORES
;   PASO 17: NO>CONFIGURO BANDA B CONTADOR 1 A 7 Y TIEMPO DE SELLADO 0 A 700mS
;   PASO 18: MANDO SEÑAL CON PORTA.4 PARA INICIO LECTURA DEL CONTADOR NO MAYOR A 150mS
;   PASO 19: APAGO SEÑAL PORTA.4 PARA EVITAR ERRORES
;   PASO 20: MANDO SEÑAL A PIC16F84A LOS 3 BIT DEL CONTADOR 1 A 7 IF PORTA=%000111
;   PASO 21: APAGO SEÑAL A PIC16F84A LOS 3 BIT DEL CONTADOR 1 A 7 IF PORTA=%000111 
;   PASO 22: MANDO SEÑAL CON PORTA.4 PARA INICIO LECTURA DEL TIMER ENBOLSADORA NO MAYOR A 1250mS
;   PASO 23: APAGO SEÑAL PORTA.4 PARA EVITAR ERRORES
;   PASO 24: MANDO SEÑAL A PIC16F84A LOS 3 BIT DEL TIMER 100 A 700mS IF PORTA=%000111
;   PASO 25: APAGO SEÑAL A PIC16F84A LOS 3 BIT DEL TIMER 100 A 700mS IF PORTA=%000111 
;   PASO 26: MANDO SEÑAL CON PORTA.4 PARA FINALIZAR CONFIGURACION DE PIC16F84A NO MAYOR A 1250mS
;   PASO 27: APAGO SEÑAL PORTA.4 PARA EVITAR ERRORES
;   PASO 28: SE FINALIZO CONFIGURACION DE PARAMETROS
;   PASO 29: PEDIR EN LCD QUE SE PRESIONE BOTON DE INICIO
;   PASO 30: LEER BOTON DE INICIO IF PORTB.3=1 THEN SISTEMA ON
;   PASO 31: MUESTRA EN LCD EL ESTADO Y CONTADOR DE CADA BANDA 
;   ( BANDA A= ON       / CONTADOR= 7Pza )
;   ( ENBOLSADORA A= ON / TIMER= 200mS   )
;   ( BANDA B= OFF       / CONTADOR= OFF )
;   ( ENBOLSADORA B= OFF / TIMER= OFF    )
;
;



; ----------------------DECLARO LIBRERÍA DE PIC BASIC PRO-------------------
INCLUDE "modedefs.bas"
DEFINE OSC 4                    ;Define el Oscilador para un Cristal de 4 Mhz.

 
; ----------------------CONFIGURO PUERTOS DE ENTRADAS Y SALIDAS----------------------
;
; ********************* PUERTO A *************************
ADCON1=7                        ;CONFIGURO TODOS LOS PINES DEL PUERTO A DIGITALES
TRISA=%000000
BIT1CONTADOR              VAR     PORTA.0 ; RA0 BIT 1 DE CONGIGURACION DE TIMER Y CONTADOR A/B
BIT2CONTADOR              VAR     PORTA.1 ; RA1 BIT 2 DE CONGIGURACION DE TIMER Y CONTADOR A/B
BIT3CONTADOR              VAR     PORTA.2 ; RA2 BIT 3 DE CONGIGURACION DE TIMER Y CONTADOR A/B
BIT4CONTADOR              VAR     PORTA.3 ; RA3 BIT 4 DE CONGIGURACION DE TIMER Y CONTADOR A/B
;A4                       VAR     PORTA.4 ; NO SE UTILIZARA
;BIT4B                    VAR     PORTA.5 ; NO SE UTILIZARA

LET PORTA=%000000


; ********************* PUERTO E *************************
;
TRISE=%000
CONFIRMACIONA              VAR     PORTE.0 ; RE0 BIT DE CONGIGURACION DE TIMER Y CONTADOR B
CONFIRMACIONB              VAR     PORTE.1 ; RE1 BIT DE CONGIGURACION DE TIMER Y CONTADOR B
;BIT3B                     VAR     PORTE.2 ; NO SE UTILIZARA

LET PORTE=%000


; ********************* PUERTO B *************************
; ----------------------CONEXION DE SENSORES EN PUERTO B COMO INTERRUPCIONES---------------------
TRISB=%00111000
;NONE            VAR     PORTB.0 ;NO SE USARA PIN
;NONE            VAR     PORTB.1 ;NO SE USARA PIN
FOCOEMERGENCIA   VAR     PORTB.2 ;NO SE USARA PIN
INICIOSISTEMA    VAR     PORTB.3 ;PIN DONDE SE INICIARÁ EL SISTEMA
REINICIO         VAR     PORTB.4 ;PIN DONDE SE REAJUSTARAN LOS PARAMETROS DE SISTEMA
PAROEMERGENCIA   VAR     PORTB.5 ;PIN DE PARO DE EMERGENCIA DEL SISTEMA N.A.
;SENSORA         VAR     PORTB.6 ;NO SE USARA PIN
;SENSORB         VAR     PORTB.7 ;NO SE USARA PIN

LET PORTB=%00000000

                          
; ********************* PUERTO C *************************
; ----------------------CONEXION DE TECLADO MATRICIAL 4X4 PARA CONFIGURACION DE CONTADORES---------------------
TRISC=%11110000
FILA1           VAR     PORTC.0 ;ENTRADA TECLA 1
FILA2           VAR     PORTC.1 ;ENTRADA TECLA 4
FILA3           VAR     PORTC.2 ;ENTRADA TECLA 7
FILA4           VAR     PORTC.3 ;ENTRADA TECLA *
COLUMNA1        VAR     PORTC.4 ;SALIDA TECLA 1 
COLUMNA2        VAR     PORTC.5 ;SALIDA TECLA 2 
COLUMNA3        VAR     PORTC.6 ;SALIDA TECLA 3
COLUMNA4        VAR     PORTC.7 ;SALIDA TECLA A

LET PORTC=%00000000


; ********************* PUERTO D *************************
; ----------------------CONEXION DEL LCD EN PUERTO D---------------------
TRISD=%00000000
DEFINE LCD_DREG PORTD       ;DECLARO EN QUE CABLEARE MI LCD EN PUERTO D
DEFINE LCD_DBIT 4           ;DECLARO QUE MIS DATOS SE TRANSMITEN A PARTIR DEL PIN D4-D5-D6-D7
DEFINE LCD_RSREG PORTD      ;DECLARO EN QUE PUERTO COLOCO EL BIT RS
DEFINE LCD_RSBIT 2          ;DECLARO EN QUE PIN DEL PUERTO D COLOCO MI BIT "RS"
DEFINE LCD_EREG PORTD       ;DECLARO EN QUE PUERTO COLOCO EL BIT E
DEFINE LCD_EBIT 3           ;DECLARO EN QUE PIN DEL PUERTO D COLOCO MI BIT "E"
DEFINE LCD_BITS 4           ;NUMERO DE PINES QUE UTILIZARE PARA COMUNICAR MI LCD 4 BITS
DEFINE LCD_LINES 4          ;NUMERO DE LINEAS DE MI LCD 2X16 Ó 4X20
DEFINE LCD_COMMANDUS 2000   ;DEMORA PARA INICIAR TODOS LOS COMANDOS DEL LCD
DEFINE LCD_DATAUS 50        ;DEMORA PARA INICIAR LA COMUNICACION DE DATOS

LET PORTD=%00000000

SINGULADORA     VAR BYTE
SINGULADORB     VAR BYTE
ENBOLSADORAAON  VAR BYTE
ENBOLSADORABON  VAR BYTE
CONTADORA       VAR BYTE
CONTADORB       VAR BYTE
TIMERA          VAR BYTE
TIMERALCD       VAR BYTE
TIMERB          VAR BYTE
TIMERBLCD       VAR BYTE

SINGULADORA=0
SINGULADORB=0
ENBOLSADORAAON=0
ENBOLSADORABON=0        
CONTADORA=0
CONTADORB=0
TIMERA=0
TIMERB=0

CERO        CON %000000
UNO         CON %000001
DOS         CON %000010
TRES        CON %000011
CUATRO      CON %000100
CINCO       CON %000101
SEIS        CON %000110
SIETE       CON %000111
OCHO        CON %001000
NUEVE       CON %001001
DIEZ        CON %001010
ONCE        CON %001011
DOCE        CON %001100
TRECE       CON %001101
CATORCE     CON %001110
QUINICE     CON %001111


Clear

Pause 500

ON INTERRUPT GoTo CHECARINTERRUP ' Define el vector de interrupción

INTCON = %10001000 ' habilita las interrupciones (GIE=1)
' habilita la interrupción RB4-RB7 (RBIE=1)
' Inicializa la interrupción (RBIF=0)' habilita la interrupción RB4-RB7


INICIO:
LCDOut $FE, 1,             "  AUTOMATIZACIONES  "
LCDOut $FE, $C0,         "  ----> RMS <----   " 
LCDOut $FE, $94,         " ROJOS  MECHATRONIC "
LCDOut $FE, $D4,        "      SYSTEMS       "
Pause 4000




SINGULADORAOFF:         ;PREGUNTO SI ENCIENDO SINGULADOR A PARA CONFIGURARLO O NO
LCDOut $FE, 1,             "QUIERES TRABAJAR CON"
LCDOut $FE, $C0,         " EL SINGULADOR  >A< " 
LCDOut $FE, $94,         " UTILIZA EL TECLADO "
LCDOut $FE, $D4,        "     --> NO <--     "

;TECLADO:                UTILIZAR TECLAS CENTRAL=OK-ENTER / DERECHA=SI
fila2 = 1 ' Fila 2 = 1 
IF COLUMNA2 = 1 Then 
    SINGULADORA=0
    GoTo SINGULADORBOFF                    ' tecla "5"               
EndIF
IF COLUMNA3 = 1 Then GoTo SINGULADORAON    ' tecla "6"
GoTo SINGULADORAOFF




SINGULADORAON:          ;PREGUNTO SI ENCIENDO SINGULADOR A PARA CONFIGURARLO O NO
LCDOut $FE, 1,             "QUIERES TRABAJAR CON"
LCDOut $FE, $C0,         " EL SINGULADOR  >A< " 
LCDOut $FE, $94,         " UTILIZA EL TECLADO "
LCDOut $FE, $D4,        "     --> SI <--     "

;TECLADO:                UTILIZAR TECLAS IZQUIERDA=NO / CENTRAL=OK-ENTER
fila2 = 1 ' Fila 2 = 1        
IF COLUMNA1 = 1 Then GoTo SINGULADORAOFF      ' tecla "4"   
IF COLUMNA2 = 1 Then GoTo CONFIRMSINGAON1      ' tecla "5"
GoTo SINGULADORAON




CONFIRMSINGAON1:         ;CONFIRMO AL PIC16F84A QUE SE UTILIZARÀ SINGULADOR A E INICIA CONFIGURACION 
SINGULADORA=1
LET CONFIRMACIONA=1
LCDOut $FE, 1,             "  ENTRANDO AL MENU  "
LCDOut $FE, $C0,         "  DE CONFIGURACION  " 
LCDOut $FE, $94,         " DEL SINGULADOR >A< "
LCDOut $FE, $D4,        "   CARGANDO......   "
Pause 1000
LET CONFIRMACIONA=0
GoTo CONTADSINGA




CONTADSINGA:             ;SELECCIONO CON TECLADO EL VALOR DEL CONTADOR 1 A 15 PZAS
LCDOut $FE, 1,             "ELIGE  LA  CONSTANTE"
LCDOut $FE, $C0,         "   DEL CONTADOR DE  " 
LCDOut $FE, $94,         "FRUTAS EN SINGULADOR"
LCDOut $FE, $D4,        "  > A < : ", DEC CONTADORA, "Pzas"

fila1 = 1 ' Fila 1 = 1
IF COLUMNA2 = 1 Then                ' tecla "2"
    IF CONTADORA<15 Then
            CONTADORA=CONTADORA+1
            Pause 100
    EndIF
EndIF    

fila2 = 1 ' Fila 2 = 1
IF COLUMNA2 = 1 Then VERIFICAA1      ' tecla "5"

fila3 = 1 ' Fila 3 = 1
IF COLUMNA2 = 1 Then                ' tecla "8"
    IF CONTADORA>0 Then
            CONTADORA=CONTADORA-1
            Pause 100
    EndIF
EndIF

GoTo CONTADSINGA




VERIFICAA1:              ;VERIFICO SI EL VALOR DEL CONTADOR ES>0 PARA VALIDAR
IF CONTADORA=0 Then ERRORA1
     
LCDOut $FE, 1,             " SE ESTA INGRESANDO "
LCDOut $FE, $C0,         "EL DATO DEL CONTADOR" 
LCDOut $FE, $94,         " DEL SINGULADOR >A< "
LCDOut $FE, $D4,        "   CARGANDO......   "

Call  DATOCONTADORA
Pause 1000
LET PORTA = CERO
Pause 500

GoTo CONFIRMSINGAON2




ERRORA1:                 ;SUBRUTINA QUE INDICA QUE EL CONTADOR NO ES>0 REFORMULAR
LCDOut $FE, 1,             " NO PUEDES DEJAR EL "
LCDOut $FE, $C0,         " VALOR DEL CONTADOR " 
LCDOut $FE, $94,         " EN CERO, DEBES DAR "
LCDOut $FE, $D4,        " UN VALOR CONT. A>0 "
Pause 5000

GoTo CONTADSINGA




CONFIRMSINGAON2:         ;CONFIRMO AL PIC16F84A QUE SE UTILIZARÀ SINGULADOR A E INICIA CONFIGURACION 
LET CONFIRMACIONA=1
LCDOut $FE, 1,             "  ENTRANDO AL MENU  "
LCDOut $FE, $C0,         "  DE CONFIGURACION  " 
LCDOut $FE, $94,         " DEL SINGULADOR >A< "
LCDOut $FE, $D4,        "   CARGANDO......   "
Pause 1000
LET CONFIRMACIONA=0
GoTo TIMERSINGA




TIMERSINGA:              ;SELECCIONO CON EL TECLADO EL VALOR DEL TIMER 100 A 1500mS
LCDOut $FE, 1,             "ELIGE  LA  CONSTANTE"
LCDOut $FE, $C0,         "DEL TIMER DE ESPERA " 
LCDOut $FE, $94,         "PARA SELLAR ARPILLA "
LCDOut $FE, $D4,        "  > A < : ", DEC TIMERA, "Pzas"

fila1 = 1 ' Fila 1 = 1
IF COLUMNA2 = 1 Then                ' tecla "2"
    IF TIMERA<15 Then
            TIMERA=TIMERA+1
            Pause 100
    EndIF
EndIF    

fila2 = 1 ' Fila 2 = 1
IF COLUMNA2 = 1 Then VERIFICAA2      ' tecla "5"

fila3 = 1 ' Fila 3 = 1
IF COLUMNA2 = 1 Then                ' tecla "8"
    IF TIMERA>0 Then
            TIMERA=TIMERA-1
            Pause 100
    EndIF
EndIF

GoTo TIMERSINGA



VERIFICAA2:              ;VERIFICO SI EL VALOR DE TIMER ES>0 PARA VALIDAR
IF CONTADORA=0 Then ERRORA2
     
LCDOut $FE, 1,             " SE ESTA INGRESANDO "
LCDOut $FE, $C0,         " EL DATO DEL TIMERR " 
LCDOut $FE, $94,         "DE LA ENBOLSADORA A "
LCDOut $FE, $D4,        "   CARGANDO......   "

Call  DATOTIMERA
Pause 1000
LET PORTA = CERO

GoTo TIMERSINGA




ERRORA2:                  ;SUBRUTINA QUE INDICA QUE EL TIMER NO ES>0 REFORMULAR
LCDOut $FE, 1,             " NO PUEDES DEJAR EL "
LCDOut $FE, $C0,         "  VALOR DEL TIMERR  " 
LCDOut $FE, $94,         " EN CERO, DEBES DAR "
LCDOut $FE, $D4,        " UN VALOR TIMER A>0 "
Pause 5000

GoTo TIMERSINGA




CONFIRMSINGAON3:         ;CONFIRMO AL PIC16F84A QUE SE UTILIZARÀ SINGULADOR A E INICIA CONFIGURACION 
LET CONFIRMACIONA=1
LCDOut $FE, 1,             "  ENTRANDO AL MENU  "
LCDOut $FE, $C0,         "  DE CONFIGURACION  " 
LCDOut $FE, $94,         " DEL SINGULADOR >A< "
LCDOut $FE, $D4,        "   CARGANDO......   "
Pause 1000
LET CONFIRMACIONA=0
GoTo SINGULADORBOFF




SINGULADORBOFF:         ;PREGUNTO SI ENCIENDO SINGULADOR A PARA CONFIGURARLO O NO
LCDOut $FE, 1,             "QUIERES TRABAJAR CON"
LCDOut $FE, $C0,         " EL SINGULADOR  >B< " 
LCDOut $FE, $94,         " UTILIZA EL TECLADO "
LCDOut $FE, $D4,        "     --> NO <--     "

;TECLADO:                UTILIZAR TECLAS CENTRAL=OK-ENTER / DERECHA=SI
fila2 = 1 ' Fila 2 = 1 
IF COLUMNA2 = 1 Then 
    SINGULADORB=0
    GoTo COMPARAAB                         ' tecla "5"               
EndIF
IF COLUMNA3 = 1 Then GoTo SINGULADORBON    ' tecla "6"
GoTo SINGULADORBOFF




SINGULADORBON:          ;PREGUNTO SI ENCIENDO SINGULADOR A PARA CONFIGURARLO O NO
LCDOut $FE, 1,             "QUIERES TRABAJAR CON"
LCDOut $FE, $C0,         " EL SINGULADOR  >B< " 
LCDOut $FE, $94,         " UTILIZA EL TECLADO "
LCDOut $FE, $D4,        "     --> SI <--     "

;TECLADO:                UTILIZAR TECLAS IZQUIERDA=NO / CENTRAL=OK-ENTER
fila2 = 1 ' Fila 2 = 1        
IF COLUMNA1 = 1 Then GoTo SINGULADORBOFF      ' tecla "4"   
IF COLUMNA2 = 1 Then GoTo CONFIRMSINGBON1      ' tecla "5"
GoTo SINGULADORBON




CONFIRMSINGBON1:         ;CONFIRMO AL PIC16F84A QUE SE UTILIZARÀ SINGULADOR A E INICIA CONFIGURACION 
SINGULADORB=1
LET CONFIRMACIONB=1
LCDOut $FE, 1,             "  ENTRANDO AL MENU  "
LCDOut $FE, $C0,         "  DE CONFIGURACION  " 
LCDOut $FE, $94,         " DEL SINGULADOR >B< "
LCDOut $FE, $D4,        "   CARGANDO......   "
Pause 1000
LET CONFIRMACIONB=0
GoTo CONTADSINGB




CONTADSINGB:             ;SELECCIONO CON TECLADO EL VALOR DEL CONTADOR 1 A 15 PZAS
LCDOut $FE, 1,             "ELIGE  LA  CONSTANTE"
LCDOut $FE, $C0,         "   DEL CONTADOR DE  " 
LCDOut $FE, $94,         "FRUTAS EN SINGULADOR"
LCDOut $FE, $D4,        "  > B < : ", DEC CONTADORB, "Pzas"

fila1 = 1 ' Fila 1 = 1
IF COLUMNA2 = 1 Then                ' tecla "2"
    IF CONTADORB<15 Then
            CONTADORB=CONTADORB+1
            Pause 100
    EndIF
EndIF    

fila2 = 1 ' Fila 2 = 1
IF COLUMNA2 = 1 Then VERIFICAB1      ' tecla "5"

fila3 = 1 ' Fila 3 = 1
IF COLUMNA2 = 1 Then                ' tecla "8"
    IF CONTADORB>0 Then
            CONTADORB=CONTADORB-1
            Pause 100
    EndIF
EndIF

GoTo CONTADSINGB




VERIFICAB1:              ;VERIFICO SI EL VALOR DEL CONTADOR ES>0 PARA VALIDAR
IF CONTADORB=0 Then ERRORB1
     
LCDOut $FE, 1,             " SE ESTA INGRESANDO "
LCDOut $FE, $C0,         "EL DATO DEL CONTADOR" 
LCDOut $FE, $94,         " DEL SINGULADOR >B< "
LCDOut $FE, $D4,        "   CARGANDO......   "

Call  DATOCONTADORB
Pause 1000
LET PORTA = CERO
Pause 500

GoTo CONFIRMSINGBON2




ERRORB1:                 ;SUBRUTINA QUE INDICA QUE EL CONTADOR NO ES>0 REFORMULAR
LCDOut $FE, 1,             " NO PUEDES DEJAR EL "
LCDOut $FE, $C0,         " VALOR DEL CONTADOR " 
LCDOut $FE, $94,         " EN CERO, DEBES DAR "
LCDOut $FE, $D4,        " UN VALOR CONT. B>0 "
Pause 5000

GoTo CONTADSINGB




CONFIRMSINGBON2:         ;CONFIRMO AL PIC16F84A QUE SE UTILIZARÀ SINGULADOR A E INICIA CONFIGURACION 
LET CONFIRMACIONB=1
LCDOut $FE, 1,             "  ENTRANDO AL MENU  "
LCDOut $FE, $C0,         "  DE CONFIGURACION  " 
LCDOut $FE, $94,         " DEL SINGULADOR >B< "
LCDOut $FE, $D4,        "   CARGANDO......   "
Pause 1000
LET CONFIRMACIONB=0
GoTo TIMERSINGB




TIMERSINGB:              ;SELECCIONO CON EL TECLADO EL VALOR DEL TIMER 100 A 1500mS
LCDOut $FE, 1,             "ELIGE  LA  CONSTANTE"
LCDOut $FE, $C0,         "DEL TIMER DE ESPERA " 
LCDOut $FE, $94,         "PARA SELLAR ARPILLA "
LCDOut $FE, $D4,        "  > B < : ", DEC TIMERB, "Pzas"

fila1 = 1 ' Fila 1 = 1
IF COLUMNA2 = 1 Then                ' tecla "2"
    IF TIMERB<15 Then
            TIMERB=TIMERB+1
            Pause 100
    EndIF
EndIF    

fila2 = 1 ' Fila 2 = 1
IF COLUMNA2 = 1 Then VERIFICAB2      ' tecla "5"

fila3 = 1 ' Fila 3 = 1
IF COLUMNA2 = 1 Then                ' tecla "8"
    IF TIMERB>0 Then
            TIMERB=TIMERB-1
            Pause 100
    EndIF
EndIF

GoTo TIMERSINGB



VERIFICAB2:              ;VERIFICO SI EL VALOR DE TIMER ES>0 PARA VALIDAR
IF CONTADORB=0 Then ERRORB2
     
LCDOut $FE, 1,             " SE ESTA INGRESANDO "
LCDOut $FE, $C0,         " EL DATO DEL TIMERR " 
LCDOut $FE, $94,         "DE LA ENBOLSADORA B "
LCDOut $FE, $D4,        "   CARGANDO......   "

Call  DATOTIMERB
Pause 1000
LET PORTA = CERO

GoTo TIMERSINGB




ERRORB2:                  ;SUBRUTINA QUE INDICA QUE EL TIMER NO ES>0 REFORMULAR
LCDOut $FE, 1,             " NO PUEDES DEJAR EL "
LCDOut $FE, $C0,         "  VALOR DEL TIMERR  " 
LCDOut $FE, $94,         " EN CERO, DEBES DAR "
LCDOut $FE, $D4,        " UN VALOR TIMER B>0 "
Pause 5000

GoTo TIMERSINGB




CONFIRMSINGBON3:         ;CONFIRMO AL PIC16F84A QUE SE UTILIZARÀ SINGULADOR A E INICIA CONFIGURACION 
LET CONFIRMACIONB=1
LCDOut $FE, 1,             "  ENTRANDO AL MENU  "
LCDOut $FE, $C0,         "  DE CONFIGURACION  " 
LCDOut $FE, $94,         " DEL SINGULADOR >B< "
LCDOut $FE, $D4,        "   CARGANDO......   "
Pause 1000
LET CONFIRMACIONB=0
GoTo PARAMETROSLCD




COMPARAAB:
IF SINGULADORA=0 AND SINGULADORB=0 Then IMPOSIBLE
IF SINGULADORA=1 AND SINGULADORB=0 Then PARAMETROSLCD




IMPOSIBLE:
LCDOut $FE, 1,             "  ---> ERROR <----  "
LCDOut $FE, $C0,         "    DEBES OPERAR    " 
LCDOut $FE, $94,         "  AL MENOS UN SOLO  "
LCDOut $FE, $D4,        "     SINGULADOR     "
Pause 5000
GoTo INICIO




PARAMETROSLCD:
TIMERALCD=TIMERA*100
TIMERBLCD=TIMERB*100

LCDOut $FE, 1,             " INFO: SINGULADOR A "
LCDOut $FE, $C0,         "C: ", DEC CONTADORA,  "Pzas  T: ", DEC TIMERALCD, "mS"
LCDOut $FE, $94,         " INFO: SINGULADOR B "
LCDOut $FE, $D4,        "C: ", DEC CONTADORB,  "Pzas  T: ", DEC TIMERBLCD, "mS"
                        
fila4 = 1 ' Fila * = 1
IF COLUMNA2 = 1 Then 
Call FABRICANTE         ' tecla "0"
EndIF

GoTo PARAMETROSLCD



















Disable
CHECARINTERRUP:
         
IF REINICIO=1 Then 
GoTo REPROGRAMACION
EndIF

IF PAROEMERGENCIA=1 Then 
GoTo EMERGENCIA 
EndIF

;IF SENSORA=1 Then 
;GoTo SENSADOA
;EndIF

;IF SENSORB=1 Then 
;GoTo SENSADOB
;EndIF

INTCON = %10001000 ' Interrupciones PORT B4-B7
Resume
Enable

GoTo INICIO




REPROGRAMACION:

LET PORTA=%000000
LET PORTB=%00000000
LET PORTC=%00000000
LET PORTD=%00000000
LET PORTE=%000
              
LET FOCOEMERGENCIA=1
LCDOut $FE, 1,             "PRESIONASTE LA TECLA"
LCDOut $FE, $C0,         "    DE  REINICIO    " 
LCDOut $FE, $94,         "PARA REAJUSTE DE LOS"
LCDOut $FE, $D4,        "PARAMETROS GENERALES"
Pause 1000
LET FOCOEMERGENCIA=0
Pause 5000

GoTo INICIO




EMERGENCIA:

LET PORTA=%000000
LET PORTB=%00000000
LET PORTC=%00000000
LET PORTD=%00000000
LET PORTE=%000

LET FOCOEMERGENCIA=1

LCDOut $FE, 1,             "     PRESIONASTE    "
LCDOut $FE, $C0,         "    EL  BOTON  DE   "
LCDOut$FE, $94,         " INTERRUPCION  PARO "
LCDOut$FE, $D4,            " --> EMERGENCIA <-- "

Pause 5000

LCDOut $FE, 1,             " LIBERA  EL  BOTON  "
LCDOut $FE, $C0,         " -->  PARO  DE  <-- "
LCDOut$FE, $94,         " --> EMERGENCIA <-- "
LCDOut$FE, $D4,            " JALANDOLO HACIA TI "

IF PAROEMERGENCIA=1 Then 
GoTo EMERGENCIA 
EndIF
     
GoTo INICIO




DATOCONTADORA:

IF CONTADORA = 1 Then PORTA = UNO
IF CONTADORA = 2 Then PORTA = DOS
IF CONTADORA = 3 Then PORTA = TRES
IF CONTADORA = 4 Then PORTA = CUATRO
IF CONTADORA = 5 Then PORTA = CINCO
IF CONTADORA = 6 Then PORTA = SEIS
IF CONTADORA = 7 Then PORTA = SIETE
IF CONTADORA = 8 Then PORTA = OCHO
IF CONTADORA = 9 Then PORTA = NUEVE
IF CONTADORA = 10 Then PORTA = DIEZ
IF CONTADORA = 11 Then PORTA = ONCE
IF CONTADORA = 12 Then PORTA = DOCE
IF CONTADORA = 13 Then PORTA = TRECE
IF CONTADORA = 14 Then PORTA = CATORCE
IF CONTADORA = 15 Then PORTA = QUINICE

Return




DATOTIMERA:

IF TIMERA = 1 Then PORTA = UNO
IF TIMERA = 2 Then PORTA = DOS
IF TIMERA = 3 Then PORTA = TRES
IF TIMERA = 4 Then PORTA = CUATRO
IF TIMERA = 5 Then PORTA = CINCO
IF TIMERA = 6 Then PORTA = SEIS
IF TIMERA = 7 Then PORTA = SIETE
IF TIMERA = 8 Then PORTA = OCHO
IF TIMERA = 9 Then PORTA = NUEVE
IF TIMERA = 10 Then PORTA = DIEZ
IF TIMERA = 11 Then PORTA = ONCE
IF TIMERA = 12 Then PORTA = DOCE
IF TIMERA = 13 Then PORTA = TRECE
IF TIMERA = 14 Then PORTA = CATORCE
IF TIMERA = 15 Then PORTA = QUINICE

Return




DATOCONTADORB:

IF CONTADORB = 1 Then PORTA = UNO
IF CONTADORB = 2 Then PORTA = DOS
IF CONTADORB = 3 Then PORTA = TRES
IF CONTADORB = 4 Then PORTA = CUATRO
IF CONTADORB = 5 Then PORTA = CINCO
IF CONTADORB = 6 Then PORTA = SEIS
IF CONTADORB = 7 Then PORTA = SIETE
IF CONTADORB = 8 Then PORTA = OCHO
IF CONTADORB = 9 Then PORTA = NUEVE
IF CONTADORB = 10 Then PORTA = DIEZ
IF CONTADORB = 11 Then PORTA = ONCE
IF CONTADORB = 12 Then PORTA = DOCE
IF CONTADORB = 13 Then PORTA = TRECE
IF CONTADORB = 14 Then PORTA = CATORCE
IF CONTADORB = 15 Then PORTA = QUINICE

Return




DATOTIMERB:

IF TIMERB = 1 Then PORTA = UNO
IF TIMERB = 2 Then PORTA = DOS
IF TIMERB = 3 Then PORTA = TRES
IF TIMERB = 4 Then PORTA = CUATRO
IF TIMERB = 5 Then PORTA = CINCO
IF TIMERB = 6 Then PORTA = SEIS
IF TIMERB = 7 Then PORTA = SIETE
IF TIMERB = 8 Then PORTA = OCHO
IF TIMERB = 9 Then PORTA = NUEVE
IF TIMERB = 10 Then PORTA = DIEZ
IF TIMERB = 11 Then PORTA = ONCE
IF TIMERB = 12 Then PORTA = DOCE
IF TIMERB = 13 Then PORTA = TRECE
IF TIMERB = 14 Then PORTA = CATORCE
IF TIMERB = 15 Then PORTA = QUINICE

Return




FABRICANTE:
               
LET PORTA=%000000
LET PORTB=%00000000
LET PORTC=%00000000
LET PORTD=%00000000
LET PORTE=%000

LCDOut $FE, 1,             " EN  MULTISEGURIDAD "
LCDOut $FE, $C0,         "   INDUSTRIAL  DE   " 
LCDOut $FE, $94,         " URUAPAN SE FABRICO "
LCDOut $FE, $D4,        "   ESTE  PROYECTO   "
Pause 5000
LCDOut $FE, 1,             "CALLE AMERICAS #26-A"
LCDOut $FE, $C0,         "COL. MORELOS CP60050" 
LCDOut $FE, $94,         "URUAPAN, MICH.  MEX."
LCDOut $FE, $D4,        "TEL:01 (452) 5247674"
Pause 5000
LCDOut $FE, 1,             "FAX:01 (452) 5271714"
LCDOut $FE, $C0,         "FABRICAMOS PROYECTOS" 
LCDOut $FE, $94,         "  DE ACUERDO A TUS  "
LCDOut $FE, $D4,        "  NECESIDADES  !!!  "
Pause 5000
LCDOut $FE, 1,             "   ELABORADO  POR   "
LCDOut $FE, $C0,         "  ING. MECATRONICO  " 
LCDOut $FE, $94,         "--> ROJO AGUILAR <--"
LCDOut $FE, $D4,        " GERENTE PRODUCCION "
Pause 5000

Return



End





;TECLADO:

;fila1 = 1 ' Fila 1 = 1
;fila2 = 0 ' Fila 2 = 0
;fila3 = 0 ' Fila 3 = 0
;fila4 = 0 ' Fila * = 0

;If COLUMNA1 = 1 Then VAR1 = 1  ' tecla "1"
;If COLUMNA2 = 1 Then VAR1 = 2  ' tecla "2"
;If COLUMNA3 = 1 Then VAR1 = 3  ' tecla "3"
;If COLUMNA4 = 1 Then VAR1 = 13 ' tecla "A"

;fila1 = 0 ' Fila 1 = 0
;fila2 = 1 ' Fila 2 = 1
;fila3 = 0 ' Fila 3 = 0
;fila4 = 0 ' Fila * = 0

;If COLUMNA1 = 1 Then VAR1 = 4  ' tecla "4"
;If COLUMNA2 = 1 Then VAR1 = 5  ' tecla "5"
;If COLUMNA3 = 1 Then VAR1 = 6  ' tecla "6"
;If COLUMNA4 = 1 Then VAR1 = 14 ' tecla "B"

;fila1 = 0 ' Fila 1 = 0
;fila2 = 0 ' Fila 2 = 0
;fila3 = 1 ' Fila 3 = 1
;fila4 = 0 ' Fila * = 0

;If COLUMNA1 = 1 Then VAR1 = 7  ' tecla "7"
;If COLUMNA2 = 1 Then VAR1 = 8  ' tecla "8"
;If COLUMNA3 = 1 Then VAR1 = 9  ' tecla "9"
;If COLUMNA4 = 1 Then VAR1 = 15 ' tecla "C"

;fila1 = 0 ' Fila 1 = 0
;fila2 = 0 ' Fila 2 = 0
;fila3 = 0 ' Fila 3 = 0
;fila4 = 1 ' Fila * = 1

;If COLUMNA1 = 1 Then VAR1 = 10  ' tecla "*"
;If COLUMNA2 = 1 Then VAR1 = 11  ' tecla "0"
;If COLUMNA3 = 1 Then VAR1 = 12  ' tecla "#"
;If COLUMNA4 = 1 Then VAR1 = 16  ' tecla "D"
 
Última edición por un moderador:
Bueno...

mira estuve viendo tu codigo, y segun entiendo lo tenias en un 16f877A pero se termino la memoria Flash y lo que pretendes es migrarlo a uno con mas memoria pero no me queda claro cual....

segun veo el mayor consumo de memoria son los Textos del display... una alternativa por la que puedes optar es que pongas todos esos textos en una memoria como la 24CXXX, y con el pic los "jales" segun los necesites... eso ahorra considerablemente el espacio utilizado en la memoria flash...

para ver cuento llevas consumido de la memoria puedes cargar el archivo hex con el winpic 800 y todo lo que no sea 3FFF es el espacio ocupado por el programa...

por comentarte te digo que quite todos los textos y el consumo de tu codigo se va al 50% del uso de la memoria flash del 877A

la otra opcion es la que tenias pensado pasarlo a un pic con mayor memoria y listo... nada mas que comentame cual tienes en mente para hacer unas pruebas...

Saludos
 
Me podras ayudar a acondicionar este programa para poder correrlo en el 18f4550 ?¿

Por que tengo lo que es el microcode studio y su compilador solo que no se cuales son los registros necesarios que ocupo ajustar y los puertos para poder correrlo te mando una imagen para que identifiques como ocupo simularlo.....

Ojala me puedas apoyar con esto y creeme que quedare en deuda contigo lo que ocupes algun sensor o alguna idea de circuitos acondicionadores de entradas y salidas para conmutar CA te los puedo pasar los que tengo bien caladitos en proyectos previos
 
oki..

Me podras ayudar a acondicionar este programa para poder correrlo en el 18f4550 ?¿

Por que tengo lo que es el microcode studio y su compilador solo que no se cuales son los registros necesarios que ocupo ajustar y los puertos para poder correrlo te mando una imagen para que identifiques como ocupo simularlo.....

si lo tuvieras en proteus estaria mejor, sino pues lo que tengas...

Ojala me puedas apoyar con esto y creeme que quedare en deuda contigo lo que ocupes algun sensor o alguna idea de circuitos acondicionadores de entradas y salidas para conmutar CA te los puedo pasar los que tengo bien caladitos en proyectos previos

No te preocupes por eso...
 
Mira Rojo...

parece que ya esta migrado, pongo el archivo hex del 18f4550. el unico detalle es que el puerto RC3 no existe en el 18f4550 y tendrias que ponerlo en uno que tengas desocupado... que es la tecla "*"

anexo tambien el codigo que practicamente es el mismo por ser casi iguales ambos micros... nada mas verifique que la interrupcion del RB4-7 sea la misma, y la configuracion del modulo ADC... y agrege los fuses para oscilador de 4MHz..

esta compilado con pbp 2.50a y MPASM 5.20

1.- descomprimelo lo mas cerca del directorio raiz.
2.- copia el archivo 18f4550.inc donde este el compilador PBP2.50a
3.-intenta compilar con MPASM5.20

espero no haber olvidado algo o cometido algun error, de cualquierforma estoy en contacto...

Saludos.
 

Adjuntos

  • rojo.rar
    14.7 KB · Visitas: 216
Última edición:
alguien me puede dar los fuses para el pic16f877a esque me sale el mismo error con mi master prog programando en microcode y no entiendo mucho de esto en mi programa uso una lcd no se si tenga que declarar fuses de esto tambien
 
Buenas gente, soy nuevo en esto de los PIC. hasta ahora he trabajado con Microcode y PicBasic 2.50, solo he trabajado con el 16F877A pero me salio una oferta y me compre el 18F4550. hice un programita basico de prender un led y catabum... el 18F lo lee a la velocidad de la luz. lo probe con el 16F y con el 18F (mismo programa compilado para cada cual) y el 18F es muy rapido... esto es toda la rutina...

DEFINE OSC 4

TRISd = 0

INICIO:
HIGH PORTD.1
PAUSE 1000
LOW PORTD.1
PAUSE 1000
GOTO INICIO

END

que me falta? que le debo colocar al programa para que dure 2Seg como debe ser.
:cry:
 
¿que me falta? ¿que le debo colocar al programa para que dure 2Seg como debe ser?:cry:
Te falta incluir la palabra de configuración.

Aquí muestro algunas, y se deben colocar en la cabecera del programa...

Para usar el oscilador interno a 8MHz.
Código:
Asm
; Palabra de configuración
    Config FOSC = INTOSCIO_EC, WDT = OFF, PWRT = ON, ICPRT = ON, LVP = OFF
    Config USBDIV = 2, PLLDIV = 2, VREGEN = ON
EndAsm
;*******************************************************************************
Define OSC 8                ; Definir que se trabajará con 8MHz. (IntOsc)

OSCCON = $76                ; %01110110 (118) Oscilador interno estable a 8MHz.
;*******************************************************************************
Éstas 2 son para llevar el CPU a 48MHz para el uso del USB.

Con cristal de 4MHz.
Código:
; Palabra de configuración
Asm
    CONFIG FOSC = XTPLL_XT, PWRT = ON, WDT = OFF, LVP = OFF, ICPRT = ON
    CONFIG CPUDIV = OSC1_PLL2, USBDIV = 2, PLLDIV = 1, VREGEN = ON
EndAsm
;*******************************************************************************
Define OSC 48                ; Definir que se trabajará con 48MHz.
;*******************************************************************************
Con cristal de 8MHz.
Código:
Asm
; Palabra de configuración
    CONFIG FOSC = HSPLL_HS, PWRT = ON, WDT = OFF, LVP = OFF, ICPRT = ON
    CONFIG CPUDIV = OSC1_PLL2, USBDIV = 2, PLLDIV = 2, VREGEN = ON
EndAsm
;*******************************************************************************
Define OSC 48                ; Definir que se trabajará con 48MHz.
;*******************************************************************************
Para obtener las configuraciones a otras frecuencias de cristal debes leer la hoja de datos.
Ahí encontrarás la información que necesitas, y en el archivo P18F4550.INC encontrarás los fuses.
Ese archivo se encuentra en la carpeta: C:\Archivos de programa\Microchip\MPASM Suite

Para poder compilar usando estas palabras de configuración, adjunto un ejemplo que explica como hacerlo.

Saludos.
 

Adjuntos

  • 18F4550 IntOsc 1Hz LED.rar
    45.3 KB · Visitas: 120
Te falta incluir la palabra de configuración.

Aquí muestro algunas, y se deben colocar en la cabecera del programa...

Para usar el oscilador interno a 8MHz.
Código:
Asm
; Palabra de configuración
    Config FOSC = INTOSCIO_EC, WDT = OFF, PWRT = ON, ICPRT = ON, LVP = OFF
    Config USBDIV = 2, PLLDIV = 2, VREGEN = ON
EndAsm
;*******************************************************************************
Define OSC 8                ; Definir que se trabajará con 8MHz. (IntOsc)

OSCCON = $76                ; %01110110 (118) Oscilador interno estable a 8MHz.
;*******************************************************************************
Éstas 2 son para llevar el CPU a 48MHz para el uso del USB.

Con cristal de 4MHz.
Código:
; Palabra de configuración
Asm
    CONFIG FOSC = XTPLL_XT, PWRT = ON, WDT = OFF, LVP = OFF, ICPRT = ON
    CONFIG CPUDIV = OSC1_PLL2, USBDIV = 2, PLLDIV = 1, VREGEN = ON
EndAsm
;*******************************************************************************
Define OSC 48                ; Definir que se trabajará con 48MHz.
;*******************************************************************************
Con cristal de 8MHz.
Código:
Asm
; Palabra de configuración
    CONFIG FOSC = HSPLL_HS, PWRT = ON, WDT = OFF, LVP = OFF, ICPRT = ON
    CONFIG CPUDIV = OSC1_PLL2, USBDIV = 2, PLLDIV = 2, VREGEN = ON
EndAsm
;*******************************************************************************
Define OSC 48                ; Definir que se trabajará con 48MHz.
;*******************************************************************************
Para obtener las configuraciones a otras frecuencias de cristal debes leer la hoja de datos.
Ahí encontrarás la información que necesitas, y en el archivo P18F4550.INC encontrarás los fuses.
Ese archivo se encuentra en la carpeta: C:\Archivos de programa\Microchip\MPASM Suite

Para poder compilar usando estas palabras de configuración, adjunto un ejemplo que explica como hacerlo.

Saludos.

Gracias a esta explicación, logré configurar la frecuencia para este pic utilizando la EUSART del mismo, muchas gracias por el aporte, por mas que haya pasado ya tiempo de esto.

saludos
 
buenas amigos del foro, he estado leyendo bastante estos días sobre los microcontroladores, es un mundo nuevo para mi, acabo de leer sobre los bits de configuración, y me puse a buscar de una vez en la carpeta de pbp, consegui el archivo del pic18f4580, el cual poseo en estos momentos y me gustaria lograr configurar bien los bits, para evitar dañar el pic. :confused:

Código:
;****************************************************************
;*  18F4580.INC                                                 *
;*                                                              *
;*  By        : Leonard Zerman, Jeff Schmoyer                   *
;*  Notice    : Copyright (c) 2008 microEngineering Labs, Inc.  *
;*              All Rights Reserved                             *
;*  Date      : 09/15/08                                        *
;*  Version   : 2.60                                            *
;*  Notes     :                                                 *
;****************************************************************
        NOLIST
    ifdef PM_USED
        LIST
        "Error: PM does not support this device.  Use MPASM."
        NOLIST
    else
        LIST
        LIST p = 18F4580, r = dec, w = -311, w = -230, f = inhx32
        INCLUDE "P18F4580.INC"	; MPASM  Header
        __CONFIG    _CONFIG1H, _OSC_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
        __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
        __CONFIG    _CONFIG3H, _PBADEN_OFF_3H & _LPT1OSC_OFF_3H & _MCLRE_ON_3H
        __CONFIG    _CONFIG4L,  _STVREN_ON_4L & _LVP_OFF_4L & _BBSIZ_1024_4L & _XINST_OFF_4L
        NOLIST
    endif
        LIST
EEPROM_START	EQU	0F00000h
BLOCK_SIZE	EQU	8


tengo un cristal de 16Mhz. y otro de 4Mhz. cual debería usar con el pic?:confused:
el proyecto en mente es poder medir la temperatura mediante una termocupla o una ntc, con uno de sus puertos ADC, estuve leyendo el datasheets y si no me equivoco debería colocar esto ADCON1=%00011110
bit 7-6: 00
bit 5: vref- coloco 0 si voy a usar tierra :confused:
bit 4: vref+ coloque en 1 si voy a usar uno de diferente del voltaje de alimentación.
bit 3-0: 111.
¿¿ no sé que otra cosa seria falta por parte del ADC.???

luego de medir la temperatura la idea seria con un detector de cruce por cero, y una etapa de potencia poder controlar la carga.

mi mayor problema es el poco conocimiento sobre la programación en pic basic, empece a leer el tema de curso de programacion en basic. y me ha servido me gustaria aplicar esos ejemplos con el pic18f4580. y asi poder aprender sobre este mundo de microcontroladores.
 

Adjuntos

  • control de temperatura.png
    control de temperatura.png
    48.6 KB · Visitas: 12
Conseguí el archivo del PIC18F4580, el cual poseo en estos momentos y me gustaría lograr configurar bien los bits, para evitar dañar el PIC. :confused:
Ese archivo que "conseguiste" es un archivo de cabecera que incluye una palabra de configuración por defecto para el 18F4580, cuando el usuario no la define o modifica.
Para establecer una correcta palabra de configuración se necesita saber el tipo de oscilador a usar y la frecuencia de operación.
Sin embargo, se necesitan establecer otros parámetros más que también dependen del tipo de operación que va a desempeñar el microcontrolador.
La descripción de los fuses y su función, lo encontrarás en la hoja de datos, sección 24.1 (Configuration Bits)
Tengo un cristal de 16 Mhz. y otro de 4 Mhz. ¿Cuál debería usar con el PIC?:confused:
Cualquiera de esos dos funcionará con ese PIC.
Pero la frecuencia del cristal se selecciona conforme al tipo de operaciones que se piensan realizar, ya sea por conteos, por desbordamiento de timers o simplemente por velocidad de ejecución en las tareas.
El proyecto en mente es poder medir la temperatura mediante una termocupla o una ntc, con uno de sus puertos ADC.
Estuve leyendo el datasheet y si no me equivoco debería colocar esto ADCON1=%00011110
bit 7-6: 00
bit 5: vref- coloco 0 si voy a usar tierra :confused:
bit 4: vref+ coloque en 1 si voy a usar uno de diferente del voltaje de alimentación.
bit 3-0: 111.
¿No sé qué otra cosa haría falta por parte del ADC?
Establecer los parámetros del conversor AD no es algo complicado.
De nuevo, sigue repasando la hoja de datos y haz pruebas en físico hasta que logres comprender su funcionamiento.
Luego de medir la temperatura, la idea sería con un detector de cruce por cero, y una etapa de potencia, poder controlar la carga.
Sí, es lo que más comúnmente se hace.
Mi mayor problema es el poco conocimiento sobre la programación en PICBasic.
Empecé a leer el tema de Curso de Programación en PICBasic y me ha servido.
Me gustaría aplicar esos ejemplos con el PIC18F4580 y así poder aprender sobre este mundo de microcontroladores.
Buen comienzo, ahí encontrarás muchos ejemplos que te pueden servir de orientación.
 
Muchas gracias D@rkbytes, ya estoy comprendiendo en este caso seria algo parecido al ejemplo que colocastes mas arriba.

Con cristal de 4MHz.
Código:
; Palabra de configuración
Asm
CONFIG FOSC = HS, PWRT = ON, WDT = OFF, LVP = OFF, ICPRT = ON
CONFIG CPUDIV = OSC1_PLL2, USBDIV = 2, PLLDIV = 1, VREGEN = ON
EndAsm
;*******************************************************************************
Define OSC 48 ; Definir que se trabajará con 48MHz.
;*******************************************************************************

En ese caso podria usar el cristal de 16Mhz. seria HS. Sobre el PLL no lo entendi muy bien y el USBDIV supongo que no debe ir porque no es un pic USB.
Asm
CONFIG FOSC = HS, PWRT = ON, WDT = OFF, LVP = OFF, ICPRT = ON
CONFIG CPUDIV = OSC1_PLL2 :confused:, PLLDIV = 1:confused:, VREGEN = ON
EndAsm

sobre la etapa de potencia y el cruce ya lo tengo listo. los probé y manualmente simulando el disparo y viendo el cruce por cero en proteus y se ven bien.

en proteus pude simular el encendido y apagado de un led con el 18f4580, pero en físico no pude hacerlo funcionar. seguire revisando el datasheets que me dejastes para seguir aprendiendo. Gracias.
 
En ese caso podría usar el cristal de 16 Mhz. sería HS.
Así es, pero como desconozco la versión de tu compilador, no puedo indicarte la palabra de configuración correcta.
Actualmente uso PBPX con MicroCode StudioX, ya que uso Windows 10 x64
Este compilador me permite escribir la palabra de configuración directamente en la cabecera del programa.

La parte de los fuses en el archivo PIC18F4580.PBPINC que incluye este compilador, viene así:
Código:
;  The #CONFIG block is passed directly to the asm file, but PBP will replace it
;  automagically with the contents of a user-defined #CONFIG block if one is
;  found in the PBP source program.  There is no need to edit or comment this 
;  block in this file.  Simply copy it to your source program and edit it there.
#CONFIG
    CONFIG  OSC = HS              ; HS oscillator
    CONFIG  FCMEN = OFF           ; Fail-Safe Clock Monitor disabled
    CONFIG  IESO = OFF            ; Oscillator Switchover mode disabled
    CONFIG  PWRT = OFF            ; PWRT disabled
    CONFIG  BOREN = BOHW          ; Brown-out Reset enabled in hardware only (SBOREN is disabled)
    CONFIG  BORV = 3              ; VBOR set to 2.1V
    CONFIG  WDT = ON              ; WDT enabled
    CONFIG  WDTPS = 512           ; 1:512
    CONFIG  PBADEN = OFF          ; PORTB<4:0> pins are configured as digital I/O on Reset
    CONFIG  LPT1OSC = OFF         ; Timer1 configured for higher power operation
    CONFIG  MCLRE = ON            ; MCLR pin enabled; RE3 input pin disabled
    CONFIG  STVREN = ON           ; Stack full/underflow will cause Reset
    CONFIG  LVP = OFF             ; Single-Supply ICSP disabled
    CONFIG  BBSIZ = 1024          ; 1K words (2K bytes) boot block
    CONFIG  XINST = OFF           ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
    CONFIG  DEBUG = OFF           ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
    CONFIG  CP0 = OFF             ; Block 0 (000800-001FFFh) not code-protected
    CONFIG  CP1 = OFF             ; Block 1 (002000-003FFFh) not code-protected
    CONFIG  CP2 = OFF             ; Block 2 (004000-005FFFh) not code-protected
    CONFIG  CP3 = OFF             ; Block 3 (006000-007FFFh) not code-protected
    CONFIG  CPB = OFF             ; Boot block (000000-0007FFh) not code-protected
    CONFIG  CPD = OFF             ; Data EEPROM not code-protected
    CONFIG  WRT0 = OFF            ; Block 0 (000800-001FFFh) not write-protected
    CONFIG  WRT1 = OFF            ; Block 1 (002000-003FFFh) not write-protected
    CONFIG  WRT2 = OFF            ; Block 2 (004000-005FFFh) not write-protected
    CONFIG  WRT3 = OFF            ; Block 3 (006000-007FFFh) not write-protected
    CONFIG  WRTC = OFF            ; Configuration registers (300000-3000FFh) not write-protected
    CONFIG  WRTB = OFF            ; Boot block (000000-0007FFh) not write-protected
    CONFIG  WRTD = OFF            ; Data EEPROM not write-protected
    CONFIG  EBTR0 = OFF           ; Block 0 (000800-001FFFh) not protected from table reads executed in other blocks
    CONFIG  EBTR1 = OFF           ; Block 1 (002000-003FFFh) not protected from table reads executed in other blocks
    CONFIG  EBTR2 = OFF           ; Block 2 (004000-005FFFh) not protected from table reads executed in other blocks
    CONFIG  EBTR3 = OFF           ; Block 3 (006000-007FFFh) not protected from table reads executed in other blocks
    CONFIG  EBTRB = OFF           ; Boot block (000000-0007FFh) not protected from table reads executed in other blocks
#ENDCONFIG
En el primer comentario se menciona lo que dije cuando no se agrega la palabra de configuración en la cabecera del programa.
Sobre el PLL no lo entendí muy bien y el USBDIV supongo que no debe ir porque no es un PIC con USB.
El uso del HSPLL sirve para multiplicar x 4 la frecuencia del oscilador y sólo está disponible para el oscilador a cristal.
La hoja de datos dijo:
The HSPLL mode makes use of the HS mode oscillator for frequencies up to 10 MHz. A PLL then multiplies the oscillator output frequency by 4 to produce an internal clock frequency up to 40 MHz.
The PLL is only available to the crystal oscillator when the FOSC3:FOSC0 Configuration bits are programmed for HSPLL mode (= 0110).
 
Atrás
Arriba