Sida 1 av 1

fungerar samma program på olika versioner av PIC12F?

Postat: 20 mars 2008, 16:45:55
av m4rtin
Hej. Jag har skrivit ihop ett enkelt program och använt till PIC12F675. Jag undrar om man bara kan lägga in det i PIC12F508 och det fungerar direkt?

Skickar med koden, som ni ser används inga "speciall"funktioner som är specifik för PIC12F675

Kod: Markera allt

;Pic12F675, Diod lyser ett par sek, sen sleep. Vid rising edge på
;gp2 startar kretsen igen.  
;****************************************************************
	List	p=12f675
	include <p12f675.inc>
	__CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_ON &_PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT

tid1	equ	0x21		
tid2	equ	0x22
tid3	equ	0x23

	org	0x00			;Startar programmet på adress Hex 00
;****************************************************************

	BANKSEL	TRISIO		;Öppnar Bank 1
	movlw	b'00000000'
	movwf	ANSEL		;Alla portar är digitala(ans0-3=bit0-3)
	movlw	b'00000100'	
	movwf	TRISIO		;Alla portar är utgångar utom gp2 (och gp3..)

	BANKSEL	GPIO		;Öppnar Bank 0
	clrf	GPIO		;init GPIO
	bcf		ADCON0,ADON	;A/D omvandlare avstängd.
	movlw	b'00000111'
	movwf	CMCON		;Comparator OFF



;-----------------------Fixar pull-up--------------------
	bcf		OPTION_REG, NOT_GPPU	;GPIO pullup's enabel  
	movlw	b'00000001'	
	movwf	WPU			;Sätter Pull-up enabled på GP0

;-----------------------Fixar wake on pinchange--------------------
	bsf		INTCON, INTE		;Enables the GP2/INT external interrupt
;	bsf		INTCON, GPIE		;Enables the GPIO port change interrupt

	bsf		OPTION_REG, INTEDG	;Interrupt on rising edge of GP2/INT 


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


	clrw
	movwf	tid1
	movwf	tid2
	movwf	tid3


loop
	BTFSS	GPIO,2		;se till att den bara reagerar på possitiv flank
	
	goto 	sov

	bsf		GPIO,5		;etta ut på GP5
	call 	timer
	bcf		GPIO,5		;nolla ut på GP5
sov
	SLEEP
	
	bcf		INTCON, INTF	;clear rising_edge biten igen

	call 	timer2			;Fördöjning mot knappstuds
	goto 	loop
	



;--------------fördröjning ~4 sek----------------------
timer
	movlw	b'11111111'
	movwf	tid1
loop2	
	movlw	b'11111111'				
	movwf	tid2
loop1	
	movlw	b'00001000'				
	movwf	tid3
loop0

	decfsz	tid3
	goto	loop0

	decfsz	tid2
	goto	loop1
	
	decfsz	tid1
	goto	loop2

	
	return

;--------------fördröjning ~ sek----------------------


timer2
	movlw	b'11111111'
	movwf	tid1
loop4	
	decfsz	tid1
	goto	loop4

	return



	end

Postat: 20 mars 2008, 17:01:03
av sodjan
Nej.
Det är ju uppenbart om man kollar databladen att de har olika
arkitektur. 508'an är "Base Line" och 675'an är "Midrange". Både
är PIC'ar, men tillräckligt olika för att inte köra samma kod rakt av.
508'an har ett 12-bitars programord (i flash) och 675'an har 14 bitar.
Det är också en del skillnader i vilka instruktioner de stödjer.

Läs på lite, så ser du skillnaderna.

Dock, det är naturligtsvis inte omöjligt att *skriva om* koden för en 508'a,
men det verkar väldigt onödigt. Försöker du spara några kronor ?

Generellt sett bör man undvika "Base Line" om det inte är alldeles
nödvändigt att använda den, t.ex support av gamla produkter.

Postat: 20 mars 2008, 17:18:07
av m4rtin
Okej. Håller på med ett prototypbygge, så ville använda billigaste möjliga komponenter. Men får köra vidare på min 675:a då, så får det hamna i rapporten om hur billigt det "skulle" kunna bli.

tack för hjälpen

/martin

Postat: 20 mars 2008, 21:11:25
av probe
Varför inte 12F615? Den är billigare och bättre än både 12f675 och 12f508.... Microchip är lite roliga med sin prissättning - antar att de prisar ner produkter som de vill ha upp försäljningen på även om de är mer avancerade, bättre och nyare.

Och mellan 12f675 och 12F615 är det mycket lite som behöver ändras i koden, lite annan minnesmapp och så, men det är 20 minuters jobb att flytta kod från 675 till 615. Jag gjorde det faktist denna vecka precis och det blev ju bara bättre ;) Samt att komponenten är 20-30% billigare!

Postat: 20 mars 2008, 21:15:06
av probe
Varför kalibrerar du inte klockan? Några få raders kod extra för att få upp nogranheten klart rejält.

Såg att du körde EQU till GPR. Det innebär att du får ändra dessa om du byter till 615 då minnesmappen ser lite anorlunda ut där.

Postat: 20 mars 2008, 22:29:18
av sodjan
> lite annan minnesmapp och så, men det är 20 minuters jobb att flytta kod från 675 till 615.

Och kör man relocatable mode så kanske det inte blir någon ändring
alls. Länkaren (MPLINK) tra hand om att flytta variablerna till de nya
adresserna... :-)

Eventuellt får man ändra "UDATA_SHR" till "UDATA" på något ställe, men
några *adresser* behöver man aldrig bry sig om.

> Såg att du körde EQU till GPR.

Exakt. Med RES så kan man glömma alla adresser. :-)

EDIT: Annars så verkar 12F615 vara en intressant liten nykomling,
en "683-light" skulle man kunna säga. Inte riktigt, men nästan...