[Tutorial] y manejo de Proton IDE

Os dejo un programa que lee la trama nmea y visualiza los datos en pantalla lcd.
Este ejemplo solo muestra la hora, pero se puede utilizar para visualizar cualquiera de los 11 campos que tiene la sentencia $GPRMC.

Este es el formato:

$GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68.

Imagino que no hace falta decir que un micro simula varias tramas nmea (GPS), es leído por el otro micro y visualizado en una lcd,decir que tengo dos terminales para ver que trama entrega el gps y otra para la captura del micro.
 

Adjuntos

  • gps12-08-13.rar
    79.4 KB · Visitas: 85
Si, aquí un ejemplo con un PIC16F877A en proton.

Saludos.

Ok, lo revisare a ver como funciona. Muchas gracias. (y)

Bueno ya lo probe. El codigo es muy simple y no tiene refresco de pantalla y es precisamente alli en donde esta el problema. Si ha este codigo le agregamos mas lineas de programacion, en donde al final el programa debe pasar otra vez para enviar los datos al display, entonces ya no funcionara.:cry:

Gracias de todas formas por tu ayuda.
 
Última edición:
Ok, lo revisare a ver como funciona. Muchas gracias. (y)

Bueno ya lo probe. El codigo es muy simple y no tiene refresco de pantalla y es precisamente alli en donde esta el problema. Si ha este codigo le agregamos mas lineas de programacion, en donde al final el programa debe pasar otra vez para enviar los datos al display, entonces ya no funcionara.:cry:

Gracias de todas formas por tu ayuda.

pon tu codigo, para verlo
 
pon tu codigo, para verlo

Este es el código de Darkbytes. Funciona porque escribe en el display 1 vez y no hace nada mas (no hay refresco del display).

Código:
;*******************************************************************************
; Programa: LCD20x4.bas
; Versión: 1.0
; Autor: D@rkbytes
; Compañia: Digitek
; Notas: 
; Control de una pantalla LCD 20x4
;*******************************************************************************
Device = 16F877A	; Microcontrolador utilizado
REMINDERS = False
; Palabra de configuración
Config XT_OSC,LVP_OFF,PWRTE_ON,WDT_OFF
REMINDERS = True
;*******************************************************************************
XTAL 4                      ; Establecer que se trabajará con 4MHz.
ALL_DIGITAL = True          ; Pines análogos en modo digital

; Configuración de la pantalla LCD
Declare LCD_TYPE    Alpha       ; Alfanumérico
Declare LCD_DTPIN   PORTD.4     ; Bus de datos de RD4 a RD7
Declare LCD_RSPIN   PORTC.6     ; Pin RS en RC6
Declare LCD_ENPIN   PORTC.7     ; Pin E en RC7
Declare LCD_INTERFACE   4       ; Modo 4 Bits
Declare LCD_LINES   4           ; Pantalla de cuatro líneas


MainProgram:
    Cls                         ; Inicializa y borra la pantalla.
    Print At 1,1,"PRIMER LINEA DEL LCD"
    Print At 2,1,"SEGUNDA LINEA LCD"
    Print At 3,1,"TERCER LINEA DEL LCD"
    Print At 4,1,"CUARTA LINEA DEL LCD"
    ; Ó hacer esto otro...
;    Print $FE,$94,"TERCER LINEA DEL LCD"
;    Print $FE,$D4,"CUARTA LINEA DEL LCD"
    End



;	  ______________________________________________________________
;	/\  Código generado con PIC16F628A Config v1.4 - By D@rkbytes  \
;	\_|            ******************************************       |
;	  |           / Descárgalo gratuitamente desde...      /        |
;	  |          /     www.galeon.com/exodusklient        /         |
;	  |         ******************************************          |
;	  |                                                             |
;	  |             Visita: www.forosdeelectronica.com              |
;	  |                                                             |
;	  |                             \|||/                           |
;	  |                             (o o)                           |
;	  |  ________________________ooO-(_)-Ooo________________________|__
;	  \_/_____________________________________________________________/

