Adaptar un 16F84A a otro 16F628A

Hola:

Tengo en mente pasar el código de abajo de un PIC a otro PIC diferente para aprender bien las adaptaciones. Me gustaría aquellas personas que saben adaptar muy bien el código mostrado abajo en ensamblador (ASM) a otro PIC. Al menos los que están en azúl me interesa verlo aquí adaptado.

Por ejemplo:
16F84A a 16F628A
16F84A a 16F88
16F84A a 16F876A
16F84A a 16F886
16F84A a 16F877A
16F84A a 16F887
16F84A a 18F1220
16F84A a 18F2550
16F84A a 18F4550

El código a adaptar:
Código:
;************************************** Ensam_03.asm ************************************
;
; Por el Puerto B se obtiene el dato de las cinco líneas del Puerto A al que está conectado
; un array de interruptores. Por ejemplo, si por el Puerto A se introduce "---11001", por
; el Puerto B aparecerá "xxx11001" (el valor de las tres líneas superiores no importa).
;
; ZONA DE DATOS **********************************************************************

	__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC	; Configuración para el
															; grabador.
	LIST	P=16F84A			; Procesador.
	INCLUDE <P16F84A.INC>		; Definición de los operandos utilizados.

; ZONA DE CÓDIGOS ********************************************************************

	ORG 	0					; El programa comienza en la dirección 0 de memoria de
Inicio							; programa.
	bsf		STATUS,RP0			; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
	clrf	TRISB				; Las líneas del Puerto B se configuran como salidas.
	movlw	b'11111111'
	movwf	TRISA				; Las líneas del Puerto A se configuran como entradas.
	bcf		STATUS,RP0			; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
Principal
	movf 	PORTA,W				; Lee el Puerto A.
	movwf	PORTB				; El contenido de W se visualiza por el Puerto B.
	goto 	Principal			; Crea un bucle cerrado.

	END							; Fin del programa.

Espero que no sea complicado, sobre todo adaptarlo del 16F al 18F en ASM.

He intentado encontrar algo por aquí en esta web muy curiosa http://www.pic18f.com/

Un cordial saludo.
 
Hola Meta

¿Te has preguntado que es lo que estás pidiendo?, ¿Has revisado los datasheet de ambos pic?

Para ambas respuestas, parece que no.

Es totalmente factible mudar ese programa a cualquier familia de PIC. Solo deberás observar como cambiar de banco en el pic 16F o 18F. Verás que se utiliza el RP1 del registro STATUS. También tendras que desactivar las entradas analógicas y activarlas en digital.

Por lo demás, no hace falta tocar nada.
 
Hola Leon Elec:

Ver la diferencia de configuración en los __CONFIG, como configurar las mismas patas en digital como debe tener el mismo funcionamiento del 16F84A. No entiendo mucho las hoja de datos en Ïnglés, ahí e problema.

En el 16F88, página 13/228 quizás sea lo que me dices. Parece que se llama ANSEL, es decir, que configuro el puerto a digital, 121/228. No veo ejemplo en ASM (o estoy ciego) sobre configurar este PIC. Ahora no puedo hacer prueba con el MPLAB porque estoy usando el openSUSE 11.0, después investigaré a ver como es la adaptación. como nunca lo he hecho, me parece complicado aunque veo que lo ves fácil.

16F84A
16F628A
16F88
18F1220

Un especial:
12F519

Un cordial saludo.
 
Asi tengo la mayoria de los inicios de mis programas, espero te sirva


Código:
; Thermomether and clock using PIC16F628 , DS1307 and DS1820


	list      p=16f628A            ; list directive to define processor
	#include <p16f628A.inc>        ; processor specific variable definitions
	ERRORLEVEL	0,	-302			;suppress bank selection messages

	__CONFIG _CP_OFF & _WDT_OFF & _BOREN_OFF & _PWRTE_OFF & _MCLRE_OFF & _LVP_OFF & _INTOSC_OSC_NOCLKOUT

	cblock 	0x20 	;start of general purpose registers
	  TMP			; temporal register
	  TMP2			; temporal register
	endc


   
;===========================  MAIN  =========================
;==========================  PROGRAM  =======================

 	org     0x000             ; processor reset vector
Main:

	movwf	CMCON			;turn comparators off (make it like a 16F84)
  
;------ Ports configuration

   	bsf 	STATUS, RP0		;select bank 1
   	movlw 	b'00000001'		;set PortB <1:7> all outputs, PB0 as input
   	movwf 	TRISB
	movlw 	b'11100000'		
	movwf	TRISA			;set PortA <0:3> outputs, <5:7> inputs
	bcf		STATUS,RP0		; select bank 0

	clrf	PORTA
	
        etc
       etc
       etc

      END
 
Atrás
Arriba