totti
11.01.2006, 10:47
Hi zusammen,
habe gerade ein Projekt mit einem MSP430F413 am Laufen. Ich soll einen Kartenleser verwirklichen. Bin jetzt auch schon weit gekommen, nun steh ich aber vor einem Problem und weiß nicht weiter. Ich habe einen Interrupt geschrieben, der wenn der Takt kommt und ein Interrupt ausgelöst wird eine ! abspeichern soll, falls eine 1 anliegt oder eine 0 falls eine 0 anliegt. Dafür shifte ich das Bit immer wieder eine Stelle nach rechts. Hier der C-Code:
if( TA0CCTL1 & CCIFG ) { // hier TA1???
speicher[byte_counter]>>1; // Inhalt nach rechts
if(P2IN & BIT5) {
speicher[byte_counter] |= BIT7;
}
else {
speicher[byte_counter] &=~ BIT7; // CArry auf 0 gesetzt
}
bit_counter++;
if (bit_counter == 7) {
bit_counter = 0;
byte_counter++;
}
if (byte_counter == 4) {
state = UART;
CCTL1 &=~ CCIE;
}
Wenn 4 Bytes voll sind, soll er herausspringen. Die Daten kommen nachweislich an dem Port an, aber wenn ich den Speicher auslese ist höchstens ein Bit gesetzt. Tippe mal dass das mit dem Shift Befehl zusammenhängt. Hat jmd den Fehler gefunden? Oder weiß jmd ne Alternative? Danke im Voraus
habe gerade ein Projekt mit einem MSP430F413 am Laufen. Ich soll einen Kartenleser verwirklichen. Bin jetzt auch schon weit gekommen, nun steh ich aber vor einem Problem und weiß nicht weiter. Ich habe einen Interrupt geschrieben, der wenn der Takt kommt und ein Interrupt ausgelöst wird eine ! abspeichern soll, falls eine 1 anliegt oder eine 0 falls eine 0 anliegt. Dafür shifte ich das Bit immer wieder eine Stelle nach rechts. Hier der C-Code:
if( TA0CCTL1 & CCIFG ) { // hier TA1???
speicher[byte_counter]>>1; // Inhalt nach rechts
if(P2IN & BIT5) {
speicher[byte_counter] |= BIT7;
}
else {
speicher[byte_counter] &=~ BIT7; // CArry auf 0 gesetzt
}
bit_counter++;
if (bit_counter == 7) {
bit_counter = 0;
byte_counter++;
}
if (byte_counter == 4) {
state = UART;
CCTL1 &=~ CCIE;
}
Wenn 4 Bytes voll sind, soll er herausspringen. Die Daten kommen nachweislich an dem Port an, aber wenn ich den Speicher auslese ist höchstens ein Bit gesetzt. Tippe mal dass das mit dem Shift Befehl zusammenhängt. Hat jmd den Fehler gefunden? Oder weiß jmd ne Alternative? Danke im Voraus