Pero si le agregas mas lineas de código (como en el siguiente ejemplo) y refrescas el display, entonces empieza a funcionar mal. Por ejemplo las lineas parpadean o desaparece parte del texto. Alguna solución?.
Gracias

Código:
;*******************************************************************************
; Programa: LCD20x4.bas
; Versión: 1.0
; Autor: D@rkbytes
; Compañia: Digitek
; Notas: 
; Control de una pantalla LCD 20x4
;*******************************************************************************
Device = 16F877A	; Microcontrolador utilizado
REMINDERS = False
; Palabra de configuración
Config XT_OSC,LVP_OFF,PWRTE_ON,WDT_OFF
REMINDERS = True
;*******************************************************************************
XTAL 4                      ; Establecer que se trabajará con 4MHz.
ALL_DIGITAL = True          ; Pines análogos en modo digital

; Configuración de la pantalla LCD
Declare LCD_TYPE    Alpha       ; Alfanumérico
Declare LCD_DTPIN   PORTD.4     ; Bus de datos de RD4 a RD7
Declare LCD_RSPIN   PORTC.6     ; Pin RS en RC6
Declare LCD_ENPIN   PORTC.7     ; Pin E en RC7
Declare LCD_INTERFACE   4       ; Modo 4 Bits
Declare LCD_LINES   4           ; Pantalla de cuatro líneas


MainProgram:
    Cls                         ; Inicializa y borra la pantalla.
    Print At 1,1,"PRIMER LINEA DEL LCD"
    Print At 2,1,"SEGUNDA LINEA LCD"
    Print At 3,1,"TERCER LINEA DEL LCD"
    Print At 4,1,"CUARTA LINEA DEL LCD"
    
    High PORTA.0
    DelayMS 100
    High PORTA.1
    DelayMS 100
    High PORTA.2
    DelayMS 200
    Low PORTA.0
    DelayMS 100
    Low PORTA.1
    DelayMS 100
    Low PORTA.2
    DelayMS 200
    GoTo MainProgram
; Ó hacer esto otro...
;    Print $FE,$94,"TERCER LINEA DEL LCD"
;    Print $FE,$D4,"CUARTA LINEA DEL LCD"
    End



;	  ______________________________________________________________
;	/\  Código generado con PIC16F628A Config v1.4 - By D@rkbytes  \
;	\_|            ******************************************       |
;	  |           / Descárgalo gratuitamente desde...      /        |
;	  |          /     www.galeon.com/exodusklient        /         |
;	  |         ******************************************          |
;	  |                                                             |
;	  |             Visita: www.forosdeelectronica.com              |
;	  |                                                             |
;	  |                             \|||/                           |
;	  |                             (o o)                           |
;	  |  ________________________ooO-(_)-Ooo________________________|__
;	  \_/_____________________________________________________________/
 
Este es el código de Darkbytes. Funciona porque escribe en el display 1 vez y no hace nada mas (no hay refresco del display).

Código:
;*******************************************************************************
; Programa: LCD20x4.bas
; Versión: 1.0
; Autor: D@rkbytes
; Compañia: Digitek
; Notas: 
; Control de una pantalla LCD 20x4
;*******************************************************************************
Device = 16F877A    ; Microcontrolador utilizado
REMINDERS = False
; Palabra de configuración
Config XT_OSC,LVP_OFF,PWRTE_ON,WDT_OFF
REMINDERS = True
;*******************************************************************************
XTAL 4                      ; Establecer que se trabajará con 4MHz.
ALL_DIGITAL = True          ; Pines análogos en modo digital

