Sida 4 av 7
Postat: 28 september 2006, 17:37:04
av sodjan
Vilka "lampor" ??
> porta = 0xf;
> trisa = 0xf;
PORTA och TRISA är 8-bitars register.
Det är lite oklart vad du sätter dom till...
Postat: 28 september 2006, 22:21:30
av newbadboy
Ska försöka förklara
Jag använder mig av Welleman kortet K8048 och Pic 16f627. På experiment kortet är 6st led kopplade till RB0-RB6. På RA0-RA4 är det 4 strömbrytare kopplade.
Det fanns ett ex i MikroC där man satte hela port B till utgångar genom att skriva portb=0 trisb=0. 0hex = 00000000binärt tänkte jag då.
Satte därför 11111111bin = 0xFF. Antog att man därför kanske kan sätt porta=0xFF trisa=0xFF för att definiera hela porta som ingångar.
oops ser nu att det ska va 0xFF inte 0xF
Postat: 28 september 2006, 22:38:00
av sodjan
> oops ser nu att det ska va 0xFF inte 0xF
Någon skillnad ?
Postat: 28 september 2006, 23:30:22
av newbadboy
nope tyvärr inte

Postat: 29 september 2006, 01:00:13
av Johan.o
Jag tycker det är lite lustigt att
du har if (porta.f0 == 1) utanför while(1), tycker tvärtom verkar mer riktigt.
Eller är jag helt ute och snorklar?
Postat: 29 september 2006, 15:33:39
av newbadboy
Det funkade inte heller. Har även provat if(porta==1) både i och utanför whilesatssen. Skumt skumt. Om jag tar bort själva if-satsen så blinkar dioderna i takt utan problem.
Länk till experimentkortet med ritning. Jag använder 18pins sockeln.
http://www.kjell.com/filarkiv/SUPPORTPD ... manual.pdf
Postat: 29 september 2006, 15:44:02
av TomasL
utan att känna till vilken kompilator du använder,
Är definitionen för Port a riktig, dvs skall det vara porta eller portA eller nått liknande.
Brytarna på port A går dessa till jord eller matningen, finns det några pull-up eller pull-down på port A.
Det är tydligt att vilkoret i IF satsen inte blir uppfyllt. Kan det bero på att du inte läst på tillräckligt om hur pic'en är kopplad.
Postat: 29 september 2006, 15:45:16
av newbadboy
Använder MikroC, det finns pulldown på porta.
Postat: 29 september 2006, 16:43:57
av TomasL
Olika C-Kompilatorer använder olika syntax och definitioner, eftersom jag inte använder den kompilatorn som du gör så.
om man tittar på schemat så ger det vid hand att RA4 inte är ansluten därför kan aldrig if(porta==1) bli sann eftersom det förutsätter att samtliga ingångar är 1, vilket de ej kan bli.
Om du istället använder dig av if(porta||0x01) eller if(porta&&0x01) beroende på vilken knapp(ar) du skall trycka på kan det nog fungera bättre.
Har aldrig sett "porta.F0" vad betyder det?
Postat: 29 september 2006, 17:45:27
av Icecap
Jag använder PORTA.F0 (alltså versaler) till portarna, de är definierat så.
PORTA.F0 betyder PortA bit 0 i MikroC, det går tydligen inte att använda enbart '0' men det är ett minimalt problem.
Sen försöker jag även att ersätta hårdvaru-hänvisningar med ett beskrivande namn:
#define LED_Green PORTA.F0
#define LED_Red PORTA.F1
varefter man använder
LED_Green = 1;
LED_Red = 0;
Det blir, i mitt tycke, mycket enklare att "läsa" programmet. Flyttar man sedan en bit på en port är det bara att ändra den definition varpå resten av programmet är ändrat.
Postat: 29 september 2006, 23:02:46
av newbadboy
nää det gick inte. om jag provar if(porta||0x01) så blinkar det utan att jag trycker på ngn knap. det bror väl då på att ||1 är alltid uppfyllt.
Med if(porta&&0x01) är det stendött. har det ngt med min def i början kanske som är skumt?
void main(){
porta = 0xff;
trisa = 0xff; //ingång
portb = 0;
trisb = 0; //utgång
if (porta.f0==1){
while(1){
portb = ~ portb;
delay_ms(500);
}
} }
Postat: 30 september 2006, 00:41:48
av sodjan
Om du verkligen vill VETA vad din kod gör, så är det bara att studera
assembler-listan från C-kompilatorn. Det är en av de bästa metoderna
att felsöka C-kod, speciellt små "test-case"...
Postat: 30 september 2006, 02:44:09
av Icecap
Alltså, det finns en stor skillnad:
'&' är bitmässig AND
'&&' är logisk AND
PORTA & 0x01 är sant om PORTA är 'xxxxxxx1'.
PORTA && 0x01 är sant om PORTA är annat än '00000000'
Postat: 30 september 2006, 10:48:03
av newbadboy
Om man tar
if((porta.f0 ==1) || (porta.f1==1) ||............(porta.f7==1))
så borde man ju ha garderat sig, men inte fanken fungerar det ens.
Det känns nästan som om programmet inte ens tar hänsyn till vad som finns på porta, har jag verkligen def porta rätt i början?
Postat: 30 september 2006, 11:45:19
av Icecap
Testa med versaler kanske....
Inte porta men PORTA, precis om jag skrev tidigare.
C är case-sensetive och då portarna är definierat som PORTA (osv) är porta inte det samma som PORTA.