Guten Abend ich wollte den unten stehenden Code von Peter Dannegger verwenden. Leider habe ich einige Probleme damit. Ich wollte den Code für Debug Ausgaben verwenden bei Programmen wo keine Uart vorgesehen ist. Sollte der Code auch mit Rc Oszillator funktionieren? Wer verwendet den Code Danke und Lg
1 | #define F_CPU 8e6
|
2 | #define BAUD 9600
|
3 | #define STX_PORT PORTB
|
4 | #define STX_BIT 0
|
5 | |
6 | #define TX_SRAM 0
|
7 | #define TX_FLASH 1
|
8 | |
9 | #include <util/delay.h> |
10 | #include <avr/io.h> |
11 | #include <avr/pgmspace.h> |
12 | |
13 | void sputchar( uint8_t c ) |
14 | {
|
15 | c = ~c; |
16 | STX_PORT &= ~(1<<STX_BIT); // start bit |
17 | for( uint8_t i = 10; i; i-- ){ // 10 bits |
18 | _delay_us( 1e6 / BAUD ); // bit duration |
19 | if( c & 1 ) |
20 | STX_PORT &= ~(1<<STX_BIT); // data bit 0 |
21 | else
|
22 | STX_PORT |= 1<<STX_BIT; // data bit 1 or stop bit |
23 | c >>= 1; |
24 | }
|
25 | }
|
26 | |
27 | void sputs( char *pt, uint8_t flag ) |
28 | {
|
29 | uint8_t val; |
30 | |
31 | for(;;){ |
32 | if( flag ) |
33 | val = pgm_read_byte( pt ); |
34 | else
|
35 | val = *pt; |
36 | if( val == 0 ) |
37 | return; |
38 | sputchar( val ); |
39 | pt++; |
40 | }
|
41 | }
|
42 | |
43 | prog_char ftext[] = { "Hallo Peter\n" }; |
44 | |
45 | int main() |
46 | {
|
47 | for(;;){ |
48 | sputs( ftext, TX_FLASH ); |
49 | sputs( "Text im SRAM\n", TX_SRAM ); |
50 | _delay_ms( 1000 ); |
51 | }
|
52 | }
|