; Configuración de la pantalla LCD
Declare LCD_TYPE    Alpha       ; Alfanumérico
Declare LCD_DTPIN   PORTD.4     ; Bus de datos de RD4 a RD7
Declare LCD_RSPIN   PORTC.6     ; Pin RS en RC6
Declare LCD_ENPIN   PORTC.7     ; Pin E en RC7
Declare LCD_INTERFACE   4       ; Modo 4 Bits
Declare LCD_LINES   4           ; Pantalla de cuatro líneas


MainProgram:
    Cls                         ; Inicializa y borra la pantalla.
    Print At 1,1,"PRIMER LINEA DEL LCD"
    Print At 2,1,"SEGUNDA LINEA LCD"
    Print At 3,1,"TERCER LINEA DEL LCD"
    Print At 4,1,"CUARTA LINEA DEL LCD"
    ; Ó hacer esto otro...
;    Print $FE,$94,"TERCER LINEA DEL LCD"
;    Print $FE,$D4,"CUARTA LINEA DEL LCD"
    End



;      ______________________________________________________________
;    /\  Código generado con PIC16F628A Config v1.4 - By D@rkbytes  \
;    \_|            ******************************************       |
;      |           / Descárgalo gratuitamente desde...      /        |
;      |          /     www.galeon.com/exodusklient        /         |
;      |         ******************************************          |
;      |                                                             |
;      |             Visita: www.forosdeelectronica.com              |
;      |                                                             |
;      |                             \|||/                           |
;      |                             (o o)                           |
;      |  ________________________ooO-(_)-Ooo________________________|__
;      \_/_____________________________________________________________/
Pero si le agregas mas lineas de código (como en el siguiente ejemplo) y refrescas el display, entonces empieza a funcionar mal. Por ejemplo las lineas parpadean o desaparece parte del texto. Alguna solución?.
Gracias

Código:
;*******************************************************************************
; Programa: LCD20x4.bas
; Versión: 1.0
; Autor: D@rkbytes
; Compañia: Digitek
; Notas: 
; Control de una pantalla LCD 20x4
;*******************************************************************************
Device = 16F877A    ; Microcontrolador utilizado
REMINDERS = False
; Palabra de configuración
Config XT_OSC,LVP_OFF,PWRTE_ON,WDT_OFF
REMINDERS = True
;*******************************************************************************
XTAL 4                      ; Establecer que se trabajará con 4MHz.
ALL_DIGITAL = True          ; Pines análogos en modo digital

; Configuración de la pantalla LCD
Declare LCD_TYPE    Alpha       ; Alfanumérico
Declare LCD_DTPIN   PORTD.4     ; Bus de datos de RD4 a RD7
Declare LCD_RSPIN   PORTC.6     ; Pin RS en RC6
Declare LCD_ENPIN   PORTC.7     ; Pin E en RC7
Declare LCD_INTERFACE   4       ; Modo 4 Bits
Declare LCD_LINES   4           ; Pantalla de cuatro líneas


MainProgram:
    Cls                         ; Inicializa y borra la pantalla.
    Print At 1,1,"PRIMER LINEA DEL LCD"
    Print At 2,1,"SEGUNDA LINEA LCD"
    Print At 3,1,"TERCER LINEA DEL LCD"
    Print At 4,1,"CUARTA LINEA DEL LCD"
    
    High PORTA.0
    DelayMS 100
    High PORTA.1
    DelayMS 100
    High PORTA.2
    DelayMS 200
    Low PORTA.0
    DelayMS 100
    Low PORTA.1
    DelayMS 100
    Low PORTA.2
    DelayMS 200
    GoTo MainProgram
; Ó hacer esto otro...
;    Print $FE,$94,"TERCER LINEA DEL LCD"
;    Print $FE,$D4,"CUARTA LINEA DEL LCD"
    End



