TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: TOFLE en 06 de Junio de 2005, 08:08:00
-
Hola a todos!!
Hace tiempo diseñé una aplicación para un 16F84A@20MHz, y ahora quiero ampliarla.Por eso pensé en el 16F73 que tiene más puertos y más memoria.
El problema que tengo es que he hecho un programa de prueba (encender apagar un led cada 500ms), y no hay forma de que funcione para 20MHz, sólo a 4MHz.
He corroborado con el distribuidor que el pic debe funcionar a 20MHz, pero nada de nada.
¿Alguien sabe que puede pasar? Uso el IC-Prog y deshabilito todos los fuses, y el cristal a HS.
Os dejo el código:
LIST P=16F73
#include "p16F73.inc"
__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC
#define BANCO0 bcf STATUS,5
#define BANCO1 bsf STATUS,5
cblock
PDel0
PDel1
PDel2
endc
org 0x00
goto Inicio
org 0x05
Inicio: clrf PORTA
BANCO1
movlw b"00000000"
movwf TRISA
BANCO0
clrf PORTB
BANCO1
movlw b"00000000"
movwf TRISB
BANCO0
Bucle: movlw 0x00
movwf PORTA
call Demora1
movlw 0xFF
movwf PORTA
call Demora1
goto Bucle
Demora1: movlw .22 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .134 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .211 ; 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
Muchas gracias de antemano!!
-
Como sabrás el PIC debe ser un PIC16F73-20 y no un PIC16F73-04. Si con un cristal de 4MHz te funciona y con uno de 20MHz no, intenta cambiar los valores de los condensadores, y si esto no funciona prueba a cambiar el cristal de 20MHz por otro o poner uno intermedio de 12MHz o asi.
-
Bueno, creo que ya di con la solución.
El fallo estaba en el programa, no definí donde empezaban mis variables. En el caso del PIC16F73, al ubicarlas las variables a partir de la dirección 0x20, todo va perfectamente.
Un saludo a todos!
-
Pone CBLOCK 0x20 y todas las variables hasta ENDC...SALUDOS !!!
-
Bueno, creo que ya di con la solución.
El fallo estaba en el programa, no definí donde empezaban mis variables. En el caso del PIC16F73, al ubicarlas las variables a partir de la dirección 0x20, todo va perfectamente.
Un saludo a todos!
Jeje, por eso migrar de un pic a otro no es tan simple! si me habrá pasado...