indirekt adressering av bit i PIC assembler

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
ToPNoTCH
Inlägg: 5158
Blev medlem: 21 december 2009, 17:59:48

indirekt adressering av bit i PIC assembler

Inlägg av ToPNoTCH »

Problem:
Jag har en rutin som använder en pinne som utgång och ger ett pulsmönster.
Jag vill kunna använda denna rutin med en dynamiskt vald pinne.

Exempel:
Genom att sätta X till 0-4 välja port A-E
Genom att sätta Y till 0-7 välja pin 0-7

På så vis skulle man kunna nyttja rutinen genom något liknande detta.

Kod: Markera allt

movlw 0x3
movwf X
movlw 0x4
movwf Y
call rutin
Vilket skulle skicka mitt pulsmönster på port D pinne 4.

Jag kommer inte på något klurigt sätt att lösa det på.
Port kan man ju fixa med indirekt adressering men det hjälper ju inte för val av pinne.

Finns det något sätt att indirekt adressera en bit eller finns det något annat sätt att lösa problemet på ?
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9126
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: indirekt adressering av bit i PIC assembler

Inlägg av AndersG »

Maska med en framräknad mask?
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: indirekt adressering av bit i PIC assembler

Inlägg av Swech »

Kod: Markera allt

   call get_mask

get_mask
  movf   y,w
  andlw  7
  addwf  pcl,same
  retlw  0b0000001
  retlw  0b0000010
  retlw  0b0000100
  retlw  0b0001000
  retlw  0b0010000
  retlw  0b0100000
  retlw  0b1000000
med reservation för att det var 5 år sedan jag körde PIC... :D

Swech
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9126
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: indirekt adressering av bit i PIC assembler

Inlägg av AndersG »

Japp, något ditåt och samma system kan även användas för TRIS ifall man skall växla riktining oxå.
ToPNoTCH
Inlägg: 5158
Blev medlem: 21 december 2009, 17:59:48

Re: indirekt adressering av bit i PIC assembler

Inlägg av ToPNoTCH »

Smart.

Det funkar oxo :tumupp:

Tack skall ni ha.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: indirekt adressering av bit i PIC assembler

Inlägg av sodjan »

> Det funkar oxo...

Om du menar Swech's exempel så fungerar det oftast, med lite tur.
Vill du vara säkert på att det alltid fungerar så får du göra lite mer,
främst ta hand om PCLATH innan ADD'en till PCL.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9126
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: indirekt adressering av bit i PIC assembler

Inlägg av AndersG »

Dvs, se AN556

Kod: Markera allt

								; Page-safe jumptable from AN556. Checks for carry when adding offset and
								; adjusts PCLATH accordingly
	banksel	dspmode
	movf	dspmode,w			; Get display mode in W
	andlw	.7					; Make sure it is within bounds (0..7)
	movwf	rega0				; save in temp register

	movlw	LOW dsptable		; Get low address of table
	addwf	rega0,F				; add offset
	movlw	HIGH dsptable		; Get high 5 bits of address
	btfsc	status,c			; Did we cross a page?
	addlw	1					; Yes, increment high address
	movwf	pclath				; Load high address in latch
	movf	rega0,w
	
	movwf	pcl					; Load computed offset into program counter
dsptable
	goto	displaymode0 		; Jump table to display mode handlers
	goto	displaymode1
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: indirekt adressering av bit i PIC assembler

Inlägg av sodjan »

Notera att AN556 (i alla fall för något år sedan) har/hade en bugg
i kodexemplena som gjorde att man hamnade en rad fel i tabellen.
Jag har inte kollat om det är åtgärdat. Men beskrivningen i texten
har jag för mig stämmde/stämmer så som den är.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: indirekt adressering av bit i PIC assembler

Inlägg av Swech »

Tja.. det är ju som sagt ett exempel.

På min tid lade jag tabellerna på kända adresser så att PAGE eländet
inte uppstod. Man fick ha tungan i rätt mun...

Swech
Skriv svar