TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: aripod en 02 de Septiembre de 2008, 11:23:47
-
Estoy empezando a programar en asm con el 12f675. Simplemente quiero ir prendiendo y apagando un led, entonces hice esto:
list p=12f675
#include <p12f675.inc>
PDel0 equ 0X20
PDel1 equ 0X21
reset org 0x00
goto inicio
inicio
bsf STATUS, 5 ;Muevo al banco 1
clrc GPIO
movlw 0x07
movwf CMCON
bcf STATUS, 5; Vuelvo al banco 0.
clrf ANSEL
movlw 0b00000000
movwf TRISIO
main
bsf GPIO, 1
call demora
bcf GPIO, 1
call demora
goto main
demora movlw .239 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .232 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3 clrwdt ; 1 ciclo delay
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL4 goto PDelL5 ; 2 ciclos delay
PDelL5 goto PDelL6 ; 2 ciclos delay
PDelL6 goto PDelL7 ; 2 ciclos delay
PDelL7 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
end
Cuando lo pongo en el proteus, no pasa nada. El led se mantiene apagado....
ps: No se porque no sale tabulado el codigo....
-
espero te sirva
-
No paso nada. SIgue apagado el led...
-
No será mucha demora? recuerda que el proteus no simula en tiempo real, es un poco mas lento, te fijaste si el pin es el correcto?
espero lo puedas solucionar!! saludos!!
Agrego: te felicito por el título, siempre hay que preguntarse a uno mismo "que hice mal" cuando las cosas fallan, muy buena actitud.
-
No será mucha demora? recuerda que el proteus no simula en tiempo real, es un poco mas lento, te fijaste si el pin es el correcto?
espero lo puedas solucionar!! saludos!!
Agrego: te felicito por el título, siempre hay que preguntarse a uno mismo "que hice mal" cuando las cosas fallan, muy buena actitud.
Tengo hecho el mismo codigo para el 16f84 con esa demora (500ms) y lo simula bien. En el codigo cambie el pin, puse el 0 y comiple de nuevo, conecte al pin GP0 y sigue sin prenderse.
Gracias por lo del titulo, pero es asi,,,hay algo mal que hice :D.
-
inicio
bsf STATUS, 5 ;Muevo al banco 1<------------ Estas en banco 1 , pero el registro CMCON esta en el 0
clrc GPIO <-------------CLRF GPIO
movlw 0x07 <-----------
movwf CMCON <-------------------
bcf STATUS, 5; Vuelvo al banco 0.
clrf ANSEL <-------- ANSEL esta en el banco 1 , y tu lo quieres manipular desde el 0
movlw 0b00000000
movwf TRISIO
No veo el config_
Que tipo de oscilador usas?
Si es interno abra que calibrarlo, en proteus asegura poner el valor de oscilador
Prueba eso qu emarque arriba , sino checa en este mismo foro algunos ejemplos qu epuse de estos uCros.
Por cierto el programa que subio Johuermo deberia ir bien! Revisa la configuracion del proteus
Saludos!
-
Acomode el tema de los bancos y unos errores que tenia en las configuraciones de salidas digitales y tambien configure el oscilador interno....y quedo esto, que sigue sin andar:
list p=12f675
#include <p12f675.inc>
__CONFIG _CP_ON & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_OFF & _INTRC_OSC_NOCLKOUT ; la palabra de confguracion
PDel0 equ 0X20
PDel1 equ 0X21
reset org 0x00
goto inicio
inicio
bcf STATUS, RP0 ;Muevo al banco 0
clrc GPIO
movlw 0x00 ;Pines 0 al 5 Digitales.
movwf CMCON
bsf STATUS, RP0; Muevo al banco 1.
clrf ANSEL
movlw 0x00 ;Todos los pins son salidas.
movwf TRISIO
movlw 0b11111100 ;Se configura el Oscilador interno para la frec. maxima (4MHz)
movwf OSCCAL
bcf STATUS, 5 ;Vuelvo al banco 0
main
bsf GPIO, 1
call demora
bcf GPIO, 1
call demora
goto main
demora movlw .239 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .232 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3 clrwdt ; 1 ciclo delay
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL4 goto PDelL5 ; 2 ciclos delay
PDelL5 goto PDelL6 ; 2 ciclos delay
PDelL6 goto PDelL7 ; 2 ciclos delay
PDelL7 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
end
ps: Pongo el .asm, .hex y .dsn
-
JEJEJE
HASTA QUE POR FIN :lol:
ESPERO QUE TE SIRVA
__CONFIG _CP_ON & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_ON & _PWRTE_OFF & _INTRC_OSC_NOCLKOUT
-
No pasa nada....sigue sin prenderse el led......
-
Disculpa es que no alcance a pegar todo.
Copia la carpeta en C:\
jose
-
Disculpa es que no alcance a pegar todo.
Copia la carpeta en C:\
jose
Gracias al archivo pude detectar el error que tenia en mi codigo. Muchisimas gracias por la ayuda, una vez mas.
Ahora, con el tema de no perder el valor del oscilador local. Cuando compre el pic, tengo que leer el valor de la ultima posicion y tenerlo guardado en algun lugar para copiarlo cada vez que borre/grabe el pic?
Y para usarlo, no tiene que tene el codigo:
call 3FFh
movwf OSCCALGracias de nuevo!.
-
Al final no pusiste cual fue el error, así les sirve a todos los compañeros como referencia.
saludos
-
Estaba definiendo algunos registros mientra estaba en el banco 0 que eran del banco 1 y viceversa....