Pic, bit-hantering i XC8.
Re: Pic, bit-hantering i XC8.
En ny fråga...
Jag vill titta om timer 0 har räknat runt,
och provade med:
if (INTCON.TMR0IF == 1)
men det tyckte inte kompilatorn var rätt sätt.
struct/union required
Så hur gör man? Jag vill gärna ha kvar ==
om det går. Jag tycker det är lättast att läsa då.
Rättelse: IE --> IF. (Felskrivning.)
Jag vill titta om timer 0 har räknat runt,
och provade med:
if (INTCON.TMR0IF == 1)
men det tyckte inte kompilatorn var rätt sätt.
struct/union required
Så hur gör man? Jag vill gärna ha kvar ==
om det går. Jag tycker det är lättast att läsa då.
Rättelse: IE --> IF. (Felskrivning.)
Senast redigerad av BJ 10 januari 2019, 12:44:56, redigerad totalt 1 gång.
Re: Pic, bit-hantering i XC8.
Är du säker på att INTCON ska vara med?
EDIT; och ja, som nästa skribent skriver är IE flaggan bara 1 om interrupten är enablad medan IF anger att en interrupt väntar.
EDIT; och ja, som nästa skribent skriver är IE flaggan bara 1 om interrupten är enablad medan IF anger att en interrupt väntar.
Senast redigerad av Icecap 10 januari 2019, 12:44:01, redigerad totalt 2 gånger.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Pic, bit-hantering i XC8.
Så här från huvudet så kollar din if-sats om du satt timerns interrup enable eller inte.
När timern rullar runt så sätts en flagga, dvs "F" på slutet.
Kolla i databladet vad timer-flaggan kallas och använd den istället.
När timern rullar runt så sätts en flagga, dvs "F" på slutet.
Kolla i databladet vad timer-flaggan kallas och använd den istället.
Re: Pic, bit-hantering i XC8.
Jag hade skrivit fel. IE skulle vara IF.
Och INTCON skulle inte vara med,
utan bitens namn skulle tydligen stå för sig själv.
Tack.
Och INTCON skulle inte vara med,
utan bitens namn skulle tydligen stå för sig själv.
Tack.
Re: Pic, bit-hantering i XC8.
Port-bitarna kan jag ändra i c,
men hur ändrar man tris-bitar?
Jag har definierat
och försöker
Då klagar kompilatorn på rad nummer 2 och 3
i det andra stycket:
15 not a member of the struct/union ""
Error [182] ... illegal conversion between types
int -> volatile union S303
(908) exit status = 1
Vad gör jag för fel?
Är det bitarnas namn jag har skrivit fel?
I så fall, vad är/var hittar jag det rätta namnet?
En annan fråga:
Om en funktion tar emot ett argument,
kan man göra vad man vill med det då,
precis som om det hade varit en lokal
variabel?
men hur ändrar man tris-bitar?
Jag har definierat
Kod: Markera allt
#define tris_max_7219__cs TRISCbits.RC6
#define tris_max_7219_data TRISCbits.RC5
#define tris_max_7219_klocka TRISCbits.RC4
Kod: Markera allt
tris_max_7219__cs = 0;
tris_max_7219_data = 0;
tris_max_7219_klocka = 0;
i det andra stycket:
15 not a member of the struct/union ""
Error [182] ... illegal conversion between types
int -> volatile union S303
(908) exit status = 1
Vad gör jag för fel?
Är det bitarnas namn jag har skrivit fel?
I så fall, vad är/var hittar jag det rätta namnet?
En annan fråga:
Om en funktion tar emot ett argument,
kan man göra vad man vill med det då,
precis som om det hade varit en lokal
variabel?
Re: Pic, bit-hantering i XC8.
Första frågan: Vilken PIC använder du? Med den information kan man gå ner i include-filen och kolla lite.
Andra frågan: Ja! Det avsätts plats i stacken till den, värdet överföras och funktionen kallas - så effekten är att det är en lokal variabel.
Andra frågan: Ja! Det avsätts plats i stacken till den, värdet överföras och funktionen kallas - så effekten är att det är en lokal variabel.
Re: Pic, bit-hantering i XC8.
Är det inte PIC18F4550 som du använder?
Du har:
Notera att pic18f4550.h har detta:
Du får kolla varför inte LC4 och LC5 är definierade...
Du har:
Kod: Markera allt
#define tris_max_7219__cs TRISCbits.RC6
#define tris_max_7219_data TRISCbits.RC5
#define tris_max_7219_klocka TRISCbits.RC4
Kod: Markera allt
// Register: LATC
#define LATC LATC
extern volatile unsigned char LATC __at(0xF8B);
#ifndef _LIB_BUILD
asm("LATC equ 0F8Bh");
#endif
// bitfield definitions
typedef union {
struct {
unsigned LATC0 :1;
unsigned LATC1 :1;
unsigned LATC2 :1;
unsigned :3;
unsigned LATC6 :1;
unsigned LATC7 :1;
};
struct {
unsigned LC0 :1;
unsigned LC1 :1;
unsigned LC2 :1;
unsigned :3;
unsigned LC6 :1;
unsigned LC7 :1;
};
} LATCbits_t;
extern volatile LATCbits_t LATCbits __at(0xF8B);
Re: Pic, bit-hantering i XC8.
Icecap: Okej.
sodjan: Jo, det är det.
Du kanske tänkte på trisc?
Men det ser ungefär likadant ut där.
Jag får läsa mer om varför.
sodjan: Jo, det är det.
Du kanske tänkte på trisc?
Men det ser ungefär likadant ut där.
Kod: Markera allt
typedef union {
struct {
unsigned TRISC0 :1;
unsigned TRISC1 :1;
unsigned TRISC2 :1;
unsigned :3;
unsigned TRISC6 :1;
unsigned TRISC7 :1;
};
struct {
unsigned RC0 :1;
unsigned RC1 :1;
unsigned RC2 :1;
unsigned :3;
unsigned RC6 :1;
unsigned RC7 :1;
};
struct {
unsigned :3;
unsigned TRISC3 :1;
};
} TRISCbits_t;
extern volatile TRISCbits_t TRISCbits @ 0xF94;
Re: Pic, bit-hantering i XC8.
Jaha, det har med usb att göra:
Unlike other PORTC pins, RC4 and RC5 do not have
TRISC bits associated with them. As digital ports, they
can only function as digital inputs.
Då lärde jag mig något nytt.
Får byta till andra utgångar.
Unlike other PORTC pins, RC4 and RC5 do not have
TRISC bits associated with them. As digital ports, they
can only function as digital inputs.
Då lärde jag mig något nytt.
Får byta till andra utgångar.
Re: Pic, bit-hantering i XC8.
Ja, jag blandade ihop LAT och TRIS, men poängen var den samma,
du försökte använda funktioner som inte finns där...
du försökte använda funktioner som inte finns där...