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
UPDATE: Estoy usando MPLABX y Proteus 8.3
Código:
; 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
Código:
; 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
Adjuntos
Última edición por un moderador: