Nach längerem grübeln ist der Code entstanden ich würde mich freuen wenn sich jemand durchschaut und auf anhieb fehler erkennt bzw. ob es so richtig ist wie ich es mir vorgestellt habe.
bei der Warnung bin ich ratlos
../spi-tiny13.c:38: warning: suggest parentheses around assignment used as truth value
weiss aber nichts damit anzufangen.
Also das Programm soll ein SPI slave simulieren und ADC-werte schicken.
Am MISO(PB3) werden dann die Pegel Geschaltet,
Ich bin mir aber nicht Sicher ob der befehl das macht was ich will
Code:
while(GIMSK & (1<<INT0));
//warte bis am Externen Interrupt etwas passiert
Und das ist mein ganzer Code
Code:
#include <avr/io.h> // Namen der IO Register
#include <avr/Interrupt.h> // Interrupt register
#include "adc-init.h"
#include "SPI-init.h"
volatile char MISO_Byte;
volatile int MSB = 0x8000;
ISR(INT0_vect)
{
if(MISO_Byte == 1)SPI_MISO_PORT |= (1<<SPI_MISO_PB3); //Pin Miso high
else SPI_MISO_PORT &= ~(1<<SPI_MISO_PB3);
}
int main(void)
{
uint16_t adcval;
ADC_Init();
/*Externen Interrupt-Init*/
MCUCR = (1<<ISC01)|(1<<ISC00);
//Interrupt auslösen wenn Steigende flanke ist
GIMSK = (1<<INT0); // Interrupt erlauben
GIFR = (1<<INTF0);
while( 1 ) {
adcval = ADC_Read(0); // Kanal 0
// mach was mit adcval
adcval = ADC_Read_Avg(2, 4); // Kanal 2, Mittelwert aus 4 Messungen
// mach was mit adcval
MISO_Byte = MSB | adcval;
if(!(SPI_SS_PIN1 & (1<<SPI_SS_PB1)))// Wenn SS(PB1) auf low geht start der Übertragung
{
==>c35 for(uint16_t a =15 ; a = 0 ; a--)//Warning: suggest parentheses around assignment used as truth value
{
if(MISO_Byte & MSB)SPI_MISO_PORT |= (1<<SPI_MISO_PB3);
else SPI_MISO_PORT &= ~(1<<SPI_MISO_PB3);
while(GIMSK & (1<<INT0));
//warte bis am Externen Interrupt etwas passiert
MISO_Byte<<=1;// Bit nach Links schieben
}
}
else;
}
return 0;
}
Ich bedanke mich schonmal für die Kritik :P
MfG Kluski
Lesezeichen