Voor en project op school moeten we een robot maken die bestuurbaar is via het pc keyboard (letters z,q,s,d) dit doorgestuurd via RS232 naar de microcontroller (AT89S52). Nu had ik voorheen nog nooit geprogrammeerd ( alleen beetje in visual basic) en is C compleet nieuw voor mij. Heb ondertussen wat samen geflanst (code trekt waarschijnlijk op niks), maar nu zit ik vast bij de seriele communicatie. Alles werkt tot wanneer ik aan de regel met " invoer = getCharacter (); " ben. Dan krijg ik 2 warnings. Dit is de foutcode op de site van mijn compiler... Hoe krijg ik dit werkend ?
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
| #include <AT89X51.H> #include <stdio.h> #define L1 P2_0 /* pin 1 van motor links */ #define L2 P2_1 /* pin 2 van motor links */ #define R1 P2_2 /* pin 1 van motor rechts */ #define R2 P2_3 /* pin 2 van motor rechts */ #define zoemer P2_4 /* Pin van de zoemer */ #define interrupt1 P3_2 /* externe intterupt (int0) */ /* Functies */ char getCharacter (void); /* lees een letter van de seriele poort */ void sendCharacter (char); /* schrijf een letter van de seriele poort */ void serial_int (void) interrupt 4 { static char chr = '\0'; /* buffer van de letters */ if (RI == 1) /* ontvang interrupt (receive interrupt) */ { chr = SBUF; /* steek de letter in het buffer */ RI = 0; /* reset de receive interrupt om terug te kunnen ontvangen */ TI = 1; /* transmit itterrupt hoog om te zenden */ } else if (TI == 1) /* anders een transmit interrupt */ { TI = 0; /* reset de transmit interrupt */ if (chr != '\0') /* als er iets in het buffer is dan enters toevoegen en nieuwe lijn */ { if (chr == '\r') chr = '\n'; SBUF = chr; /* zet de letters in het transmit buffer */ chr = '\0'; } } } /* Einde functies */ main() { char invoer; SCON = 0x50; /* mode 1, 8-bit uart, enable receiver */ TMOD = 0x20; /* timer 1, mode 2, 8-bit reload */ TH1 = 0xFE; /* reload value for 2400 baud */ ET0 = 0; /* geen interrupts via deze timer */ TR1 = 1; /* start de timer */ TI = 1; /* maak het buffer leeg */ ES = 1; /* zet seriele interrupts aan */ EA = 1; /* zet alle interrupts aan */ while(1){ /* while lus die constant doorlopen wordt */ invoer = getCharacter (); if (interrupt1 == 0){ /* als de externe intterupt 1 is, dan zoemer aanzetten, alle motor ingangen op 1 zodat de dc */ zoemer = 0; /* blokkeren */ L1 = 0; L2 = 0; R1 = 0; R2 = 0; } else { /* anders onderstaande uitvoeren om motors aan te sturen */ zoemer = 1; if (invoer == 0x7A){ /*vooruit door op de letter "z" op het keyboard te duwen */ L1 = 1; R1 = 1; L2 = 0; R2 = 0; } else if(invoer == 0x73){ /*achteruit door letter "s"*/ L2 = 1; R2 = 1; L1 = 0; R1 = 0; } else if(invoer == 0x71){ /*links door letter "q" */ L2 = 1; R1 = 1; L1 = 0; R2 = 0; } else if(invoer == 0x64){ /*rechts door letter "d" */ L1 = 1; R2 = 1; L2 = 0; R1 = 0; } else{ /*stoppen */ L1 = 0; L2 = 0; R1 = 0; R2 = 0; } } } } |