Autor Tema: Paginacion de memoria y call en 16F877  (Leído 2705 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado FER_CBA

  • PIC10
  • *
  • Mensajes: 13
Paginacion de memoria y call en 16F877
« en: 12 de Octubre de 2007, 23:24:50 »
Hola amigos, en esta ocasion los molesto porque estoy comensando a usar el pic 16F877 (no el A) y entiendo que la memoria de programa esta dividida en 4 paginas, pero no comprendo como saber cuando ocupe los 2k de memoria de una pagina para cambiar a otra, o como saber en que pagina de memoria se encuentra. Yo utilizo el assembler y el mplab.
El otro problema q tengo es el siguiente: configure el PORTA,0 como salida y el PORTA,1 como entrada, coloque un led y un pulsador respectivamente y logre q mientras tengo el boton apretado me de salida por el led, pero cuando pretendo q al pulsar temporize y aunque suelte el boton permanezca encendido el led hasta acabar el tiempo, 1 seg, no funciona. Lo extraño es q a la rutina que temporiza la llama bien mediante un call (coloque el encendido del led dentro), pero apenas suelto el pulsador se apaga, no temporiza. Pienso q puede estar relacionado con el tema anterior, q no sepa volver de la llamada. pronto voy a tratar de pegar el pedacito de programa,m ientras espero algunas guias para este problemita. muchas gracias de antemano.

PD: El micro que uso es un 16F877-20/P, y esta con un cristal de 4Mhz, esta configurado en modo XT, saben si esta bien asi, si puede usarse con ese cristal? gracias
« Última modificación: 13 de Octubre de 2007, 10:57:42 por FER_CBA »

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Paginacion de memoria y call en 16F877
« Respuesta #1 en: 13 de Octubre de 2007, 16:10:36 »
Hola compañero:

Lo mejor para ayudarte de una manera mas eficiente es que coloques el programa que te da fallos y asi poder ayudarte mejor.
En cuanto a la configuracion del oscilador pienso que está correcta pues el-20/p te indica la frecuencia máxima que puedes utilizar para este micro
Fermin
Todos los días se aprende algo nuevo.

Desconectado FER_CBA

  • PIC10
  • *
  • Mensajes: 13
Re: Paginacion de memoria y call en 16F877
« Respuesta #2 en: 14 de Octubre de 2007, 17:25:06 »
Amigos les dejo el programita con el que intento iniciarme en el 16F877:      

                                LIST      p=16F877
      #INCLUDE   <P16F877.INC>
      __CONFIG   3FBA   
      RADIX      HEX
      
ADCON0    EQU 1FH       ;Declaracion de registros
ADCON1    EQU 9FH
PORTA    EQU 05H
TRISA    EQU 85H
ESTATUS EQU 03H
PORTB    EQU 06H
TRISB    EQU 86H
PORTC    EQU 07H
TRISC    EQU 87H
PORTD    EQU 08H
TRISD    EQU 88H
ADRESH    EQU 1EH
ADRESL    EQU 9EH

      ORG      0X00         ;Direccion de inicio tras reset
      goto   INICIO         ;
      ORG      0x04         ;Direccion de interrupcion

PDel0   equ      0x20
PDel1   equ      0x21
PDel2   equ      0x22
CounterD   equ      0x23
;**************************************** INICIO ***********************************;            
INICIO   bcf      STATUS,RP1      ;Banco 1
      bsf      STATUS,RP0      ;Banco 1
      movlw   b'10000000'      ;
      movwf   OPTION_REG      ;Configuro el registro OPTION
      movlw   0x00         ;
      movwf   INTCON         ;Configuro el registro INTCON
      movwf   PIE1         ;Configuro PIE1 (bit 0: habilita int de TMR0)
      movwf   PIE2         ;Configuro el registro PIE2
      movwf   ADCON0         ;Configuro el registro ADCON0
      movlw   b'00000110'      ;
      movwf   ADCON1         ;Configuro el registro ADCON1
      movlw   b'00000010'      ;
      movwf   TRISA         ;Configuro el puerto A como salida
      bcf      STATUS,RP0      ;Banco 0
      clrf   PORTA

NO      btfss   PORTA,1         ;
      goto   NO
      bsf   PORTA,0
      call   DEMORA
      bcf   PORTA,0
      goto   NO
      
;-------------------------------------------------------------
; Code generated by PDEL  ver 1.0  on 10/13/07 at 12:14:01 PM
; Description: Waits 5000000 cycles
;-------------------------------------------------------------
DEMORA  movlw     .165      ; 1 set number of repetitions (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .41       ; 1 set number of repetitions (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .147      ; 1 set number of repetitions (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 cycle delay
        decfsz    PDel2, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) is the time over? (C)
        goto      PLoop0    ; 2 no, loop
        return              ; 2+2 Done
;-------------------------------------------------------------

      END