pic16f hjælp!

Dec 05, 2004 6 Replies

Hej er der en klov person her inden der kan hjælpe mig


Jeg har en PIC16F877A hvor på jeg gerne skal har lavet halvdelen af PORTC(RC0-RC3) og halvdelen af PORTD(RD0-RD3) om til en PORTx. Men den rasteren halvdele (RC4-RC7 og RD4-RD7) skal kunne bruges normalt


Jeg tænkte på om man måske kan gøre det vha. #define men ved ikke lige hvordan?


"Tim" skrev i en meddelelse news:ZLCsd.77$ snipped-for-privacy@news.getnet.dk...

void port_r(int value) { PORTC = value

tak for dit svar men vil du ikke uddybe det lidt

hvordan skal det lave halvdelen af PORTC(RC0-RC3) og halvdelen af PORTD(RD0-RD3) om til en stor port ?

"Tim" skrev i en meddelelse news:G_Dsd.281$ snipped-for-privacy@news.getnet.dk...

Ok jeg misfortod dit første spørgsmål. Her kommer et nyt

void out(int byte) { RC0 = byte & 1; RC1 = byte & 2; RC2 = byte & 4; RC3 = byte & 8; RD0 = (byte >> 4) & 16; RD1 = (byte >> 4) & 32; RD2 = (byte >> 4) & 64; RD3 = (byte >> 4) & 128; }

Som sagt husker jeg ikke lige hvilken vej >> skal vende for at shifte 4 bit op. Mener at logisk AND er &. Hvis den brokker sig så er det 2 stk && der skal til.

-- Tom

Hvis din port x skal defineres som X0-X3 tilhørende C0-C3 og X4-X7 tilhørende D0-D3, så kan du gøre noget der ligner følgende...

static char PortCImage = 0; static char PortDImage = 0;

void WritePortX(char data);

int main(int argc, char *argv[]) { // Skriv decimalt 100 til port X (C0-C3,D0-D3) WritePortX(100);

return 0; }

void WritePortX(char data) { PortCImage = (PortCImage & 0xF0) | (data & 0x0F); PortDImage = (PortDImage & 0xF0) | ((data & 0xF0) >> 4);

PORTC = PortCImage; PORTD = PortDImage; }

/Thomas

My e-mail is composed in the following manner: .(a)privat(dot)dk

Hej

M.v.h. Lasse Madsen

Tjaee, eller:

/Thomas

My e-mail is composed in the following manner: .(a)privat(dot)dk

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required