PIC B.knudsen CC5X : Olika portar -> en variabel

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
saleka
Inlägg: 16
Blev medlem: 24 juli 2010, 17:50:32

PIC B.knudsen CC5X : Olika portar -> en variabel

Inlägg av saleka »

Hej

Jag försöker komma på om det går att lägga ut ett binärt tal på pinnar från olika portar genom att använda pragma i CC5X.

Exempel
Jag vill lägga lägga pinne 1-4 på port A som 0000.XXXX i en variabel och 1-4 på port B som XXXX.0000 i samma variabel.
På så sätt tänker jag mig att jag kan skriva ut ett 8bit tal utan att vara beroende av att en hel port är ledig.

Är detta möjligt eller är jag helt ute och cyklar?

/Samuel
Användarvisningsbild
Icecap
Inlägg: 26637
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: PIC B.knudsen CC5X : Olika portar -> en variabel

Inlägg av Icecap »

Allt är möjligt! Frågan är bara hur krångligt det kan bli...

Jag vill lägga lägga pinne 1-4 på port A som 0000.XXXX i en variabel och 1-4 på port B som XXXX.0000 i samma variabel.
På så sätt tänker jag mig att jag kan skriva ut ett 8bit tal utan att vara beroende av att en hel port är ledig.

PORTA = (PORTA & 0xF0) | (Variabel & 0x0F);
PORTB = (PORTB & 0x0F) | (Variabel & 0xF0);
saleka
Inlägg: 16
Blev medlem: 24 juli 2010, 17:50:32

Re: PIC B.knudsen CC5X : Olika portar -> en variabel

Inlägg av saleka »

Tack!
Men jag har en svag förminnelse att man i b.knudsens C variant kan göra nått i stil med

pragma bit MixPort.0 @ PORTA.1;
pragma bit MixPort.1 @ PORTA.2;
pragma bit MixPort.2 @ PORTA.3;
pragma bit MixPort.3 @ PORTA.4;

pragma bit MixPort.4 @ PORTB.3;
pragma bit MixPort.5 @ PORTB.4;
pragma bit MixPort.6 @ PORTB.5;
pragma bit MixPort.7 @ PORTB.6;

och där efter använda MixPort för att styra pinnarna på port A och B

/Samuel
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC B.knudsen CC5X : Olika portar -> en variabel

Inlägg av sodjan »

Jaha, och fungerar det inte ?
Du har väl testat ?
saleka
Inlägg: 16
Blev medlem: 24 juli 2010, 17:50:32

Re: PIC B.knudsen CC5X : Olika portar -> en variabel

Inlägg av saleka »

Ja, jag testade nedanstående


/* B Knudsen Cc5x C-compiler - not ANSI-C */
#include "16F690.h"
#pragma config |= 0x00D4

#pragma bit MixPort.0 @ RB.2


void initserial( void );
void FlushRecieverBuffer(void);
void putchar( char );
char getchar( void );
void delay10( char );

void main( void)
{
......


och får felmeddelandet


#pragma bit MixPort.0 @ RB2
________________^------
Error Uart.c 44: Preprocessor error
(The source line starting with '#' contains invalid syntax or context
dependent syntax)

Error options: -ew: no warning details -ed: no error details -eL: list details



Några förslag?
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC B.knudsen CC5X : Olika portar -> en variabel

Inlägg av sodjan »

Förslag på vadå ?
Uppenbarligen fungerar inte det du testade.
Dokumentationen bör förklara varför.
Sen så är kanske inte Knudsen den vanligaste miljön,
så det kan vara enklare att hitta förslag i forum som är
specifikt för just den produkten, om det finns.
bearing
Inlägg: 11675
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: PIC B.knudsen CC5X : Olika portar -> en variabel

Inlägg av bearing »

Följande är syntaxen för "#pragma bit"
#pragma bit <name> @ <N.B or variable[.B]>
Defines the global bit variable <name>. It is useful for assigning a bit variable to a certain address. Only
valid addresses are allowed:
#pragma bit bitxx @ 0x20.7
#pragma bit ready @ STATUS.7
#pragma bit ready @ PA2
NOTE: If the compiler detects double assignments to the same RAM location, this will cause a warning
to be printed. The warning can be avoided if the second assignment uses the variable name from the first
assignment instead of the address (#pragma bit var2 @ var1).
http://www.bknd.com/doc/cc5x-34.pdf

När jag använde CC5X brukade jag använda vanlig #define för att definiera bitar eftersom att jag inte kunde förstå skillnaden mellan sätten. Tydligen finns en liten intelligens i denna variant som antagligen skulle kunna ge kompileringserror istället för bugg om man skrivit galet.

Att låta CC5X skapa bitfält av blandade bitar ur olika register tror jag inte är möjligt, utan du får göra detta "för hand".
Användarvisningsbild
Icecap
Inlägg: 26637
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: PIC B.knudsen CC5X : Olika portar -> en variabel

Inlägg av Icecap »

Aha... ja, att skapa bit-variabler på det vis är OK, förvisso inte porterbart men OK. Jag är dock ganska säker på att det inte fungerar till det TS önskar.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: PIC B.knudsen CC5X : Olika portar -> en variabel

Inlägg av jesse »

Och vad är det för fel med att använda "vanlig" C-kod?

Kod: Markera allt

PORTA = (PORTA & 0xF0) | (Variabel & 0x0F);
PORTB = (PORTB & 0xF0 | (Variabel >> 4);
Skriv svar