PICking PICling

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

Re: PICking PICling

Inlägg av Erik M »

OK, nu kommer en av de "jobbiga"...

Om man nu som standard inkluderar PICxxNxxx.inc, som gör diverse #define för SFR, varför då inte göra bra och fungerande sådana?

Att skriva om 0x15,0x5 till CCPR1L,DC1B1 hjälper ju inte egentligen så mycket.

Om det istället blev DC1B1 direkt, inklusive rätt Bank, då vore ju en hel del vunnet.

Typ, om jag greppat macron rätt...

Kod: Markera allt

set_DC1B1     MACRO
                    BCF    STATUS,RP0       ; egentligen 0x3,0x3
                    BSF    CCPR1L,DC1B1   ; respektive 0x15,0x5
                          ENDM
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PICking PICling

Inlägg av sodjan »

Det är mycket vunnet med att kunna läsa register och bit direkt i koden.
Det är lite som att tomaterna skulle vara märkta "PLU:1234" istället för
just "tomater". Om det bara står 0x15,0x5 så får man antingen ha väldigt
bra minne eller konstant leta fram och tillbaka i databladet.

> inklusive rätt Bank

Det går inte eftersom banken inte har något direkt att göra med
adressen som ska in i själva instruktionen. Dessutom vill man kanske
inte alltid att det ska kodas "onödiga" kommandon för att byta bank
i de fall att man redan vet att det inte behövs.

Ditt macro exempel är i och för sig korrekt som det är skrivet, men
det fungerar nog inte som du tror efter en "skip" instruktion. T.ex en
BTFSC kommer att "skippa" BCF på STATUS och hoppa direkt till
BSF instruktionen. Du vill sannolikt att den ska helt hoppa över
macrot, eller hur? Men processorn vet inte vad macron är, det
är enbart en finess i assamblern. Tänk dig att du hade skrivit in de
två instruktionerns direkt i koden istället, det är exakt det som
macrot gör (åt dig).
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

Re: PICking PICling

Inlägg av Erik M »

Givetvis underlättar det med, någorlunda, beskrivande benämningar.
Det är mest det där med att sprida SFR på bredden och att inte kunna plocka adressen direkt, trots att den är unik.
Men låt oss lämna just det ämnet... :mrgreen:

OK, då är jag med.
Och om man inte håller reda på vad Macro't ska göra kan det du beskriver onekligen ställa till det.
Har jag mer än en sak som ska göras så går jag vidare - om det inte ska göras.
Och tack vare din påminnelse, vilket jag oxå noterat vid kontroll av vad för kod som "egentligen gått igenom" i (?) assembly listing view, så blir det inte att jag kommer göra det misstaget. Tack! :tumupp:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PICking PICling

Inlägg av sodjan »

Det finns metoder att komma runt macro-problemet:

Kod: Markera allt

set_DC1B1  MACRO
              GOTO run_macro
              GOTO exit_macro
run_macro
              BCF    STATUS,RP0       ; egentligen 0x3,0x3
              BSF    CCPR1L,DC1B1   ; respektive 0x15,0x5
exit_macro
           ENDM 
Detta fungerar även efter en "skip" instruktion, men det blir
lite extra kod (som dock bara behöver skrivas en gång).
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

Re: PICking PICling

Inlägg av Erik M »

Jo, det är så man får skriva. :tumupp:

Dock...!

Kod: Markera allt

set_DC1B1  MACRO
              GOTO run_set_DC1B1
              GOTO exit_set_DC1B1
run_set_DC1B1
              BCF    STATUS,RP0
              BSF    CCPR1L,DC1B1
exit_set_DC1B1
           ENDM 
...annars blir det jobbigt när clear_DC1B1 kommer. Etc.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PICking PICling

Inlägg av sodjan »

Nja, jag har för mig att labels är "lokala" inom macron.
Flera macron kan alltså ha samma label. Annars blir det
ju väldigt jobbigt att ha fler än 1 "set_DC1B1" också...
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

Re: PICking PICling

Inlägg av Erik M »

Ah, givetvis måste det vara så!

När vi ändå är inne på det...

Man kan rada upp config words på en lång rad - hur är det med övriga instruktioner?

Förresten...!
Man har ju gjort ihopslagning med dem.
__config _INTOSCIO & _WDT_OFF & _PWRTE_ON & _IESO_OFF & _FCMEN_OFF & _MCLRE_OFF

Så varför inte samma med SFR...?
NOT_GPPU_ON
AN0_ON
TRISIO5_OFF
...etc.

Vilket påminner mig om att BANKSEL verkar lite oanpassad.
På 12F683 finns bara bankerna 0 & 1.
Så det borde räcka med endera av BCF/BSF STATUS,RP0?
Inte behövs väl även BSF/BCF STATUS,RP1...?