;      ______________________________________________________________
;    /\  Código generado con PIC16F628A Config v1.4 - By D@rkbytes  \
;    \_|            ******************************************       |
;      |           / Descárgalo gratuitamente desde...      /        |
;      |          /     www.galeon.com/exodusklient        /         |
;      |         ******************************************          |
;      |                                                             |
;      |             Visita: www.forosdeelectronica.com              |
;      |                                                             |
;      |                             \|||/                           |
;      |                             (o o)                           |
;      |  ________________________ooO-(_)-Ooo________________________|__
;      \_/_____________________________________________________________/

Hola...¿como no va a "parpadear" si le has colocado un retardo mínimo de mas de 0.8 segundos entre impresión e impresión al agregarle dichas lineas?
Saludos.

Ric.
 
Ok entiendo, seguramente ese es el problema ... pero entonces cual es la solución?:confused:

En programación como en otros ordenes no existen formulas "mágicas" si no distintas soluciones posibles a distintas problemáticas...Depende de lo que quieras hacer y pretendas como resultado...por ejemplo imprimir en el display y en la posición que le corresponda solo el dato que cambie de valor y no toda la linea y todas las lineas en un solo paso. Ten en cuenta que la impresión cuando mas datos a imprimir tengas mas demora en ejecutarse.

Ric.
 
En programación como en otros ordenes no existen formulas "mágicas" si no distintas soluciones posibles a distintas problemáticas...Depende de lo que quieras hacer y pretendas como resultado...por ejemplo imprimir en el display y en la posición que le corresponda solo el dato que cambie de valor y no toda la linea y todas las lineas en un solo paso. Ten en cuenta que la impresión cuando mas datos a imprimir tengas mas demora en ejecutarse.

Ric.

Imprimir solo el dato a mostrar ... no había pensado en eso!. Probare a ver que pasa. :unsure:

Gracias. :)
 
buenas a todos hace mucho tiempo no programo un pic ps mas o menos unos 8 años y muchas cosas han cambiado..! les escribo porque realmente me siento como el mas novato de todos y quisiera que uds me colaboren con lo que puedan y de ante mano se los agradesco...!!!

tengo instalado el proton ide ( loader version 3.5.2.7 y compiler version 3.5.3.4) anda de maravilla

Código:
'TRATANDO DE ACTIVAR OCSILADOR INTERNO DEL 16F628a


Device  16F628A
Config INTOSC_OSC_NOCLKOUT_  ; activo el ecsilador interno

PCON.3=1                      ;configuro la volicidad del oscilador a 4mhz 
  
TRISA=%00000000               ;coloco pueto A como salida
TRISB=0                        ;coloco puerto b como salida

PORTB=0                        ;borro puerto b

  inicio:                       ;inicio secuencia
   PORTB =%00000001
   DelayMS 100
   PORTB =%00000010
   DelayMS 100
   PORTB =%00000100
   DelayMS 100
   PORTB =%00001000
   DelayMS 100
   PORTB =%00010000
   DelayMS 100
   PORTB =%00100000
   DelayMS 100
   PORTB =%01000000
   DelayMS 100
   PORTB =%10000000
   DelayMS 100
   GoTo inicio
   End
la idea de este programa es hacer una secuencia con leds en el puerto B
he escrito este codigo tratando de activar el oscilador interno del pic 16f628a pero este no me activa solo funcionan unos leds cuando toco con mi dedo el pin RA7/OSC1/CLKIN
estoy utlizando el pickit 3 para grabar los micros y me he dado cuenta que este tiene unos bits de configuracion estos bits cambian dependiendo del pic que utilice si alguien sabe para que son estos bits en el pickit 3 programer para el pic16f628a le agradeceria mucho..!! tengo muchas mas pregunas pero por el momento solo los molesto con estas... saludos desde medellin colombia:::
 
Busca la información sobre los fuses en la hoja de datos del PIC16F628A
Sobre esta sección en la página 98 encontrarás lo que hacen:
REGISTER 14-1: CONFIG – CONFIGURATION WORD REGISTER

Y para tu código puedes utilizar esta palabra de configuración...
Device 16F628A
Reminders = False
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, BODEN_OFF
Reminders = True
Xtal = 4

