Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

04/04/2013 #1


Error PC out of scope [0x0003FF] en MikroBasic
Buen dia a todos.
Les cuento que estoy aprendiendo a programar en mikroBasic PRO, y mi primer programa por supuesto es prender y apagar un led.
Me surge un problema a la hora de calibrar el oscilador interno del pic (dado que estoy usando el 12F675), en el cual el debugger me indica el error del titulo del hilo.

Pego mi codigo a continuacion

Código:
' Este programa hace parpadear un led en GP0 cada 1 segundo

program Parpadear_un_led

' Declarations section 
dim salida as bit                      ' declara el tamaño de la variable salida
salida = GPIO.0                        ' declara cual es la salida

main:    '   Main program
asm                                                             ; CONFIGURACION DE ENTRADAS, SALIDAS Y REGISTROS
bsf                 STATUS,RP0                                            ;Bank 1
call                 $3FF                                                  ;Get the cal value (escrito en hexadecimal)
movwf                 OSCCAL                                               ;Calibrate
bcf                STATUS,RP0

CLRF                STATUS
bcf                STATUS,RP0              ;se pasa al banco 0
movlw                %00001101             ;[configura 1)"justificado a la izquierda" (todos los bit comprimidos hacia la izquierda del restultado), 2)Vref en Vdd ]
movwf                ADCON0                  ;[3)entrada analogica en GP4. 4)no empieza la conversion y esta operable (ultimos 2 bits)                        ]
clrf                 GPIO                         ;limpia las salidas
movlw                 %00000111                ;[desactiva el comparador de tension y quedan libres GP1,GP2 y GP0]
movwf                 CMCON                         ;
bsf                 STATUS,RP0                 ;se pasa al banco 1
movlw                %00011000                ;configura 1)toma el divisor de tiempo fosc/8. 2)configura GP4 como entrada analogica y las otras como digitales I/O
movwf                 ANSEL                         ;
movlw                 %011000               ;Configura GP3, GP4 como entradas y GP0, GP1, GP2, GP5 como salidas.
movwf                 TRISIO
bcf                STATUS,RP0                ;se pasa al banco 0
end asm

principal:
   salida = 1     ' Enciende la salida
   delay_ms(1000) ' Espera 1 segundo
   salida = 0     ' Apaga la salida
   delay_ms(200)  ' Espera 200ms
   goto principal
end.
Como notaran, la seccion de declarar las variables y registros la hice en assembler para tener mas confianza de como se configuran las cosas (porque vengo programando en assembler desde siempre).

Seguramente es un error muy tonto, pero no logro darme cuenta y no encuentro mucha informacion en google al respecto.

Saludos a todos
05/04/2013 #2


Estuve viendo de cambiar la forma en que se escribe la direccion donde esta el valor de calibracion ($3FF, 0x3FF, $3FFF), pero no hay caso..

adjunto una imagen del error del debugger en el momento en que se produce el error

---------- Actualizado después de 59 minutos ----------

Bueno despues de haber indagado sobre mikrobasic pro, al parecer el debugger (la simulacion del programa en el entorno de programacion) no funciona correctamente para pics de la gama de los 12F.
Probe programar el pic 12F675 con el siguiente programa y funciona perfecto por mas que el debugger muestra un error, por lo tanto no le hagan caso al debugger y prueben sus programas directamente en el protoboard.

Saludos

Código:
' Este programa hace parpadear un led en GP0 cada 1 segundo

program Parpadear_un_led

' Declarations section 
symbol              salida = GPIO.0                        ' declara cual es la salida

main:    '   Main program
asm                                                             ; CONFIGURACION DE ENTRADAS, SALIDAS Y REGISTROS
bsf                 STATUS,RP0                                            ;Bank 1
call                0x3FF                                                  ;Get the cal value (escrito en hexadecimal)
movwf               OSCCAL                                               ;Calibrate
bcf                 STATUS,RP0

CLRF                STATUS
bcf                 STATUS,RP0              ;se pasa al banco 0
movlw               %00001101             ;[configura 1)"justificado a  la izquierda" (todos los bit comprimidos hacia la izquierda del  restultado), 2)Vref en Vdd ]
movwf               ADCON0                  ;[3)entrada analogica en  GP4. 4)no empieza la conversion y esta operable (ultimos 2 bits)                         ]
clrf                GPIO                         ;limpia las salidas
movlw               %00000111                ;[desactiva el comparador de tension y quedan libres GP1,GP2 y GP0]
movwf               CMCON                         ;
bsf                 STATUS,RP0                 ;se pasa al banco 1
movlw               %00011000                ;configura 1)toma el  divisor de tiempo fosc/8. 2)configura GP4 como entrada analogica y las  otras como digitales I/O
movwf               ANSEL                         ;
movlw               %011000               ;Configura GP3, GP4 como entradas y GP0, GP1, GP2, GP5 como salidas.
movwf               TRISIO
bcf                 STATUS,RP0                ;se pasa al banco 0
end asm

principal:
   salida = 1     ' Enciende la salida
   delay_ms(1000) ' Espera 1 segundo
   salida = 0     ' Apaga la salida
   delay_ms(200)  ' Espera 200ms
   goto principal
end.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.