# Internal Exception: access violation in module 'PIC18.DLL' [000F3C1A].



## juank_lc (Feb 2, 2020)

Saludos soy nuevo en le foro y nuevo en este tema de programación de micros microchip con MPASM asi que tengo un buen de dudas y detalles, pero lo que esta pasando en este moento es que no tengo la mas minima idea de por que mi codigo esta fallando, inicialmente en la clase nos pasaron el codigo para el PORTD del PIC18f45k50 pero tenemos que hacer lo mismo pero con 2 puertos, una rotacion de bits sin acarreo simulando una sola "barra"por así decirlo, asi que intente incialmente cambiar el codigo para que funcionara en el puerto A ya que por ahi me dijeron que el puerto C no esta completo o que no todas sirven para salidas (algo asi, recuerden que soy novato) y ni en PORTA y PORTB funciona como en PORTD me marca este error que por lo que he leido tiene que ver con el oscilador, pero no tengo la mas minima idea de por que falla.

UPDATE: Estoy usando MPLABX y Proteus 8.3


```
; Programa que genera el parpadeo de un LED con subrutina de retardo
LIST P = 18f45K50
#include<p18f45K50.inc>

; Sección de bits de configuración inicial
CONFIG WDTEN = OFF  ; Disables the Watchdog
CONFIG MCLRE = ON; Enables MCLEAR
CONFIG DEBUG = OFF ; Disables Debug mode
CONFIG LVP = OFF  ; Disables Low-Voltage programming
CONFIG FOSC = INTOSCIO ; Enables the internal oscillator

; Directiva que indica en que dirección de la memoria de programa se colocará la primera instrucción  
org 0    ; Sets first instruction in address 00

; Declaración de variables en la memoria de datos
Aux1 EQU 0x00 ; Reserves register 0
Aux2 EQU 0x01  ; Reserves register 1


Start:
    ; Sección de configuración del microcontrolador
    MOVLB 0x0F
    CLRF  ANSELD,1
    CLRF  ANSELA,1
    CLRF  PORTD  ; Cleans PORT D
    CLRF  TRISD  ; Sets PORT D pins as outputs
    CLRF  PORTA  ; Cleans PORT D
    CLRF  TRISA  ; Sets PORT D pins as outputs
    CLRF  Aux1  ; Cleans Aux1
    CLRF  Aux2  ; Cleans Aux2
    MOVLW b'01010011'    ; Configures OSCCON register
    MOVWF OSCCON
    MOVLW b'10000000'
    MOVWF PORTD
    MOVLW b'00000001'
    MOVWF PORTA

;Ciclo principal
MainLoop:
    ;BTG   PORTD,RD1  ;Toggles PORT D PIN 1 (20)
    ;RRNCF PORTD,f
    CALL  Delay1
    MOVLW b'00000001'
    CPFSEQ PORTD
    GOTO  MainLoop
SecondLoop:
    RLNCF PORTD,f
    CALL  Delay1
    MOVLW b'10000000'
    CPFSEQ PORTD
    GOTO SecondLoop
    GOTO ThirdLoop
ThirdLoop:
    RLNCF PORTA,f
    Call Delay1
    MOVLW b'10000000'
    CPFSEQ PORTA
    GOTO ThirdLoop
    GOTO FourLoop
FourLoop:
    RRNCF PORTA, f
    Call Delay1
    MOVLW b'00000001'
    CPFSEQ PORTA
    GOTO FourLoop
    GOTO MainLoop
   

; Subrutina de retardo
Delay1:
    DECFSZ Aux1,1   ;Decrementa Aux1 en 1, salta siguiente instrucción si Aux1 es 0
    GOTO  Delay1
    DECFSZ Aux2,1
    GOTO  Delay1
    RETURN
end
```


```
; Programa que genera el parpadeo de un LED con subrutina de retardo
LIST P = 18f45K50
#include<p18f45K50.inc>
 
; Sección de bits de configuración inicial
CONFIG WDTEN = OFF  ; Disables the Watchdog
CONFIG MCLRE = ON; Enables MCLEAR
CONFIG DEBUG = OFF ; Disables Debug mode
CONFIG LVP = OFF  ; Disables Low-Voltage programming
CONFIG FOSC = INTOSCIO ; Enables the internal oscillator
 
; Directiva que indica en que dirección de la memoria de programa se colocará la primera instrucción   
org 0    ; Sets first instruction in address 00
 
; Declaración de variables en la memoria de datos
Aux1 EQU 0x00 ; Reserves register 0
Aux2 EQU 0x01  ; Reserves register 1
 
 
Start:
    ; Sección de configuración del microcontrolador
    MOVLB 0x0F
    CLRF  ANSELB,1
    CLRF  PORTB  ; Cleans PORT D
    CLRF  TRISB  ; Sets PORT D pins as outputs
    CLRF  Aux1  ; Cleans Aux1
    CLRF  Aux2  ; Cleans Aux2
    MOVLW b'1010011'    ; Configures OSCCON register
    MOVWF OSCCON
    MOVLW b'10000000'
    MOVWF PORTB
 
;Ciclo principal
MainLoop:
    ;BTG   PORTD,RD1  ;Toggles PORT D PIN 1 (20)
    RRNCF PORTB,f
    CALL  Delay1
    MOVLW b'00000001'
    CPFSEQ PORTB
    GOTO  MainLoop
SecondLoop:
    RLNCF PORTB,f
    CALL  Delay1
    MOVLW b'10000000'
    CPFSEQ PORTB
    GOTO SecondLoop
    GOTO  MainLoop
 
; Subrutina de retardo
Delay1:
    DECFSZ Aux1,1   ;Decrementa Aux1 en 1, salta siguiente instrucción si Aux1 es 0
    GOTO  Delay1
    DECFSZ Aux2,1
    GOTO  Delay1
    RETURN
end
```


----------



## D@rkbytes (Feb 2, 2020)

El problema con la librería PIC18.DLL se debe a que el proteus que estás usando es una copia pirata.
Sobre el mensaje del oscilador te recomiendo que estudies el registro OSCCON


----------



## juank_lc (Feb 3, 2020)

D@rkbytes dijo:


> El problema con la librería PIC18.DLL se debe a que el proteus que estás usando es una copia pirata.
> Sobre el mensaje del oscilador te recomiendo que estudies el registro OSCCON


Gracias tienes razón, ya corregí el problema, saludos.


----------

