Forum: Mikrocontroller und Digitale Elektronik UART und Daten Ausgabe Funktion


von Armin P. (armin_p)


Angehängte Dateien:

Lesenswert?

Hallo!Ich habe eine Lösung von ein Aufgabe bekommen aber folgende 
Abschnitt habe ich nicht verstanden besonders wo Frage Zeichen steht.Das 
wäre nett für eine Erklärung!Die gesamte Lösung ist unten.
1
  ISR(INT0_vect)       
2
        {
3
        a=0;            //Zähler auf 0
4
        b=1;     ???????????????
5
        }
6
7
  ISR(TIMER1_COMPA_vect)   
8
 {
9
    PORTA=a^0xff; ?????????????????    
10
    PORTC^=0x02;                // Led:AN/AUS
11
    if (PORTC &= 0x02)   // ????????????
12
        {
13
                a++;
14
                itoa(a,puffer,10);???????????
15
                uart_puts(puffer);?????????????
16
                uart_puts("\n");????????????
17
                }
18
    }
        //////////////////////////////////////
1
 #include <avr/io.h>
2
   #include <avr/interrupt.h>
3
   #include <stdlib.h>
4
   #include <avr/sleep.h>
5
   #include <avr/power.h>
6
7
volatile unsigned char a=0,b=0;
8
9
char puffer [4];                                               // DH haus namme puffer speicher reserv für 4 stellen DT char (ich)
10
11
void uart_puts(char *s);
12
13
void USART_Transmit(unsigned char  data )              //  Wait for empty transmit buffer 
14
{
15
16
while ( !(UCSR2A & (1<<UDRE2)) );                          // Put data into buffer, sends the data 
17
18
UDR2 = data;
19
20
21
    ISR(INT0_vect)                          //Interrupt zum Zähler nullen
22
        {
23
        a=0;                                    //Zähler auf 0
24
        b=1;
25
        }
26
27
28
29
  ISR(TIMER1_COMPA_vect)   
30
 {
31
    PORTA=a^0xff;                    //Ausgabe der halben Perioden
32
    PORTC^=0x02;                // Led:AN/AUS
33
    if (PORTC &= 0x02)               // if ist wie input mit pin lesen (ich)    
34
        {
35
                a++;
36
37
                itoa(a,puffer,10);
38
                uart_puts(puffer);
39
                uart_puts("\n");
40
                }
41
    }
42
43
void uart_puts(char *s)
44
{ 
45
while (*s)                                       ///* so lange *s != '\0' also ungleich dem "String-Endezeichen(Terminator" */
46
        { 
47
        USART_Transmit(*s);
48
        s++;
49
        }
50
}
51
52
int main (void)
53
    {
54
55
    set_sleep_mode(SLEEP_MODE_IDLE);
56
57
          power_all_disable();
58
          power_timer1_enable();
59
          power_usart2_enable();
60
61
62
    DDRC=0x02;                             //    C.1 als Ausgang
63
    DDRA=0xFF;                                     // Alle A als Ausgang
64
    DDRD &=~(1<<PIN1);                             // Alle D als Eingang
65
66
    PORTD=0xFF;
67
 ---------------Timer1(einstellen)---------------------------------
68
                    
69
    TCCR1A=0x0;
70
    TCCR1B|=(1<<CS11)|(1<<WGM12);               //Prescaler 8 und CTC modus
71
    TIMSK1|=(1<<OCIE1A);                         //Interrupt typ eingeschaltet
72
    OCR1A=0xF424;                             // Höchstwert eingestellt
73
-----------------EXTEN INTERRUPT-----------
74
    EIMSK|=(1<<INT0);                   // Pin 0 leitet interrupt ein
75
    EICRA|=(1<<ISC11);          //The falling edge of INTn generates  asynchronously an interrupt request
76
77
78
  ----------//USART2(Konfiguration)----------------------
79
80
        UCSR2B |=(1<<TXEN2);                    //Als Sender geschaltet
81
        UCSR2C|=(0<<USBS2)|(0<<UPM21)|(0<<UPM20)|(1<<UCSZ20)|(1<<UCSZ21)|(0<<UCSZ22); // Auf 8 Bit ausgabe + 1 Stoppbit, Parity Mode = Disable
82
        UBRR2=0x0C ;     //BAUT 4800
83
84
85
    sei();                                                 //globalte interrupts angeschaltet
86
87
    while (1){
88
        sleep_mode();
89
90
                }
91
92
93
        return 0;
94
    }

: Bearbeitet durch User
von Michael (Gast)


Lesenswert?

Die Ausgabe der Daten sollte nicht innerhalb der TIMER1_COMPA ISR 
stattfinden.

Das Programm wird so nicht compilierbar sein, weil die Deklarationen von 
ISR(INT0_vect) und ISR(TIMER1_COMPA_vect) vor den eingebundenen 
Definitionen/Deklarationen stehen.

Gruß
Michael

von Armin P. (armin_p)


Lesenswert?

Hallo,danke erst mal für die Antwort!und Wie kann man das verbessern(im 
Programm zeigen bitte).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.