Hallo
Ich möchte zwei Mikrocontroller über uart kommunizieren lassen.
Wenn ich einen Taster drücke soll auf dem anderen eine LED angehen.
Wenn ich den MC an den PC anschließe kann ich mit den Tasten 0 bis 1
Zeichen an das Terminal senden und wenn ich eine 0 oder eine 1 über das
Terminal eintippe leuchten auf dem MC die Lampen 0 und 1 auf.
Verbinde ich die beiden MC untereinander passiert leider nichts.
Es leuchten aber die rs232 Kontrolllampen auf, beim senden und
empfangen.
Ich verwende einen at90can128 über avrispmkII.
Meine C Kenntnisse beschränken sich auf Basiswissen.
Ich bin froh das ich es überhaupt zu Ergebnissen gebracht habe. Bietet
diese Aufgabe doch eine menge Stolperfallen..
gruß carlyle
1 | #include <avr/io.h>
|
2 | #define F_CPU 16000000
|
3 | #define BAUD 9600
|
4 | #include "EB128_BBS2.h"
|
5 | #include <util/delay.h>
|
6 | #include "lcd.c"
|
7 |
|
8 | void uart_init()
|
9 | {
|
10 | //16mhz quarz extern
|
11 | //fuses ok
|
12 | //8bit keine parität 1 stopbit
|
13 | UBRR1H = (unsigned char) (((F_CPU/(16L*BAUD))-1) >> 8);
|
14 | UBRR1L = (unsigned char) ((F_CPU/(16L*BAUD))-1) & 0xff;
|
15 | UCSR1C = (0<<UMSEL1) | (0<<UPM1) | (0<<USBS1) | (1<<UCSZ1) | (1<<UCSZ0);
|
16 | UCSR1B = (1<<RXEN1) | (1<<TXEN1);
|
17 | }
|
18 |
|
19 | void uart_putc(unsigned char c)
|
20 | {
|
21 | while ( ! ( UCSR1A & (1<<UDRE1))){
|
22 | ;
|
23 | }
|
24 | UDR1 = c; // TRX1
|
25 | }
|
26 |
|
27 |
|
28 |
|
29 | void uart_puts(char * s)
|
30 | {
|
31 | while (*s)
|
32 | {
|
33 | uart_putc(*s++);
|
34 | }
|
35 | }
|
36 |
|
37 | unsigned char uart_getc()
|
38 | {
|
39 | return (UCSR1A & (1 << RXC1)) ? (char) UDR1 : 0; //RX1
|
40 | }
|
41 |
|
42 | int main(void)
|
43 | {
|
44 | DDRA=0xff;
|
45 | DDRB=0xff;
|
46 | DDRC=0xff;
|
47 | DDRE=0x00;
|
48 | DDRG=0x00;
|
49 |
|
50 | uart_init();
|
51 |
|
52 | while(1)
|
53 | {
|
54 | char get;
|
55 | get = uart_getc();
|
56 |
|
57 | if(get == 0x30) {
|
58 |
|
59 | LED = 0b00000001;
|
60 |
|
61 | }
|
62 |
|
63 | if(get == 0x31)
|
64 | {
|
65 | LED = 0b00000010;
|
66 | }
|
67 |
|
68 | if(TASTEN == 0b00000001)
|
69 | {
|
70 | char put = 0x30;
|
71 | uart_putc(put);
|
72 | }
|
73 |
|
74 | if(TASTEN == 0b00000010)
|
75 | {
|
76 | char put = 0x31;
|
77 | uart_putc(put);
|
78 | }
|
79 | }
|
80 |
|
81 | return 0;
|
82 | }
|