C programmering till PIC
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
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
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
Länk till experimentkortet med ritning. Jag använder 18pins sockeln.
http://www.kjell.com/filarkiv/SUPPORTPD ... manual.pdf
Senast redigerad av newbadboy 29 september 2006, 15:44:18, redigerad totalt 1 gång.
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.
Ä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.
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?
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?
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.
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.
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);
}
} }
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);
}
} }