Auch auf die Gefahr hin, dass ich einen Preis für den schäbigsten Code
bekomme, möchte ich hier in diesem (älteren) Thread meinen Code posten,
der es mir zusammen mit einem Atmega328 (20 MhZ) gerade ermöglicht hat,
wieder auf den HC06 zugreifen zu können, indem der UART "einfach"
manuell programmiert wurde. Zunächst hatte ich vor, die ganze Sache in
Assembler zu implementieren, aber der Compiler hat aus dem C-Code einen
ausreichend genauen Code (für 20 MhZ(!)) basteln können.
1 | void uart_reparatur(void)
|
2 | {
|
3 | DDRD |= (1<<PD1); //TXD=Ausgang
|
4 |
|
5 | //Startbit
|
6 | PORTD &=~ (1<<PD1); //0
|
7 | _delay_us(1);
|
8 | //A 65 0100 0001
|
9 | PORTD |= (1<<PD1); //1
|
10 | _delay_us(1);
|
11 | PORTD &=~ (1<<PD1); //0
|
12 | _delay_us(1);
|
13 | PORTD &=~ (1<<PD1); //0
|
14 | _delay_us(1);
|
15 | PORTD &=~ (1<<PD1); //0
|
16 | _delay_us(1);
|
17 | PORTD &=~ (1<<PD1); //0
|
18 | _delay_us(1);
|
19 | PORTD &=~ (1<<PD1); //0
|
20 | _delay_us(1);
|
21 | PORTD |= (1<<PD1); //1
|
22 | _delay_us(1);
|
23 | PORTD &=~ (1<<PD1); //0
|
24 | _delay_us(1);
|
25 | //Stopbit
|
26 | PORTD |= (1<<PD1); //1
|
27 | _delay_us(1);
|
28 |
|
29 | _delay_us(5);
|
30 |
|
31 |
|
32 | //Startbit
|
33 | PORTD &=~ (1<<PD1); //0
|
34 | _delay_us(1);
|
35 | //T 84 0101 0100
|
36 | PORTD &=~ (1<<PD1); //0
|
37 | _delay_us(1);
|
38 | PORTD &=~ (1<<PD1); //0
|
39 | _delay_us(1);
|
40 | PORTD |= (1<<PD1); //1
|
41 | _delay_us(1);
|
42 | PORTD &=~ (1<<PD1); //0
|
43 | _delay_us(1);
|
44 | PORTD |= (1<<PD1); //1
|
45 | _delay_us(1);
|
46 | PORTD &=~ (1<<PD1); //0
|
47 | _delay_us(1);
|
48 | PORTD |= (1<<PD1); //1
|
49 | _delay_us(1);
|
50 | PORTD &=~ (1<<PD1); //0
|
51 | _delay_us(1);
|
52 | //Stopbit
|
53 | PORTD |= (1<<PD1); //1
|
54 | _delay_us(1);
|
55 |
|
56 | _delay_us(5);
|
57 |
|
58 | //Startbit
|
59 | PORTD &=~ (1<<PD1); //0
|
60 | _delay_us(1);
|
61 | //+ 43 0010 1011
|
62 | PORTD |= (1<<PD1); //1
|
63 | _delay_us(1);
|
64 | PORTD |= (1<<PD1); //1
|
65 | _delay_us(1);
|
66 | PORTD &=~ (1<<PD1); //0
|
67 | _delay_us(1);
|
68 | PORTD |= (1<<PD1); //1
|
69 | _delay_us(1);
|
70 | PORTD &=~ (1<<PD1); //0
|
71 | _delay_us(1);
|
72 | PORTD |= (1<<PD1); //1
|
73 | _delay_us(1);
|
74 | PORTD &=~ (1<<PD1); //0
|
75 | _delay_us(1);
|
76 | PORTD &=~ (1<<PD1); //0
|
77 | _delay_us(1);
|
78 | //Stopbit
|
79 | PORTD |= (1<<PD1); //1
|
80 | _delay_us(1);
|
81 |
|
82 | _delay_us(5);
|
83 |
|
84 |
|
85 | //Startbit
|
86 | PORTD &=~ (1<<PD1); //0
|
87 | _delay_us(1);
|
88 | //B 66 0100 0010
|
89 | PORTD &=~ (1<<PD1); //0
|
90 | _delay_us(1);
|
91 | PORTD |= (1<<PD1); //1
|
92 | _delay_us(1);
|
93 | PORTD &=~ (1<<PD1); //0
|
94 | _delay_us(1);
|
95 | PORTD &=~ (1<<PD1); //0
|
96 | _delay_us(1);
|
97 | PORTD &=~ (1<<PD1); //0
|
98 | _delay_us(1);
|
99 | PORTD &=~ (1<<PD1); //0
|
100 | _delay_us(1);
|
101 | PORTD |= (1<<PD1); //1
|
102 | _delay_us(1);
|
103 | PORTD &=~ (1<<PD1); //0
|
104 | _delay_us(1);
|
105 | //Stopbit
|
106 | PORTD |= (1<<PD1); //1
|
107 | _delay_us(1);
|
108 |
|
109 |
|
110 | _delay_us(5);
|
111 |
|
112 | //Startbit
|
113 | PORTD &=~ (1<<PD1); //0
|
114 | _delay_us(1);
|
115 | //A 65 0100 0001
|
116 | PORTD |= (1<<PD1); //1
|
117 | _delay_us(1);
|
118 | PORTD &=~ (1<<PD1); //0
|
119 | _delay_us(1);
|
120 | PORTD &=~ (1<<PD1); //0
|
121 | _delay_us(1);
|
122 | PORTD &=~ (1<<PD1); //0
|
123 | _delay_us(1);
|
124 | PORTD &=~ (1<<PD1); //0
|
125 | _delay_us(1);
|
126 | PORTD &=~ (1<<PD1); //0
|
127 | _delay_us(1);
|
128 | PORTD |= (1<<PD1); //1
|
129 | _delay_us(1);
|
130 | PORTD &=~ (1<<PD1); //0
|
131 | _delay_us(1);
|
132 | //Stopbit
|
133 | PORTD |= (1<<PD1); //1
|
134 | _delay_us(1);
|
135 |
|
136 |
|
137 | _delay_us(5);
|
138 |
|
139 | //Startbit
|
140 | PORTD &=~ (1<<PD1); //0
|
141 | _delay_us(1);
|
142 | //U 85 0101 0101
|
143 | PORTD |= (1<<PD1); //1
|
144 | _delay_us(1);
|
145 | PORTD &=~ (1<<PD1); //0
|
146 | _delay_us(1);
|
147 | PORTD |= (1<<PD1); //1
|
148 | _delay_us(1);
|
149 | PORTD &=~ (1<<PD1); //0
|
150 | _delay_us(1);
|
151 | PORTD |= (1<<PD1); //1
|
152 | _delay_us(1);
|
153 | PORTD &=~ (1<<PD1); //0
|
154 | _delay_us(1);
|
155 | PORTD |= (1<<PD1); //1
|
156 | _delay_us(1);
|
157 | PORTD &=~ (1<<PD1); //0
|
158 | _delay_us(1);
|
159 | //Stopbit
|
160 | PORTD |= (1<<PD1); //1
|
161 | _delay_us(1);
|
162 |
|
163 |
|
164 | _delay_us(5);
|
165 |
|
166 | //Startbit
|
167 | PORTD &=~ (1<<PD1); //0
|
168 | _delay_us(1);
|
169 | //D 68 0100 0100
|
170 | PORTD &=~ (1<<PD1); //0
|
171 | _delay_us(1);
|
172 | PORTD &=~ (1<<PD1); //0
|
173 | _delay_us(1);
|
174 | PORTD |= (1<<PD1); //1
|
175 | _delay_us(1);
|
176 | PORTD &=~ (1<<PD1); //0
|
177 | _delay_us(1);
|
178 | PORTD &=~ (1<<PD1); //0
|
179 | _delay_us(1);
|
180 | PORTD &=~ (1<<PD1); //0
|
181 | _delay_us(1);
|
182 | PORTD |= (1<<PD1); //1
|
183 | _delay_us(1);
|
184 | PORTD &=~ (1<<PD1); //0
|
185 | _delay_us(1);
|
186 | //Stopbit
|
187 | PORTD |= (1<<PD1); //1
|
188 | _delay_us(1);
|
189 |
|
190 |
|
191 | _delay_us(5);
|
192 |
|
193 |
|
194 | //Startbit
|
195 | PORTD &=~ (1<<PD1); //0
|
196 | _delay_us(1);
|
197 | //8 56 0011 1000
|
198 | PORTD &=~ (1<<PD1); //0
|
199 | _delay_us(1);
|
200 | PORTD &=~ (1<<PD1); //0
|
201 | _delay_us(1);
|
202 | PORTD &=~ (1<<PD1); //0
|
203 | _delay_us(1);
|
204 | PORTD |= (1<<PD1); //1
|
205 | _delay_us(1);
|
206 | PORTD |= (1<<PD1); //1
|
207 | _delay_us(1);
|
208 | PORTD |= (1<<PD1); //1
|
209 | _delay_us(1);
|
210 | PORTD &=~ (1<<PD1); //0
|
211 | _delay_us(1);
|
212 | PORTD &=~ (1<<PD1); //0
|
213 | _delay_us(1);
|
214 | //Stopbit
|
215 | PORTD |= (1<<PD1); //1
|
216 | _delay_us(1);
|
217 |
|
218 |
|
219 | }
|