Elimina la configuración del bit 3 del registro PCON, pues es la opción por default para INTOSC = 4MHz.
Y como opcional en la palabra de configuración puedes agregar esto...
MCLRE_OFF
Para hacer que el pin RA5 (MCLR/Vpp) Funcione como entrada.

Para hacer que los pines con comparadores análogos funcionen como digitales usa esto...
All_Digital = True

Saludos.
 
Última edición:
Saludos les cuento que tengo un problema, intento leer un canal del 12f675 y no me funciona, les adjunto el código para que lo vean y me comenten en donde esta mi error, saludos
Código:
Device = 12F675    		
Reminders = OFF
	Config CPD_OFF,CP_OFF,BODEN_OFF,MCLRE_OFF,PWRTE_OFF,WDT_OFF	,INTRC_OSC_NOCLKOUT	
Reminders = On
Xtal  4

Declare Rsout_Mode TRUE ' Así mismo transmiten datos
Declare Rsout_Pin GPIO.4 ' Pin de salida es PORTB.0
Declare Serial_Baud 9600 ' Los baudios son 9600

DelayMS 100         'RETARDO INICIAL ANTES DE EMPEZAR
Declare Adin_Res = 10 'CONVERSOR A-D DE 10BITS 
Declare Adin_Tad = FRC      ; Seleccionar A/D RC_Int_Osc
Declare Adin_Stime = 50

Dim LUZ As ADRESL.Word     'VARIABLE PARA LA ENTRADA DEL ADC
Dim Luz2 As Word
    
CMCON = 7           'COMPARADORES APAGADOS 
    TRISIO = %00000001  'GPIO.0 ES ENTRADA (AN0), EL RESTO ES SALIDA
    'ANSEL = %00100001   'AN0 HABILITADO 
    'ADCON0 = %10000011  'Vref = VCC / MÓDULO ADC ENCENDIDO
     ANSEL = %00110001                   ' Set ADC clock to Frc and GP0 to analog mode
    ADCON0 = %11000001
GPIO=0

LAZO:          'CARGO EN LA VARIABLE EL VALOR DE LA ENTRADA
    LUZ = ADIn 0
    RSOut "Valor: ",Dec LUZ,13
    DelayMS 1000
    
GoTo LAZO    
End
 
Saludos les cuento que tengo un problema, intento leer un canal del 12f675 y no me funciona, les adjunto el código para que lo vean y me comenten en donde esta mi error, saludos
Así es como te debe de funcionar.
Compara ahora el código corregido y encuentra los cambios que realicé.
Código:
Device = 12F675            
Reminders = OFF
    Config INTRC_OSC_NOCLKOUT, MCLRE_OFF, WDT_OFF, PWRTE_ON    
Reminders = On
Xtal  4

Set_OSCCAL              ; Obtener el valor de calibración del oscilador interno

Declare Rsout_Mode TRUE ' Así mismo transmiten datos
Declare Rsout_Pin GPIO.0 ' Pin de salida es PORTB.0
Declare Serial_Baud 9600 ' Los baudios son 9600

;DelayMS 100         'RETARDO INICIAL ANTES DE EMPEZAR
Declare Adin_Res = 10 'CONVERSOR A-D DE 10BITS 
Declare Adin_Tad = FRC      ; Seleccionar A/D RC_Int_Osc
Declare Adin_Stime = 50

;Dim LUZ As ADRESL.Word     'VARIABLE PARA LA ENTRADA DEL ADC
Dim LUZ     As Word 
;Dim Luz2    As Word
    
