Hallo zusammen: ich möchte einen AT89C5131 mit 12 MHz den FS20 Empfänger von ELV (FS20WUE)über UART verbinden. Die Kommunkation mit einem Terminalprogramm am PC funktioniert, wenn ich jedoch den gleichen Befehl vom Mikrocontroller per UART an den FS20WUE sende, erhalte ich vom FS20WUE keine Reaktion. Der FS20WUE hängt am seriellen Port P3.0/P3.1, parallel dazu ist ein MAX232 angeschlossen, mit dem ich die Daten am PC empfangen kann. Hat jemand eine Idee, woran es liegen könnte?
1 | #include <at89c5131.h> |
2 | |
3 | void Uart_Init(crystal_t systemCrysal) |
4 | {
|
5 | // init uart
|
6 | SCON |= 0x50; // SM1 (2^6) = 1; REN (2^4) = 1; |
7 | |
8 | //-------------------------------------------------
|
9 | // Timer2 init
|
10 | T2CON |= 0x30; // TCLK (2^4) = 1; RCLK (2^5) = 1; |
11 | TR2 = 1; // Timmer2 run T2CON 2^2 |
12 | |
13 | if(systemCrysal == _12MHz) |
14 | {
|
15 | // Reloadwert fuer 12MHz Quarz
|
16 | RCAP2H = 0xFF; |
17 | RCAP2L = 0xB2; |
18 | }
|
19 | else if (systemCrysal == _24MHz) |
20 | {
|
21 | // Reloadwert fuer 24MHz Quarz
|
22 | RCAP2H = 0xFF; |
23 | RCAP2L = 0x66; |
24 | }
|
25 | else {} |
26 | |
27 | //-------------------------------------------------
|
28 | TI = 1; // SCON; Ermoeglicht das Benutzen von printf() |
29 | }
|
30 | |
31 | void serial_send(unsigned char dat){ |
32 | while(!TI); |
33 | TI = 0; |
34 | SBUF = dat; |
35 | }
|
36 | |
37 | unsigned char serial_read(){ |
38 | while(!RI); |
39 | RI = 0; |
40 | return SBUF; |
41 | }
|
42 | |
43 | |
44 | |
45 | void main (void){ |
46 | |
47 | |
48 | Uart_Init (_12MHz); |
49 | |
50 | serial_send (0x02); |
51 | serial_send (0x01); |
52 | serial_send (0xF0); |
53 | |
54 | |
55 | while(1){ |
56 | |
57 | |
58 | serial_read(); |
59 | P2_0 = RI; |
60 | P2_1 = TI; |
61 | |
62 | }}
|