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

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

att köra med en 4.194304 Mhz kristall var ju faktiskt väldigt smart, har inte tänkt på det förut :oops: Men detta innebär väl att jag inte kan köra med en PIC som för köras i max 4 MHz, det får bli en PIC på 20 Mhz fast jag får använda en 4.194304 Mhz kristall på den.
En annan sak som nämndes tidigare i tråden var mitt sätt att byta bank.
Kan man alltså skriva "sfr0" när man vill gå till bank0 ?
Man använder alltså .lkr filen för att göra "snabbkomandon" till sin PIC när man programmerar?
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Den klarar nog av 4,2MHz ska du se :-)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Finns det *någon* modern PIC som har en max hastighet på 4 MHz ????
D.v.s vid 5V. Vissa LF modeller har ett max vid 4MHz vid sin lägsta spänning.

> En annan sak som nämndes tidigare i tråden var mitt sätt att byta bank.

BANKSEL är den rekomenderade metoden.

> Kan man alltså skriva "sfr0" när man vill gå till bank0 ?

Vad är "sfr0" ??

> Man använder alltså .lkr filen för att göra "snabbkomandon" till sin PIC när man programmerar?

Nej !!

Linker script talar om för MPLINK hur den aktuella PIC modellens
minne är konfigurerat. Visa gärna vad som fick dig att tro det du skrev så
att det kan rättas till, det var tydligen väldigt missvisande, vad det nu var...
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

Alltså nu fattar jag noll här. Ge mig en link till en lista på de där kommandonen.
I linkerscriptet står det tex så här:
// Sample linker command file for 16F628A

***Lite andra kommandon här***


DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTED
DATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTED
DATABANK NAME=sfr2 START=0x100 END=0x10B PROTECTED
DATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED


Vad är det för kommandon du menar?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Har inte en aning vilka "kommandon" du menar !!
Och jag tänker inte gissa...

I Linker script finns i alla fall inga "kommandon"...

Jag fattar inte var LKR filerna kom in i tråden.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47013
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

Exakt.
I "lkr" filen talar den om för kompilatorn hur minnet är fördelat.

Kod: Markera allt

DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTED 
Talar om att databanken har namnet sfr0, startar på adderss 0x0 och slutar på address 0x1f samt att det är en skyddad minnesarea, dvs kompilatorn får inte lägga någon kod där.

sfr betyder SpecialFileRegister.

Alla kommandon, macron mm hittar du i bruksanvisningen till MPLAB samt i databladet för processorn ifråga.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Alla kommandon, macron mm hittar du i bruksanvisningen till MPLAB samt i databladet för processorn ifråga.

Bara ett litet förtydligande...

De instruktioner som den aktuella PIC modellen stödjer finns i respektive datablad.

Övrigt som kan användas i assembler (direktiv som BANKSEL, macron o.s.v)
finns i manualen till MPASM.
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

Ok så var hittar man .inc filerna och var lägger man de i sitt projekt?
Och Angående banksel så verkar MPASM manualen tro att alla kan allt om PIC... Det som står är i princip:
BANKSEL | Generate RAM bank selecting code | banksel <label>
Jaha? och vad betyder det?
hur fungerar BANKSEL?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

INC filerna ligger i katalog strukturen en MPLAB installerades, under
"MPASM suite" har jag för mig.

Man lägger bara in (t.ex) "#include "p16f628a" " i sin ASM källkod.
Ingen fil behöver flyttas någonstans.

I min kopia av MPASM/MPLINK manualen finns det kodexempel
tillsammans med beskrivnigen av BANKSEL.


Men i princip gör du bara "BANKSEL TRISA" för att byta till
rätt bank för t.ex TRISA. BANKSEL kommer att sätta in rätt
BCF/BSF STATUS,xxx kommandon. Så BANKSEL gör samma sak
som *du* gör när du själv letar upp (t.ex) TRISA i databladet
och räknar ut vilken kombination av BCF/BSF som ska till, men
automatiskt.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