Och är det mer än fyra banker räcker inte dessa två...
...men här och nu inte aktuellt.


Så fortsatt bygge av macro blir...

Kod: Markera allt

set_DC1B1  MACRO
              jump_right
run
              BCF    STATUS,RP0
              BSF    CCPR1L,DC1B1
exit
           ENDM 

jump_right   MACRO
              GOTO run
              GOTO exit
           ENDM 
...?

Eller blir det för kapslat med att jump_right letar efter run/exit inne i sig själv?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PICking PICling

Inlägg av sodjan »

BANKSEL genererar de instruktioner som behövs oavsett antal banker.
Och på de nyare PIC16F1xxx blir det alltid ett kommando även fast
det finns 32 banker, det finns en speciell instruktion för det.

Osäker på om ditt macro fungerar men det är väldigt lätt att tästa!
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

Re: PICking PICling

Inlägg av Erik M »

Det är just varför jag protesterade mot BANKSEL för P12F683.
BANKSEL ger både STATUS,5 och STATUS,6 när bara STATUS,5 behöver växlas.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PICking PICling

Inlägg av sodjan »

Ah, OK, det trode jag inte. Har du verifierat med list filen?
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

Re: PICking PICling

Inlägg av Erik M »

Annars hade jag inte sett det.
Men nog om det.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PICking PICling

Inlägg av sodjan »

Jag har testkört med MPLABX och för 12F683 så genererar
BANKSEL enbart *en* BCF eler BSF instruktion, inte två.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46967
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: PICking PICling

Inlägg av TomasL »

Erik M skrev:Det är just varför jag protesterade mot BANKSEL för P12F683.
BANKSEL ger både STATUS,5 och STATUS,6 när bara STATUS,5 behöver växlas.
Vad menar du?
Hur gör du med BANKSEL, vad skriver du?

Kod: Markera allt

	list		p=12f683
	#include	p12f683.inc
	BANKSEL 	PIE1
	bcf			PIE1,ADIE
	BANKSEL		STATUS
	BCF 		STATUS,C
	bsf			STATUS,DC
	end
Ger

Kod: Markera allt

---  E:\Tomas\Dokument\MPASMTEST\test.asm  -------------------------------------------------------
                                                  1:     	list		p=12f683
                                                  2:     	#include	p12f683.inc
   000    1683     BSF 0x3, 0x5                   3:     	BANKSEL 	PIE1
   001    130C     BCF 0xc, 0x6                   4:     	bcf			PIE1,ADIE
   002    1283     BCF 0x3, 0x5                   5:     	BANKSEL		STATUS
   003    1003     BCF 0x3, 0                     6:     	BCF 		STATUS,C
   004    1483     BSF 0x3, 0x1                   7:     	bsf			STATUS,DC
Så jag förstår inte riktigt var du fått det ifrån.
MPLAB 8.92
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

Re: PICking PICling

Inlägg av Erik M »

Kan man skriva BANKSEL på mer än ett sätt...? :wall:

Kod: Markera allt

                                 059 BCF STATUS, 0x5                        
    91 1303                   05A BCF STATUS, 0x6                        
    92 0185                   05B CLRF GPIO                              
    93 1283                   05C BCF STATUS, 0x5                        
    94 1303                   05D BCF STATUS, 0x6                        
    95 138B                   05E BCF INTCON, 0x7                        
    96 1683                   05F BSF STATUS, 0x5                        
    97 1303                   060 BCF STATUS, 0x6                        
    98 3071                   061 MOVLW 0x71                             
    99 008F                   062 MOVWF TMR1H                            
   100 1283                   063 BCF STATUS, 0x5                        
   101 1303                   064 BCF STATUS, 0x6                        
   102 3007                   065 MOVLW 0x7                              
   103 0099                   066 MOVWF CMCON0                           
   104 1683                   067 BSF STATUS, 0x5                        
   105 1303                   068 BCF STATUS, 0x6                        
   106 019F                   069 CLRF ADCON0                            
   107 1683                   06A BSF STATUS, 0x5                        
   108 1303                   06B BCF STATUS, 0x6                        
   109 3039                   06C MOVLW 0x39                             
   110 0085                   06D MOVWF GPIO                             
   111 1683                   06E BSF STATUS, 0x5                        
   112 1303                   06F BCF STATUS, 0x6                        
   113 3071                   070 MOVLW 0x71                             
   114 009F                   071 MOVWF ADCON0  
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PICking PICling

Inlägg av sodjan »

Det där säger inte ett smack om hur din källkod ser ut eller hur det är assemblerat!

Om du vill visa en kod som uppför sig på något visst sätt så får du väll göra
det, inte visa något helt meningslöst...

Även jag har inga problem att generera en kod med dubbla BxF instruktioner,
det är bara att välja en processor med 4 banker...
Skriv svar