Buenas tardes, estoy tratando de retomar la programación en assembler, ya que siempre he programado en C, para eso tome un modulito que hice con un PIC16F873A y un display 16x2, e hice un programita para prender un led, como era de esperar no funciono, pero después de bajar ejemplos y renegar un buen rato no logro detectar el problema, aca les dejo el programa, básicamente prende y apaga las salidas del puerto A y C, el cristal es de 20MHz, la demora es de 300ms aprox
;------------------------------------------------------------------------------------
list P=16F873A
include <P16F873A.inc>
__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC ; code protec off
; power up timer on
; watchdog off
; osc HS
CBLOCK 0X20
PDel0
PDel1
PDel2
Delay
Nibble
ENDC
RESET
ORG 0x00
goto inicio
org 0x05
inicio
BSF STATUS,5 ; activa la pagina 1
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital
MOVLW 0x00 ; carga 00000 en W
MOVWF TRISA ; puerto a todos salidas
MOVLW 0xFF ; carga 00000000 en W
MOVWF TRISB ; puerto b todos entradas
MOVLW 0x00 ; carga 00000000 en W
MOVWF TRISC ; puerto b todos salidaS
BCF STATUS,5 ; volvemos a la pagina 0
band1
MOVLW 0x00 ; ponemos a cero el
MOVWF PORTC ; el puerto c
MOVWF PORTA ; el puerto a
call DEMORA
MOVLW 0xF0 ; ponemos a uno el
MOVWF PORTC ; el puerto c
MOVLW 0xFF ; ponemos a uno el
MOVWF PORTA ; el puerto a
call DEMORA
goto band1
;-------------------------------------------------------------
; Generado con PDEL ver SP r 1.0 el 12/08/2010 Hs 18:05:57
; Descripcion: Delay 1000000 ciclos
;-------------------------------------------------------------
DEMORA movlw .14 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .72 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;-------------------------------------------------------------
end
Lo extraño es que en el modo debug (MPLAB y PICKIT2) y dandole paso a paso funciona bien, pero en modo normal no. Sospecho que es el oscilador.
Me olvidaba, el modulo anda lo mas bien cuando le cargo programas que hice con el CCS
Saludos