Sida 1 av 1

Delayproblem med PIC18F452

Postat: 28 mars 2008, 14:19:21
av Maacus
Hej!
Med risk att mitt första inlägg blir något luddig, men vi får se hur det går :D
Jag är osäker på hur vilken information som är relevant som jag borde ta med..
Men det här är i alla fall problemet:
Jag använder en PIC18F452 med en 4Mhz kristall och behöver en liten delay i programmet. Då går jag i min vanliga ordning in till http://www.piclist.com/techref/piclist/ ... /delay.htm och generar en delay, som jag så många gånger gjort tidigare.

Problemet är att när jag försöker använda koden som genereras så stannar PICen där. Har satt så en lysdiod ska tändas efter att jag anropat funktionen för att kontrollera att det är den funktionen som stannar upp, och det är det.

Så ser min delay rutin ut

Kod: Markera allt

; Delay = 0.001 seconds
; Clock frequency = 4 MHz

; Actual delay = 0.001 seconds = 1000 cycles
; Error = 0 %

	cblock
	d1
	d2
	endc

Delay_1ms
			;993 cycles
	movlw	0xC6
	movwf	d1
	movlw	0x01
	movwf	d2
Delay_1ms_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	Delay_1ms_0

			;3 cycles
	goto	$+1
	nop

			;4 cycles (including call)
	return


Min config ser ut såhär

Kod: Markera allt


        __CONFIG  _CONFIG1H, _XT_OSC_1H  ;XT oscillator
        __CONFIG  _CONFIG2L, _PWRT_ON_2L & _BOR_ON_2L & _BORV_42_2L  ;Reset
        __CONFIG  _CONFIG2H, _WDT_OFF_2H  ;Watchdog timer disabled
        __CONFIG  _CONFIG3H, _CCP2MX_ON_3H  ;CCP2 to RC1 (rather than to RB3)
        __CONFIG  _CONFIG4L, _LVP_OFF_4L  ;RB5 enabled for I/O
Fulla koden
http://rafb.net/p/uNu7FK10.html

Det blir problem när jag både försöker klistra in den direkt i koden och när jag försöker anropa den som en rutin med CALL.

Tack på förhand!

Postat: 28 mars 2008, 14:23:09
av sodjan
Så vitt jag minns så skapar delay generatorn kod till PIC16.
Du måste kolla så att den fungerar korrekt även på PIC18.
Jag säger inte att den *inte* fungerar, bara att du måste kolla det...

Postat: 28 mars 2008, 14:29:34
av Maacus
Tack Sodjan!

Klantigt av mig, hittade detta längre ner på sidan.
Jag har använt den här generatorn tidigare till just den här picen, men har väll haft turen att sluppit goto $+1 raden då :)
For PIC18, this delay routine will need a little modification to work properly.. the goto $+1 within the delay loops that sometimes appears needs to be changed to goto $+6, since each program word is 2 bytes, and goto is a 4 byte instruction. Also, at the end sometimes goto $+1 is used as a 2 cycle delay, need to use goto $+4 to skip over the whole goto.

I hope this is correct, AFAIK it is.

Postat: 28 mars 2008, 14:49:34
av sodjan
JUst det, det där moste det vara.
Notera att varje prrogramord (instruktion) i en PIC18 tar upp
två adresser, så "$+2" blir nästa intruktion, på en PIC16 blir
det två instruktioner framåt.

Detta är (eller i alla fall en av) anledningen till att man bör undvika "$",
det är bättre med vanliga labels, de fungerar alltid...

Jag tror dock inte att den citerade texten är helt korrekt...