Autor Tema: Problemas de migración del 16F84 al 16F628  (Leído 2738 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado pablocabrera

  • PIC10
  • *
  • Mensajes: 20
Problemas de migración del 16F84 al 16F628
« en: 16 de Febrero de 2010, 03:46:05 »
Hola amigos este codigo lo comense en base a uno para el 16F84 y ahora lo quiero para el 16F628A, al momento de compilarlo no me da errores ni warning, y al simularlo en proteus no pasa nada, no se cual sera el problema he leido todos los tutoriales y he rebisado los codigos que he encontrado si me pueden ayudar. Gracias...

el codigo y adjunto la imagen de proteus...

Código: [Seleccionar]
; **** Encabezado ****
 list p=16F628A   ; Microcontrolador utilizado.-
 #include P16F628A.inc    ; Definicion de registros SFR.-
 __CONFIG   _INTOSC_OSC_NOCLKOUT & _PWRTE_OFF & _WDT_OFF & _CP_OFF & _MCLRE_ON & _BOREN_OFF & _LVP_OFF & _DATA_CP_OFF
;**** Definicion de Variables ****
CBLOCK 0x20      ; En esta posicion se declaran los registros de usuario (GPR)
estado
trisa
trisb      
porta
portb
RET
RET1
RET2
PDel0  
PDel1
llaves

endc

;**** Inicio del Microcontrolador ****
     ORG     0x00
     GOTO    inicio
     ORG     0x04


inicio movlw 0x07
movwf CMCON
BCF     STATUS, RP0 ; cambio al banco 1 del pic
        MOVLW   b'00011111'
        MOVWF   trisa ; Asigna al puerto A como entrada
        MOVLW   0x00
        MOVWF   trisb ; y Al puerto B como salida
BSF     STATUS, RP0 ; Regresa al banco 0
        CLRF    porta ; limpia el puerto A
        CLRF    portb ; limpia el puerto B


swich   MOVF porta,0 ; carga w con el puerto A
        ANDLW   b'00011111' ; retiene los 4 bits de interes (las llaves)
MOVWF   llaves ; y los guarda en llaves
        XORLW   b'00000001' ; verifica si es el primer efecto
        BTFSC   estado,2 ; si es así
        CALL    estrobo ; lo llama y lo ejecuta
        MOVF    llaves,0 ; sino, carga llaves en w
        XORLW   b'00000010' ; y verifica si es el segundo efecto
        BTFSC   estado,2 ; si es así
        CALL    baliza ; lo llama y lo ejecuta
        MOVF    llaves,0 ; y así con los demás
        XORLW   b'00000100' ; ya me aburrí
        BTFSC   estado,2 ; como verás el resto es lo mismo
        CALL    der
        MOVF    llaves,0
XORLW b'00001000'
BTFSC estado,2
CALL izq
MOVF llaves,0
XORLW b'00000011'
BTFSC estado,2
CALL aeb
MOVF llaves,0
XORLW   b'00000101'
        BTFSC   estado,2
        CALL    aed
        MOVF    llaves,0
        XORLW   b'00001001'
        BTFSC   estado,2
        CALL    aei
        MOVF    llaves,0
        XORLW   b'00001011'
        BTFSC   estado,2
        CALL    aeib
        MOVF    llaves,0
XORLW b'00000111'
BTFSC estado,2
CALL aedb
MOVF llaves,0
GOTO    swich
;======================== Efectos =========================


estrobo      
MOVLW B'00000001'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
CALL  DEMORA1
MOVLW B'00000001'
        MOVWF PORTB
        CALL  DELAY
MOVLW B'00000001'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
CALL  DEMORA1
MOVLW B'00000001'
        MOVWF PORTB
        CALL  DELAY

MOVLW B'00000010'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA1
MOVLW B'00000010'
        MOVWF PORTB
        CALL  DELAY
MOVLW B'00000010'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA1
MOVLW B'00000010'
        MOVWF PORTB
        CALL  DELAY


baliza
MOVLW b'00000111'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon
der
MOVLW b'00000101'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon

izq    
MOVLW b'00000110'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon

aeb
MOVLW b'00000111'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon
aed
MOVLW b'00000101'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon

aei
MOVLW b'00000110'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon

aeib
MOVLW b'00000111'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon

aedb
MOVLW b'00000111'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon


;**********RUTINA DE RETARDO***********

clokon MOVLW H'2'
MOVWF RET
LOOP2 MOVLW H'90'
MOVWF RET1
LOOP1 MOVLW H'90'
MOVWF RET2
LOOP DECFSZ RET2,F
GOTO LOOP
DECFSZ RET1,F
GOTO LOOP1
DECFSZ RET,F
GOTO LOOP2
RETURN
;=======================================
DEMORA      movlw     .090    
            movwf     PDel0    
PLoop1      movlw     .090      
            movwf     PDel1    
PLoop2      clrwdt              
PDelL1      goto      PDelL2        
PDelL2      goto      PDelL3        
PDelL3      clrwdt              
            decfsz    PDel1,  1
            goto      PLoop2  
            decfsz    PDel0,  1
            goto      PLoop1    
PDelL4      goto      PDelL5        
PDelL5      goto  PDelL6        
PDelL6      goto      PDelL7        
PDelL7      clrwdt              
            return    
;=======================================
DEMORA1      movlw     .050    
            movwf     PDel0    
PLoop12      movlw     .050      
            movwf     PDel1    
PLoop21      clrwdt              
PDelL11      goto      PDelL22        
PDelL22      goto      PDelL33        
PDelL33      clrwdt              
            decfsz    PDel1,  1
            goto      PLoop2  
            decfsz    PDel0,  1
            goto      PLoop12    
PDelL44      goto      PDelL55        
PDelL55      goto  PDelL66        
PDelL66      goto      PDelL77        
PDelL77      clrwdt              
            return    
;======================================
DELAY MOVLW h'2'
MOVWF RET
LOOP21 MOVLW h'80'
MOVWF RET1
LOOP12 MOVLW h'80'
MOVWF RET2
BLOOP DECFSZ RET2,f
GOTO BLOOP
DECFSZ RET1,f
GOTO LOOP12
DECFSZ RET,f
GOTO LOOP21
return

END
« Última modificación: 16 de Febrero de 2010, 08:23:49 por Suky, Razón: El titulo no informa el problema.... Leer Normas del Foro... »

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Problemas de migración del 16F84 al 16F628
« Respuesta #1 en: 16 de Febrero de 2010, 08:55:45 »
Código: [Seleccionar]
; **** Encabezado ****
 list p=16F628A   ; Microcontrolador utilizado.-
 #include P16F628A.inc    ; Definicion de registros SFR.-
 __CONFIG   _INTOSC_OSC_NOCLKOUT & _PWRTE_OFF & _WDT_OFF & _CP_OFF & _MCLRE_ON & _BOREN_OFF & _LVP_OFF & _DATA_CP_OFF
;**** Definicion de Variables ****
CBLOCK 0x20      ; En esta posicion se declaran los registros de usuario (GPR)
;STATUS este registro esta declarado en el .inc
;TRISA este registro esta declarado en el .inc
; TRISB este registro esta declarado en el .inc      
; PARTA este registro esta declarado en el .inc
; PORTC este registro esta declarado en el .inc
RET
RET1
RET2
PDel0   
PDel1
llaves

endc

;**** Inicio del Microcontrolador ****
     ORG     0x00
     GOTO    inicio
     ORG     0x04


inicio movlw 0x07
movwf CMCON
BsF     STATUS, RP0 ; cambio al banco 1 del pic
        MOVLW   b'00011111'
        MOVWF   TRISA ; Asigna al puerto A como entrada
        MOVLW   0x00
        MOVWF   TRISB ; y Al puerto B como salida
BcF     STATUS, RP0 ; Regresa al banco 0
        CLRF    PORTA ; limpia el puerto A
        CLRF    PORTB ; limpia el puerto B


swich   MOVF PORTA,0 ; carga w con el puerto A
        ANDLW   b'00011111' ; retiene los 4 bits de interes (las llaves)
MOVWF   llaves ; y los guarda en llaves
        XORLW   b'00000001' ; verifica si es el primer efecto
        BTFSC   STATUS,2 ; si es así
        CALL    estrobo ; lo llama y lo ejecuta
        MOVF    llaves,0 ; sino, carga llaves en w
        XORLW   b'00000010' ; y verifica si es el segundo efecto
        BTFSC   STATUS,2 ; si es así
        CALL    baliza ; lo llama y lo ejecuta
        MOVF    llaves,0 ; y así con los demás
        XORLW   b'00000100' ; ya me aburrí
        BTFSC   STATUS,2 ; como verás el resto es lo mismo
        CALL    der
        MOVF    llaves,0
XORLW b'00001000'
BTFSC STATUS,2
CALL izq
MOVF llaves,0
XORLW b'00000011'
BTFSC STATUS,2
CALL aeb
MOVF llaves,0
XORLW   b'00000101'
        BTFSC   STATUS,2
        CALL    aed
        MOVF    llaves,0
        XORLW   b'00001001'
        BTFSC   STATUS,2
        CALL    aei
        MOVF    llaves,0
        XORLW   b'00001011'
        BTFSC   STATUS,2
        CALL    aeib
        MOVF    llaves,0
XORLW b'00000111'
BTFSC STATUS,2
CALL aedb
MOVF llaves,0
GOTO    swich
;======================== Efectos =========================


estrobo        
MOVLW B'00000001'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
CALL  DEMORA1
MOVLW B'00000001'
        MOVWF PORTB
        CALL  DELAY
MOVLW B'00000001'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
CALL  DEMORA1
MOVLW B'00000001'
        MOVWF PORTB
        CALL  DELAY

MOVLW B'00000010'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA1
MOVLW B'00000010'
        MOVWF PORTB
        CALL  DELAY
MOVLW B'00000010'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA1
MOVLW B'00000010'
        MOVWF PORTB
        CALL  DELAY


baliza
MOVLW b'00000111'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon
der
MOVLW b'00000101'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon

izq    
MOVLW b'00000110'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon

aeb
MOVLW b'00000111'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon
aed
MOVLW b'00000101'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon

aei
MOVLW b'00000110'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon

aeib
MOVLW b'00000111'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon

aedb
MOVLW b'00000111'
MOVWF PORTB
CALL clokon
MOVLW b'00000000'
MOVWF PORTB
CALL clokon


;**********RUTINA DE RETARDO***********

clokon MOVLW H'2'
MOVWF RET
LOOP2 MOVLW H'90'
MOVWF RET1
LOOP1 MOVLW H'90'
MOVWF RET2
LOOP DECFSZ RET2,F
GOTO LOOP
DECFSZ RET1,F
GOTO LOOP1
DECFSZ RET,F
GOTO LOOP2
RETURN
;=======================================
DEMORA      movlw     .090     
            movwf     PDel0   
PLoop1      movlw     .090     
            movwf     PDel1   
PLoop2      clrwdt             
PDelL1      goto      PDelL2         
PDelL2      goto      PDelL3         
PDelL3      clrwdt             
            decfsz    PDel1,  1
            goto      PLoop2   
            decfsz    PDel0,  1
            goto      PLoop1   
PDelL4      goto      PDelL5         
PDelL5      goto   PDelL6         
PDelL6      goto      PDelL7         
PDelL7      clrwdt             
            return   
;=======================================
DEMORA1      movlw     .050     
            movwf     PDel0   
PLoop12      movlw     .050     
            movwf     PDel1   
PLoop21      clrwdt             
PDelL11      goto      PDelL22         
PDelL22      goto      PDelL33         
PDelL33      clrwdt             
            decfsz    PDel1,  1
            goto      PLoop2   
            decfsz    PDel0,  1
            goto      PLoop12   
PDelL44      goto      PDelL55         
PDelL55      goto   PDelL66         
PDelL66      goto      PDelL77         
PDelL77      clrwdt             
            return   
;======================================
DELAY MOVLW h'2'
MOVWF RET
LOOP21 MOVLW h'80'
MOVWF RET1
LOOP12 MOVLW h'80'
MOVWF RET2
BLOOP DECFSZ RET2,f
GOTO BLOOP
DECFSZ RET1,f
GOTO LOOP12
DECFSZ RET,f
GOTO LOOP21
return

END


Le hice algunas modificaciones al código para que funcione:

los registros que habías declarado:
estado
trisa
trisb
porta
portb
en realidad son los registros del microcontrolador y ya están declarados en el .inc (las direcciones que usaste no son las correctas)
solo debes usarlos en mayúscula
estado->STATUS
trisa->TRISA
trisb->TRISB
porta->PORTA
portb->PORTB


los registros TRISA y TRISB se encuentran en el banco 1.
debes seleccionar este banco colocando
Código: [Seleccionar]
bsf STATUS,RP0 y no bcf ....


los registros PORTA y PORTB
se encuentran en el banco 0.
debes seleccionar este banco colocando
Código: [Seleccionar]
bcf STATUS,RP0 y no bsf ....



En el esquemático, el pin MCLR debe estar en 1 para que el micro salga del reset y no a masa.

Con estas modificaciones funciona.

Desconectado pablocabrera

  • PIC10
  • *
  • Mensajes: 20
Re: Problemas de migración del 16F84 al 16F628
« Respuesta #2 en: 16 de Febrero de 2010, 19:41:49 »
Amigo pablo te pasaste mira fue una torpesa lo del pin mclr, muchas gracias...


 

anything