Erstmal Hallo an alle Forenuser, ich habe angefangen mich mit µ-Controllern zu beschäftigen und freue mich nun , mich mit euch hier in diesem Forum austauschen zu können. Ich habe ein kleines µ-Controller Programm zum testen geschrieben, und würde euch nun bitten es kurz zu bewerten, auf Funktion zu prüfen und Verbesserungsvorschläge zu geben, bevor ich es auf den Controller überspiele. Ich möchte gernen einen Attiny 2313 verwenden, mit einem externen 8MHZ Kristall. Das Programm soll die Serielle Schnittstelle regelmäßig in einer Schleife auslesen und bei dem anliegenden Datensignal "1" im Uart Data Register, Ausgänge verzögert setzten.
1 | |
2 | |
3 | //This File check the Seriell Reciever Input and switch corresponding
|
4 | //Outputs
|
5 | |
6 | #include <avr/io.h> |
7 | #define F_CPU 8000000UL
|
8 | #include <util/delay.h> |
9 | #include <avr/interrupt.h> |
10 | |
11 | |
12 | void init_ports(void); |
13 | void init_USART(unsigned int ubrr_value); |
14 | void Aus_Ein_Next(); |
15 | |
16 | |
17 | /////////////////////////////////////////////////////////////////////////////////////
|
18 | |
19 | int main(void) |
20 | {
|
21 | // Initialisation Ports, seriell Transmission, Interrupts
|
22 | init_ports(); |
23 | |
24 | init_USART(51);//8M/(16*9600)-1 |
25 | //sei();//Global Interrupt Enable
|
26 | /////////////////////////////////////////////////////////////////////////////////////
|
27 | //Check UDR DATA and select Programm
|
28 | while(1) |
29 | {
|
30 | if ( UDR == 1) |
31 | Aus_Ein_Next() |
32 | |
33 | }
|
34 | }
|
35 | |
36 | /////////////////////////////////////////////////////////////////////////////////////
|
37 | void init_ports(void) |
38 | {
|
39 | //Port D pins 1 to 3 Config as Digital Out
|
40 | |
41 | DDRD=(1<<DDD4)|(1<<DDD5)|(1<<DDD6); |
42 | }
|
43 | /////////////////////////////////////////////////////////////////////////////////////
|
44 | void init_USART(unsigned int ubrr_value) |
45 | {
|
46 | //Set Baud rate
|
47 | UBRRL = (unsigned char) ubrr_value; |
48 | UBRRH = (unsigned char) (ubrr_value>>8); |
49 | |
50 | /*Set Frame Format
|
51 | >> Asynchronous mode
|
52 | >> No Parity
|
53 | >> char size 8
|
54 | */
|
55 | |
56 | UCSRC=3<<UCSZ0; // contains UCSZ1,too ( leftshift of 3 not 1) |
57 | |
58 | |
59 | //Enable The receiver, transmitter and interrupt
|
60 | UCSRB=(1<<RXEN)|(1<<TXEN); //(1 << RXCIE) for interrupts (sreg 1 rxc, in ucsra 1) |
61 | }
|
62 | /////////////////////////////////////////////////////////////////////////////////////
|
63 | void Aus_Ein_Next() |
64 | {
|
65 | |
66 | PORTD = 1<< PB4 ; // PB4 --> AUS |
67 | _delay_ms(2000); |
68 | PORTD = 1<< PB5 ; // PB5 --> EIN |
69 | _delay_ms(2000); |
70 | PORTD = 1<< PB6 ; // PB6 --> NEXT |
71 | }
|
Ich freue mich auf Eure Antworten! MfG Domi