CMCON = 7           'COMPARADORES APAGADOS 
;TRISIO = %00000001  'GPIO.0 ES ENTRADA (AN0), EL RESTO ES SALIDA
'ANSEL = %00100001   'AN0 HABILITADO 
'ADCON0 = %10000011  'Vref = VCC / MÓDULO ADC ENCENDIDO
;ANSEL = %00110001                   ' Set ADC clock to Frc and GP0 to analog mode
;ADCON0 = %11000001
ADCON0.7 = 1            ; Justificar el resultado a la derecha
;GPIO=0
RSOut   0               ; Estabilizar el puerto serial
DelayMS 100             ; Retardo de 100Ms antes de iniciar el programa

LAZO:          'CARGO EN LA VARIABLE EL VALOR DE LA ENTRADA
    LUZ = ADIn 0
    RSOut "Valor: ",Dec LUZ,13,10   ; Enviar el valor seguido de CR/LF
    DelayMS 1000
    
    GoTo LAZO    
    
    End
Suerte.
 
Última edición:
Me vas a matar D@rkbytes, mi código siempre funciono, mi error era tan simple como que en lugar del 12f675 tenía el 12f629 en la simulación jejeje, adjunto el código que uso
Código:
Device = 12F675    		
	Reminders = OFF
	Config MCLRE_OFF,WDT_OFF,INTRC_OSC_NOCLKOUT	
	Reminders = On
Xtal  4

Declare Rsout_Mode TRUE 
Declare Rsout_Pin GPIO.4 
Declare Serial_Baud 9600 

Declare Adin_Res = 10 
Declare Adin_Tad = FRC      
Declare Adin_Stime = 50

Dim LUZ As Word
Dim luz2 As Float
    
 CMCON = 7            
 TRISIO = %00000001  
 ANSEL = %00100001   
 ADCON0 = %10000011
RSOut 0
DelayMS 100

LAZO:          
    LUZ = ADIn 0
    luz2= (489*LUZ)/1000
    RSOut "Valor: ",Dec luz2,13
    DelayMS 1000
    
GoTo LAZO    
End
 
Me vas a matar D@rkbytes, mi código siempre funcionó, mi error era tan simple como que en lugar del 12f675 tenía el 12f629 en la simulación jejeje, adjunto el código que uso
Aunque hubieras puesto el 12F675 en la simulación o en físico, con el código que tenías anteriormente no hubiera funcionado.
Con el código que colocas ahora ya funciona pues ya usaste las correcciones que realicé a tu código.
Sin embargo, sigues configurando algunos registros que al usar funciones de proton no tiene caso configurar.
Al usar funciones de proton, él mismo se encarga de configurar los registros involucrados.
Y también para eso se usan las declaraciones de configuración para la conversión ADC.
Por lo tanto te queda de sobra configurar TRISIO y ANSEL, tan sólo debes configurar el bit 7 de ADCON0 en 1
Ésto con el objetivo de justificar el resultado a la derecha porque usas 10 bits de resolución para el ADC.
En el código que colocas ahora también te falta agregar la instrucción Set_OSCCAL
Si no lo haces, posiblemente tengas lecturas erróneas cuando montes el circuito físicamente.

Saludos.
 
Última edición:
pues lo arme tal cual y todo funciona bien, creo que se si debe de colocar el ansel, según la hoja de datos, la configuración a la derecha se ve en el adcon, creo que poner aparte adcon.7 esta de mas si ya se coloco en el adcon0 inicial
 
pues lo arme tal cual y todo funciona bien, creo que se si debe de colocar el ansel, según la hoja de datos, la configuración a la derecha se ve en el adcon, creo que poner aparte adcon.7 esta de mas si ya se coloco en el adcon0 inicial
Estás algo confundido aún con la programación de microcontroladores.
Cuando digo; tan solo tienes que configurar el bit 7 de ADCON0 sólo tienes que hacer: ADCON0.7 = 1
Y ya no configurar todo el registro cómo lo estás haciendo: ADCON0 = %10000011
Ahí ya es lógico que tienes puesto el bit 7 en 1, pero también el bit 1 y el 0 :cool:
Ahora, si estuvieras programando en lenguaje ensamblador, ahí si tendrías que configurar todos los registros.
Pero como te mencioné anteriormente, proton se encarga de hacerlo cuando usas las funciones del mismo.
Prueba físicamente con un 12F675 el código que posteaste al principio y comprueba que no funcionará.
 
