Kod till denna koppling? (nybörjarfråga)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, det blev tydligare när du ändrade "INTCON, 7" till "INTCON, GIE"...
Du ser fördelarna med att köra med symboler ? :-)

Då tar vi nästa "bit" som måste vara satt...

Kolla interrupt logik schemat på sidan 107 i databladet.
Notera att alla interupts från "peripherals" är kontrollerade av
biten PEIE. Fråga min inte varför de har gjort så, men PEIE
måsta vara satt för att interrupt från Timer1 ska "gå igenom"...

Så prova med till :

BANKSEL INTCON
bsf INTCON, GIE
bsf INTCON, PEIE <- ny rad.
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

Tack! Underbart, allt fungerar precis som det ska. :happy:
och jag har lärt mig en hel massa om PIC-programmering. Nu måste jag bara börja leta delar till min fina klocka. Apropå det så tänkte jag multiplexa 4 st 7-segmentdisplayer (med delad anod eller katod, vet ej än...) men jag vill inte behöva använda 4st I/O portar till den delade anoden/katoden. Det skulle ju gå att göra detta med 2st I/O portar om man kombinerar dem. Finns det någon slags logisk krets för detta?
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg av BJ »

sodjan:

Jag hade tydligen missat att man fortfarande kan välja bank. Det får jag titta mer på. Jag har kört med equ på dom flesta variablerna hittills. Det fungerar, men det blir ju en del jobb... Så visst vore det bra att få det enklare. Tack för tipset.

Vad jag menade med stora program är t.ex. om man har mycket uträkningar som i digitala filter och så. Då kan man lägga variablerna i grupper i samma bank, och då behöver man inte byta bank förrän man har räknat färdigt. Om man lägger in lite kontroll-grejer också för avlusning så är det lätt att man kommer upp i det högsta antalet instruktioner som man hinner med för samplingsfrekvensens skull, och då kan det ju vara bra om man kan spara så många instruktioner som möjligt. Men det är inte ofta det blir så. Särskilt inte i en klocka, som det frågas om här.
Men jag är väl inte ensam om att vilja prova mer och mer avancerade grejer... :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Visst, för en programmerare som *vet* vad han håller på med, är allt möjligt.
För en nybörjare är det enklast och säkrast att använda BANKSEL... :-)

> Jag hade tydligen missat att man fortfarande kan välja bank.

Man får göra en liten modifiering av LKR filen och lägga till (16F628A.LKR) :

Kod: Markera allt

SECTION    NAME=BANK0    RAM=gpr0
SECTION    NAME=BANK1    RAM=gpr1
SECTION    NAME=BANK2    RAM=gpr2
gpr0/1/2 är tidigare definierade som tre "DATABANK" där de aktuella adresserna är definierade.

Sedan :

Kod: Markera allt

bank0  udata
var1   res 1
var12  res 1
var13  res 1

bank1  udata
var2   res 1
var22  res 1
var23  res 1

bank2   udata
var3   res 1
var32  res 1
var33  res 1
ger enligt MAP filen :

Kod: Markera allt

                             Symbols - Sorted by Name
                     Name    Address   Location    Storage File                     
                ---------  ---------  ---------  --------- ---------                
                     VAR1   0x000020       data     static c:\temp\test\test.asm    
                    VAR12   0x000021       data     static c:\temp\test\test.asm    
                    VAR13   0x000022       data     static c:\temp\test\test.asm    
                     VAR2   0x0000a0       data     static c:\temp\test\test.asm    
                    VAR22   0x0000a1       data     static c:\temp\test\test.asm    
                    VAR23   0x0000a2       data     static c:\temp\test\test.asm    
                     VAR3   0x000120       data     static c:\temp\test\test.asm    
                    VAR32   0x000121       data     static c:\temp\test\test.asm    
                    VAR33   0x000122       data     static c:\temp\test\test.asm
Notera att variablerna har allokerats ur de olika bankerna.
Fortfarande finns det inga hårdkodade adresser i källkoden, var bankerna
ligger styrs av LKR filen.

Varför ska man behöva ändra LKR filen kan man undra ?
Tja, det finns många sätt att skriva dom och det sätt som Microchip
har valt kanske inte passar alla.

Om man lägger till en andra ASM fil till projektet som innehåller :

Kod: Markera allt

bank2  udata
var3x   res 1
var32x  res 1
var33x  res 1
så ser MAP filen ut så här :

Kod: Markera allt

                              Symbols - Sorted by Address
                     Name    Address   Location    Storage File                     
                ---------  ---------  ---------  --------- ---------                
                     VAR1   0x000020       data     static c:\temp\test\test.asm    
                    VAR12   0x000021       data     static c:\temp\test\test.asm    
                    VAR13   0x000022       data     static c:\temp\test\test.asm    
                     VAR2   0x0000a0       data     static c:\temp\test\test.asm    
                    VAR22   0x0000a1       data     static c:\temp\test\test.asm    
                    VAR23   0x0000a2       data     static c:\temp\test\test.asm    
                     VAR3   0x000120       data     static c:\temp\test\test.asm    
                    VAR32   0x000121       data     static c:\temp\test\test.asm    
                    VAR33   0x000122       data     static c:\temp\test\test.asm    
                    VAR3X   0x000123       data     static c:\temp\test\test2.asm   
                   VAR32X   0x000124       data     static c:\temp\test\test2.asm   
                   VAR33X   0x000125       data     static c:\temp\test\test2.asm   

Notera att variablerna med "X" (från test2.asm) har allokerats
snyggt och prydligt efter de andra från första ASM filen och i "rätt" bank!

Personligen tycker jag dock att detta är lite "överkurs" för en PIC
nybörjare. Låt bara MPLINK allokera variablerna ur valfri bank och
används BANKSEL så fungerar det alltid... :-)
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg av BJ »

Tack för den fina förklaringen. Det där sparar ju massor med jobb. Nu vet jag hur jag kan göra i fortsättningen. :)
Skriv svar