Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

04/04/2009 #1

Avatar de Tomasito

Pasar ASM de PIC10F202 a PIC12C508
Hola, quisiera ver si me pueden dar una mano con esto.
Pasa que quiero armar una cosa que está echa para el PIC10F202, pero no lo consigo por acá, y si lo mando a comprar a capital me sale demasiado caro. Lo que si conseguí fueron los PIC12C508.

Según leí por ahí los 10F son de la familia de los 12C, asique no deberia ser mucho problema portarlo el programa, además es simple lo que hace, pero yo no sé nada de assembler.

Asique pido si hay algún alma caritativa que me pudiese dar una mano con esto, necesitaría poder usarlo en un PIC12C508 (O de ultima, un 12F629).

Les dejo el código en assembler:
Código:
 LIST R=DEC

 INCLUDE "p10f202.inc"

 

 errorlevel -302                ; Register not in bank 0 warning

 

 __CONFIG _CP_OFF & _MCLRE_ON & _WDT_OFF





d1		EQU	0x10

d2		EQU	0x11

d3		EQU	0x12

LFSR	EQU	0x13

count	EQU	0x14





 PAGE

 

 	org      0

  	nop



main:

	clrf	GPIO

	movlw	0x0

	tris	GPIO



	clrf	LFSR

	

MainLoop:	

	call	Speaker					; Gung ho!

		

	;*** Get new LFSR

	movlw	0x0B					; We will add 11 each time	

	addwf	LFSR, f					;   to the LFSR

	movlw	b'00001111'				; Make it 4 bit

	andwf	LFSR, w				

	movwf	count					; And just use that for count variable

	incf	count, f				; Add a couple so they're not too

	incf	count, f				;   close together

	incf	count, f

	

WaitLoop:

	call	MinDelay

	decfsz	count, f				; we will loop LFSR times throughj

  	  goto	WaitLoop	



	goto	MainLoop

	

	

;*****************************************	

;*****  Play speaker for .25 seconds *****

;*****************************************



Speaker:

	clrf	count					; Set counter

	movlw	0x0B

	movwf	d2

	

SpeakerLoop	

	bsf		GPIO, 0					; Turn on Speaker

	movlw	0x10					; Delay

	movwf	d1

Delay_0:

	decfsz	d1, f

	  goto	Delay_0

	

	bcf		GPIO, 0					; Turn speaker off

	movlw	0x10					; Delay

	movwf	d1

Delay_1

	decfsz	d1, f

	  goto	Delay_1    

	  

	decfsz	count, f				; Are we done with loop yet?

	  goto	SpeakerLoop       		;   no, so keep going

 	decfsz	d2, f

 	  goto	SpeakerLoop  

	return							;   yes, so return





;*******************************************

;************ 1 minute delay  **************

;*******************************************



MinDelay:	

	movlw	0xFF

	movwf	d1

	movlw	0xFF

	movwf	d2

	movlw	0x83

	movwf	d3

Delay_2:

	decfsz	d1, f

	  goto	$+2

	decfsz	d2, f

	  goto	$+2

	decfsz	d3, f

	  goto	Delay_2

	

	return

	

	

	

	

	end

PD: Si les interesa, esto es lo que quiero armar: http://www.r4nd0m.com/SoundAnnoyer.html

Desde ya, muchas gracias. Salu2!
04/05/2009 #2

Avatar de ivan_mzr

El problema solo es el return y el include, aqui no tengo mplab llegando a casa lo reviso... tengo dudas del _CONFIG ya que no me acuerdo de todos los datos.

Código:
     LIST R=DEC

     INCLUDE "p12c508.inc"

     

     errorlevel -302                ; Register not in bank 0 warning

     

     __CONFIG _CP_OFF & _MCLRE_ON & _WDT_OFF





    d1      EQU   0x10

    d2      EQU   0x11

    d3      EQU   0x12

    LFSR   EQU   0x13

    count   EQU   0x14





     PAGE

     

        org      0

         nop



    main:

       clrf   GPIO

       movlw   0x0

       tris   GPIO



       clrf   LFSR

       

    MainLoop:   

       call   Speaker               ; Gung ho!

          

       ;*** Get new LFSR

       movlw   0x0B               ; We will add 11 each time   

       addwf   LFSR, f               ;   to the LFSR

       movlw   b'00001111'            ; Make it 4 bit

       andwf   LFSR, w            

       movwf   count               ; And just use that for count variable

       incf   count, f            ; Add a couple so they're not too

       incf   count, f            ;   close together

       incf   count, f

       

    WaitLoop:

       call   MinDelay

       decfsz   count, f            ; we will loop LFSR times throughj

           goto   WaitLoop   



       goto   MainLoop

       

       

    ;*****************************************   

    ;*****  Play speaker for .25 seconds *****

    ;*****************************************



    Speaker:

       clrf   count               ; Set counter

       movlw   0x0B

       movwf   d2

       

    SpeakerLoop   

       bsf      GPIO, 0               ; Turn on Speaker

       movlw   0x10               ; Delay

       movwf   d1

    Delay_0:

       decfsz   d1, f

         goto   Delay_0

       

       bcf      GPIO, 0               ; Turn speaker off

       movlw   0x10               ; Delay

       movwf   d1

    Delay_1

       decfsz   d1, f

         goto   Delay_1   

        

       decfsz   count, f            ; Are we done with loop yet?

         goto   SpeakerLoop             ;   no, so keep going

        decfsz   d2, f

          goto   SpeakerLoop 

       retlw                   ;   yes, so return





    ;*******************************************

    ;************ 1 minute delay  **************

    ;*******************************************



    MinDelay:   

       movlw   0xFF

       movwf   d1

       movlw   0xFF

       movwf   d2

       movlw   0x83

       movwf   d3

    Delay_2:

       decfsz   d1, f

         goto   $+2

       decfsz   d2, f

         goto   $+2

       decfsz   d3, f

         goto   Delay_2

       

       retlw

       

       

       

       

       end
31/05/2009 #3


Hola ivan_mzr lo que tienes que hacer es comparar las dos memorias de programas, tanto del pic 12 C508 y 12f629 y ubicar los registro de programaciòn donde correspondan, de tal manera se hace casi transparente el uso de tu programa tanto en C508 como en F629.

A mi me paso algo parecido, hice un programa en un pic 16F84 y funcionaba perfectamente, luego lo lleve tal cual a un pic 16f874 y no me funciono, despues de tanto corregir el programa mas de 30 veces, me di cuenta que tenia que cambiar los registro de configuraciòn, ya que cambian cuando es un pic de mayores prestaciones
01/06/2009 #4

Avatar de ivan_mzr

Que hay!, con ivan esta bien... Parece ser que puedes usar el registro de proposito general 10h si es asi entonces no hay que cambiar los registro. Saludos!
Imágenes Adjuntas
Tipo de Archivo: gif 12c508_443.gif (12,4 KB (Kilobytes), 18 visitas)
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.