En sak till, INC filerna kan man gärna kolla lite närmare på,
specielt delen sist med CONFIG info...
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

Så koden blir såhär?

Kod: Markera allt

#include "P16F628A"
;****Variablar****

COUNT1 equ 20h 
COUNT2 equ 21h 

;****Sätter portar**** 

movlw 00h ;Gör port A till output 
BANKSEL movwf TRISA 
movlw 02h 

;****kör en xor för att byta status på lysdioden**** 

Start 
BANKSEL xorwf PORTA,1 

;****kör en delay och går till Start**** 

call Delay 
goto Start 

;****Subrutin för delay**** 

Delay 

Loop1 decfsz COUNT1,1 
goto Loop1 
decfsz COUNT2,1 
goto Loop1 

return 

end 
Senast redigerad av Rocky_AL 11 april 2007, 23:30:22, redigerad totalt 2 gånger.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47013
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

Nej

Kod: Markera allt

BANKSEL TRISA ; välj bank
movlw 00
movwf TRISA ; gör PORTA till utgång
Ungefär
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

ok en gång till då :lol:

Kod: Markera allt

#include "P16F628A" 
;****Variablar**** 

COUNT1 equ 20h 
COUNT2 equ 21h 

;****Sätter portar**** 

BANKSEL TRISA
movlw 00h ;Gör port A till output 
movwf TRISA
BANKSEL PORTA
movlw 02h 

;****kör en xor för att byta status på lysdioden**** 

Start 
xorwf PORTA,1 

;****kör en delay och går till Start**** 

call Delay 
goto Start 

;****Subrutin för delay**** 

Delay 

Loop1 decfsz COUNT1,1 
goto Loop1 
decfsz COUNT2,1 
goto Loop1 

return 

end
Kan man byta ut dessa rader:

COUNT1 equ 20h
COUNT2 equ 21h
Med något i stil med:

Kod: Markera allt

VARIABLE COUNT1 = 255
Det verkar finnas något smart sätt att skapa variabler eller?
Sedan så såg jag i manualen att det fanns while också. Kan man alltså byta ut loop1 och goto med:

Kod: Markera allt

while COUNT2 > 0
COUNT2 -= 1
while COUNT1 > 0
COUNT -= 1
endw
endw
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Om du vill ha ett bättre alternativ till EQU för att reservera variabler
ska du kolla upp RES och UDATA_xxx i MPASM manualen. D.v.s att
du kör i "relocatable mode" istället för det gamla "absolute mode".
Se även : http://www.jescab.se/Rellocmode.html

While är inget som *processorn* känner till. Det kan användas för att
göra loopar i *MPASM*, inte i processorn i sig. På samma sätt dom t.ex
de olika IF varianterna bara används i *MPASM*, inte i *processorn*...
Jag har inte tillgång till manualen just nu, men detta borde vara
beskrivet där, är det inte ? För kod som du vill att processorn ska
köra får du hålla dig till de instruktioner som processorn kan
exekvera, det är väl ganska självklart, eller hur ?

Sen saknar du en __CONFIG i din kod.
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

Då tar vi koden ytterligare en gång då :D
(Det gick inte att ha fetstil i kod, kanske något som kunde förbättras här på forumet)
(Tillägg är i fetstil)



LIST P=16F628
#include "P16F628A"
;****Variablar****

UDATA
COUNT1 RES 1
COUNT2 RES 1

;****Sätter portar****

CODE
BANKSEL TRISA
movlw 00h ;Gör port A till output
movwf TRISA
BANKSEL PORTA
movlw 02h

;****kör en xor för att byta status på lysdioden****

Start
xorwf PORTA,1

;****kör en delay och går till Start****

PAGESEL Delay
call Delay
goto Start

;****Subrutin för delay****

Delay

Loop1 decfsz COUNT1,1
goto Loop1
decfsz COUNT2,1
goto Loop1

return

end



Kommer detta att fungera att kompilera och bränna på en PIC16F628A?
Vad står RES 1 för? Just ettan kanske står för vilken bank variabeln ska ligga i?
Skriv svar