PIC B.knudsen CC5X : Olika portar -> en variabel
PIC B.knudsen CC5X : Olika portar -> en variabel
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
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
Re: PIC B.knudsen CC5X : Olika portar -> en variabel
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);
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);
Re: PIC B.knudsen CC5X : Olika portar -> en variabel
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
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
Re: PIC B.knudsen CC5X : Olika portar -> en variabel
Jaha, och fungerar det inte ?
Du har väl testat ?
Du har väl testat ?
Re: PIC B.knudsen CC5X : Olika portar -> en variabel
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?
/* 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?
Re: PIC B.knudsen CC5X : Olika portar -> en variabel
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.
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.
Re: PIC B.knudsen CC5X : Olika portar -> en variabel
Följande är syntaxen för "#pragma bit"
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".
http://www.bknd.com/doc/cc5x-34.pdf#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).
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".
Re: PIC B.knudsen CC5X : Olika portar -> en variabel
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.
Re: PIC B.knudsen CC5X : Olika portar -> en variabel
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);