Hallo, ich will gerade eine RS232 Kommunikation mit dem C167 programmieren. Dafür sind ja Pin3.10 und P3.11 vorgesehen. Jetzt habe ich aber das Problem, dass die Interruptfunktionalität nicht funktioniert. Das manuelle Senden funktioniert. Sicherlich habe ich wieder etwas bei der Initialisierung vergessen. Anbei mal der Code. Habt ihr eine Idee, warum die ISR nicht ausgelöst wird???
1 | unsigned int counter = 0; |
2 | sbit sb_Dir_TX = DP3^10; |
3 | sbit sb_Pin_TX = P3^10; |
4 | sbit sb_Dir_RX = DP3^11; |
5 | |
6 | |
7 | void init_RS232(void) |
8 | {
|
9 | |
10 | sb_Dir_TX = 1; |
11 | sb_Pin_TX = 1; |
12 | sb_Dir_RX = 0; |
13 | S0BG = 0x0020; // 38400Baud |
14 | |
15 | S0TIC = 0x0080; |
16 | S0RIC = 0x0000; |
17 | S0CON = 0x8011; |
18 | S0REN = 1; // receiver enable |
19 | S0TIE = 1; // enable transmit interrupt |
20 | S0RIE = 1; // enable receive interrupt |
21 | |
22 | }
|
23 | |
24 | void send_RS232(void) |
25 | {
|
26 | S0TBUF = 'a'; |
27 | P2 ^= 0x000f; |
28 | while(!S0TIR); |
29 | S0TIR = 0; |
30 | S0TBUF = 'c'; |
31 | }
|
32 | |
33 | void rs232_SendInterrupt(void) interrupt 0x2A |
34 | {
|
35 | counter++; |
36 | P2 ^= 0x000f; |
37 | if (counter <= 12) |
38 | {
|
39 | while(!S0TIR); |
40 | S0TIR = 0; |
41 | S0TBUF = 'c'; |
42 | |
43 | }
|
44 | }
|
45 | |
46 | |
47 | void rs232_ReceiveInterrupt(void) interrupt 0x2B |
48 | {
|
49 | P2 ^= 0x000f; |
50 | //S0RBUF
|
51 | }
|
52 | |
53 | void main(void) |
54 | {
|
55 | IEN = 0; // global interrupt disable |
56 | |
57 | |
58 | DP3 |= 0xFFFF; |
59 | ODP3 = 0x0000; |
60 | |
61 | IEN = 1; // global interrupt enable |
62 | init_RS232(); |
63 | send_RS232(); |
64 | |
65 | while(1); |
66 | }
|
Danke Nobbie