Na, das könnte -ins Unreine geschrieben- so aussehen:
DATA ist Port1.3
SCK ist Port1.4
1 | #define DATA (1 << 3)
|
2 | #define SCK (1 << 4)
|
3 |
|
4 | unsigned char meinkrempel(void)
|
5 | {
|
6 | unsigned char i,val=0;
|
7 |
|
8 | P1OUT |= DATA; //release DATA-line
|
9 |
|
10 | for (i=0x80;i>0;i/=2) //shift bit for masking
|
11 | {
|
12 | P1OUT |= SCK; //clk for SENSI-BUS
|
13 | if (P1IN & DATA)
|
14 | val |= i; //read bit
|
15 | P1OUT &= ~SCK;
|
16 | }
|
17 |
|
18 | if (ack)
|
19 | P1OUT &= ~DATA; //in case of "ack==1" pull down DATA-Line
|
20 | P1OUT |= SCK; //clk #9 for ack
|
21 |
|
22 | nop();nop();nop(); //pulswith approx. 5 us
|
23 |
|
24 | P1OUT &= ~SCK;
|
25 | P1OUT |= DATA; //release DATA-line
|
26 |
|
27 | return val;
|
28 | }
|
Das wird so aber nicht funktionieren, da DATA bidirektional verwendet
werden soll ... dazu musst Du auch noch die Portrichtung umschalten. Das
erfolgt mit
P1DIR |= DATA; // Ausgang
P1DIR &= ~DATA; // Eingang
Kann es sein, daß der Code von einem µC mit Open-Collector-Ausgängen
stammt?
Was ist "ack"?