TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Sin71111 en 31 de Julio de 2011, 03:04:53
-
Disculpen aqui les dejo esta pregunta xq no funciona este programa? he puesto la alternativa por imprimir el puerto entero en vez de bit a bit y perfecto pero me quede con la duda xq no funciona....
Aqui les dejo....
Programa que no funciona (al ejecutar bsf y bcf se borra el puerto!)
...
list p=12F629 ; list directive to define processor
#include "p12F629.inc" ; processor specific variable definitions
processor 12F629
;
; __CONFIG _CP_OFF & _WDT_OFF ; palabra de configuración
;ING Luis Arevalo
;***** DEFINICIÓN DE VARIABLES **************************************************
TEMP EQU 0x30
TEMPu EQU 0x31
CONTA EQU 0X21
GPIO EQU 0X05
TRISIO EQU 0X85
CMCON EQU 0X19
;***** CONSTANTES DEL PROGRAMA ***************************************************
;*********************************************************************************
;---------------------------------------------------------------------------------
; Controlador de interrupción
;---------------------------------------------------------------------------------
ORG 0x0000
Goto main
Org 0x0004
GOTO main
;----------------------------------------------------------------------------------
; Subrutina
;----------------------------------------------------------------------------------
;------------------------------------------------------------------------------
; Programa principal
;---------------------------------------------------------------------------------
main bsf 0x03,5 ;banco 1
movlw b'11111100' ;OSCCAL
movwf 0x90
movlw b'00000100'
movwf GPIO
MOVLW 0X07 ;configurando reg CMCON
MOVWF CMCON
MOVWF 0x81 ;configuro el prescaler a max.
CLRW
TY bcf 0x03,5 ;BAnco 0
CLRF 0x01
clrf GPIO
call DELAY_5
BSf GPIO,0 ;CAMBIAR MUERVE EL LITERAL AL PUERTO DESEADO ACTIVO BOMBA
call DELAY_5
BSf GPIO,1 ;CAMBIAR MUERVE EL LITERAL AL PUERTO DESEADO ACTIVO motor
call DELAY_5
Bcf GPIO,0 ;CAMBIAR MUERVE EL LITERAL AL PUERTO DESEADO desACTIVO BOMBA
call DELAY_5
Bcf GPIO,1 ;CAMBIAR MUERVE EL LITERAL AL PUERTO DESEADO desACTIVO motor
call pausa
btfsS GPIO,2
GOTO TY
goto fin
;----------------------------------------------------------------------------------
; Subrutina DE RETARDO
;----------------------------------------------------------------------------------
DELAY_1 bsf 0x03,5 ;SUBRUTINA DE DEMORA DE 1 SEG
movlw b'00010110'
movwf TMR0
bCf 0x03,5
CLRF TMR0
movlw b'01000000'
movwf CONTA ;SE CARGA CONTA CON D'16'
BUCLE1 clrf 0x01
BUCLE2 btfss 0X01,7 ;ESPERA A DESBORDARSE EL TMR0
goto BUCLE2;
decfsz CONTA;
goto BUCLE1;
CLRW
return
pausa
DELAY_5
call DELAY_1;
call DELAY_1;
call DELAY_1;
call DELAY_1;
call DELAY_1;
return
fin
End
...
...
Aun no le encuentro que puede ser me he leido el datash y nada...
-
no veo que hayas configurado que pines son de entrada y cuales de salida con la instruccion:
movlw 0x...
tris GPIO.
-
Es curioso no me compila, pero no me da error, me pone esto:
Debug build of project `C:\Users\tapi\Desktop\PRUEBAS MPLAB\GPIO.ASM.mcp' started.
Language tool versions: mplink.exe v4.35
Preprocessor symbol `__DEBUG' is defined.
Sun Jul 31 19:39:06 2011
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Users\tapi\Desktop\PRUEBAS MPLAB\temp.asm" /q /p12F629 "GPIO.ASM" /l"GPIO.lst" /e"GPIO.err" /d__DEBUG=1
Could not spawn language tool. Check command-line options. (193)
A language-plugin exception occurred and was logged.
----------------------------------------------------------------------
Debug build of project `C:\Users\tapi\Desktop\PRUEBAS MPLAB\GPIO.ASM.mcp' failed.
Language tool versions: mplink.exe v4.35
Preprocessor symbol `__DEBUG' is defined.
Sun Jul 31 19:39:07 2011
----------------------------------------------------------------------
BUILD FAILED
De todos modos creo que el fallo esta en la configuracion del REG. CMCON, porque lo estas configurando en el banco 1, y esta en el banco 0
main bsf 0x03,5 ;banco 1
movlw b'11111100' ;OSCCAL
movwf 0x90
movlw b'00000100'
movwf GPIO
MOVLW 0X07 ;configurando reg CMCON
MOVWF CMCON
MOVWF 0x81 ;configuro el prescaler a max.
CLRW
TY bcf 0x03,5 ;BAnco 0
Si lo pones despues de la linea
TY bcf 0x03,5 ;BAnco 0
Esposible que vaya bien, como no lo puedo simular, prueba tu.
-
Lo mismo me pasó con este PIC y creo no hay otra manera hay que hacerlo como te funcionó.
En mi programa lo tuve que poner asi:
Temporiza
movlw b'00000111'
movwf GPIO
; bsf GPIO,PER
; bsf GPIO,LEDC
; bsf GPIO,LEDP ; Encendemos LEDP
call t500ms ; Retardo de 0.5 seg.
movlw b'00000011'
movwf GPIO
; bcf GPIO,LEDP ; Apagamos LEDP
call t500ms ; Retardo de 0.5 seg.
etc...
-
Lo he simulado, desabilitando el WDT y configurando CMCON en el banco 0 y funciona perfecto. Hace poco en este mismo foro colabore con unos intermitentes para una moto, y usamos este mismo PIC y no dio ese problema, os dejo el enlace donde incluso hay un video de la Harley Davidson funcionando sin ningun problema, incluso unos consejos de Oshielos (fue quien lo grabo) de como se graba el PIC.
http://www.todopic.com.ar/foros/index.php?topic=32966.0
Aqui el codigo que va bien en el MPLAB, ojo solo lo probe en el simulador, pero tal y como estaba no va y asi si va.
list p=12F629 ; list directive to define processor
#include "p12F629.inc" ; processor specific variable definitions
processor 12F629
;
; __CONFIG _CP_OFF & _WDT_OFF ; palabra de configuración
;ING Luis Arevalo
;***** DEFINICIÓN DE VARIABLES **************************************************
TEMP EQU 0x30
TEMPu EQU 0x31
CONTA EQU 0X21
GPIO EQU 0X05
TRISIO EQU 0X85
CMCON EQU 0X19
;***** CONSTANTES DEL PROGRAMA ***************************************************
;*********************************************************************************
;---------------------------------------------------------------------------------
; Controlador de interrupción
;---------------------------------------------------------------------------------
ORG 0x0000
Goto main
Org 0x0004
GOTO main
;----------------------------------------------------------------------------------
; Subrutina
;----------------------------------------------------------------------------------
;------------------------------------------------------------------------------
; Programa principal
;---------------------------------------------------------------------------------
main bsf 0x03,5 ;banco 1
movlw b'11111100' ;OSCCAL
movwf 0x90
movlw b'00000100'
movwf GPIO
MOVLW 0X07 ;configurando reg CMCON
MOVWF 0x81 ;configuro el prescaler a max.
CLRW
TY bcf 0x03,5 ;BAnco 0
MOVLW 0X07 ;configurando reg CMCON
MOVWF CMCON
CLRF 0x01
clrf GPIO
call DELAY_5
BSf GPIO,0 ;CAMBIAR MUERVE EL LITERAL AL PUERTO DESEADO ACTIVO BOMBA
call DELAY_5
BSf GPIO,1 ;CAMBIAR MUERVE EL LITERAL AL PUERTO DESEADO ACTIVO motor
call DELAY_5
Bcf GPIO,0 ;CAMBIAR MUERVE EL LITERAL AL PUERTO DESEADO desACTIVO BOMBA
call DELAY_5
Bcf GPIO,1 ;CAMBIAR MUERVE EL LITERAL AL PUERTO DESEADO desACTIVO motor
call pausa
btfsS GPIO,2
GOTO TY
goto fin
;----------------------------------------------------------------------------------
; Subrutina DE RETARDO
;----------------------------------------------------------------------------------
DELAY_1 bsf 0x03,5 ;SUBRUTINA DE DEMORA DE 1 SEG
movlw b'00010110'
movwf TMR0
bCf 0x03,5
CLRF TMR0
movlw b'01000000'
movwf CONTA ;SE CARGA CONTA CON D'16'
BUCLE1 clrf 0x01
BUCLE2 btfss 0X01,7 ;ESPERA A DESBORDARSE EL TMR0
goto BUCLE2;
decfsz CONTA;
goto BUCLE1;
CLRW
return
pausa
DELAY_5
call DELAY_1;
call DELAY_1;
call DELAY_1;
call DELAY_1;
call DELAY_1;
return
fin
End
Como ves el cambio es configurar CMCON en BANK 0.