Sida 2 av 5
Postat: 11 april 2007, 17:46:57
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

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?
Postat: 11 april 2007, 18:17:00
av Icecap
Den klarar nog av 4,2MHz ska du se

Postat: 11 april 2007, 22:17:48
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...
Postat: 11 april 2007, 22:22:57
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?
Postat: 11 april 2007, 22:29:12
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.
Postat: 11 april 2007, 22:29:15
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.
Postat: 11 april 2007, 22:33:37
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.
Postat: 11 april 2007, 23:00:55
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?
Postat: 11 april 2007, 23:09:00
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.
Postat: 11 april 2007, 23:09:48
av sodjan
En sak till, INC filerna kan man gärna kolla lite närmare på,
specielt delen sist med CONFIG info...
Postat: 11 april 2007, 23:23:39
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
Postat: 11 april 2007, 23:27:57
av TomasL
Nej
Kod: Markera allt
BANKSEL TRISA ; välj bank
movlw 00
movwf TRISA ; gör PORTA till utgång
Ungefär
Postat: 11 april 2007, 23:37:47
av Rocky_AL
ok en gång till då
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:
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
Postat: 12 april 2007, 08:48:35
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.
Postat: 12 april 2007, 15:02:03
av Rocky_AL
Då tar vi koden ytterligare en gång 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?