Soy un novato con la programación de microcontroladores. Tengo conocimientos de programación de alto nivel, pero me estoy involucrando en el desarrollo de microcontroladores / CPU de palanca baja.
Quiero hacer este simple ejercicio de encender y apagar una serie de LED durante 1 segundo cada uno.
Probé este ensamblaje (pensando en dos leds):
List P=18F4550
include <P18F4550.inc>
CONFIG FOSC = INTOSC_EC ;INTOSC_EC ; Internal oscillator
CONFIG PWRT= ON ; Power-up Timer Enable bit
CONFIG BOR=OFF ; Brown-out Reset disabled in hardware and software
CONFIG WDT=OFF ; WDT disabled
CONFIG MCLRE=ON ; MCLR pin enabled
CONFIG PBADEN=OFF ; PORTB<4:0> pins are configured as digital I/O
CONFIG LVP=OFF ; Single-Supply ICSP disabled
CONFIG DEBUG = OFF ; Background debugger disabled
CONFIG XINST = OFF ; Extended Instruction disabled
;******************************Variables***********************************
count equ 0x00
;**********************************************************************************
org 0x0000
movlw 0x62
movwf OSCCON ;Working at 4 MhZ
clrf TRISD ;D port as output
;leds OFF so far
LGHTLOOP
bcf PORTD,0
call DELAY
bsf PORTD,0
CALL DELAY
bcf PORTD,1
call DELAY
bsf PORTD,1
CALL DELAY
bra LIGHTLOOP
DELAY
movlw .1000
movwf count
LOOP2
DECFSZ count,F
bra LOOP2
nop
return
end
Intenté simularlo en el software Proteus, teniendo esta configuración:
Realmente puedo ver que los leds se activan y desactivan, pero nada como un segundo, no importa cómo cambie movlw .255
en la subrutina DELAY
. Probé con diferentes valores más altos y obtuve el mismo comportamiento extraño.
¿En qué me equivoqué?
Contar los ciclos de instrucciones en subrutinas con movlw .255
debería ser más de 1 segundo, creo. Pero todavía la simulación lo muestra más rápido. Agregar dos leds más hace que parezca aún más rápido.