¿Y el ANSEL entonces no se usa? por que es ahí donde según la hoja de datos se elije que AN0-4 se usara



Quiero dejar un aporte que realice hace ya algo de tiempo cuando aún solía jugar con los PIC's (hay que trabajar :( ) Primero hay que recordar que la trasmisión se realiza a 9600 baudios y que se debe de ver en el administrador de dispositivos que puerto serie emula la creación , para este caso es el 20, bueno aquí se los dejo y un par de videos para que vean que si funciona
https://www.youtube.com/watch?v=2fdsGEnpCVw
https://www.youtube.com/watch?v=dheAWeKqROo

Código:
 Device = 18F4550                                    
    Declare Xtal = 48 
    Declare PROTON_START_ADDRESS = $1000                                  
    Declare Optimiser_Level = 3
    Declare Reminders = Off                        

    Declare USB_Descriptor = "CDCdesc.Inc"            
    Dim PP0 As Byte System                              
    Dim Var1 As Word                                    
    Dim Array1[20] As Byte                             
    Dim Out_Buffer As String * 20                       
    Dim In_Buffer As String * 20 
    Dim Entrada As Byte                      

    Symbol Carry_Flag = STATUS.0                        
    Symbol TRNIF = UIR.3  
    TRISB=0                          
    PORTB=0                                         
    All_Digital = True                                  
    
    Repeat                                            
        USBPoll                                         
    Until PP0 = %00000110                                           
    Inicio:                                         
        Repeat                                          
            USBIn 3, In_Buffer, Auto                    
        Until Carry_Flag = 0
        DelayMS 1
        USBPoll
        Entrada= Val (In_Buffer,Dec)
        Clear In_Buffer
        
        
        Select Case Entrada
            Case 1
                Toggle PORTB.0
                USBPoll
                Clear In_Buffer
            Case 2
                Toggle PORTB.1
                USBPoll
                Clear In_Buffer
            Case 3
                Toggle PORTB.2
                USBPoll
                Clear In_Buffer
            Case 4 
                Toggle PORTB.3
                USBPoll
                Clear In_Buffer
            Case 5
                Toggle PORTB.4
                USBPoll
                Clear In_Buffer
            Case 6
                Toggle PORTB.5
                USBPoll
                Clear In_Buffer
            Case 7
                Toggle PORTB.6
                USBPoll
                Clear In_Buffer
            Case 8
                Toggle PORTB.7
                USBPoll
                Clear In_Buffer
         End Select
    GoTo Inicio
    End

Saludos de Oaxaca, México
 
Última edición por un moderador:
¿Y el ANSEL entonces no se usa? por que es ahí donde según la hoja de datos se elije que AN0-4 se usará
Cuando usas la función ADIn de proton, ya no tienes que configurar el registro ANSEL.
Proton se encarga de eso automáticamente, es por eso que la función te pide un canal.
Por ejemplo: LUZ = ADIn 0 (Aquí la variable LUZ contendrá el valor del canal 0)

Si programaras en lenguaje ensamblador, entonces si tendrías que configurar el registro ANSEL y varios más.

Otro ejemplo sería la configuración del registro TRISIO.
Si haces por ejemplo: GPIO.0 = 1 sin configurar el pin GP0 como salida, no funcionará.
En cambio si usas la instrucción High GPIO.0 sin configurar GP0 como salida, si funcionará.
Y eso es porque proton se encarga de configurar los registros involucrados para cada función.

Esa es la ventaja de la programación con lenguajes de alto nivel.
No son mejores que el lenguaje ensamblador (bajo nivel), pero simplifican muchas cosas.

Saludos.
 
Última edición:
Atrás
Arriba