pic16f hjælp!

Dec 05, 2004 6 Replies
Jump to replies (6)

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