Hallo,
ich bin grad dabei mich mit nem Schieberegister in C zu befassen. Jetzt
hab ich mal ein paar Zeilen geschrieben und wollte es simulieren.
Allerdings dauert die Zuweisung zur Variablen in der while(1)-Schleife
mehrere Minuten mit dem Simulator. Irgendwas passt da nicht!?
Code:
1 | #define F_CPU 16000000UL
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <util/delay.h>
|
5 | #include <stdlib.h>
|
6 | #include <stdint.h>
|
7 |
|
8 | #define sPort PORTB
|
9 | #define sDDR DDRB
|
10 | #define RCK 3
|
11 | #define SCK 1
|
12 | #define SCL 2
|
13 | #define SIN 0
|
14 |
|
15 | extern void carry_out(unsigned char schiebedaten);
|
16 |
|
17 | unsigned char daten;
|
18 |
|
19 | void carry_out(unsigned char schiebedaten)
|
20 | {
|
21 | sPort|=(1<<SCL);
|
22 | for(unsigned char i=7; i>=0; i--)
|
23 | {
|
24 | if(schiebedaten&(1<<i))
|
25 | {
|
26 | sPort|=(1<<SIN);
|
27 | }
|
28 | sPort|=(1<<SCK);
|
29 | sPort&=~(1<<SCK);
|
30 | }
|
31 | }
|
32 |
|
33 | int main(void)
|
34 | {
|
35 | //config outputs
|
36 | sDDR|=((1<<SIN)|(1<<SCK)|(1<<SCL)|(1<<RCK));
|
37 | sPort&=~((1<<SIN)|(1<<SCK)|(1<<SCL)|(1<<RCK));
|
38 |
|
39 | while(1)
|
40 | {
|
41 | daten=daten+1; //hier kommt der Simulator nicht klar
|
42 | carry_out(daten);
|
43 | _delay_ms(500);
|
44 | }
|
45 | }
|
Ob der Rest funktioniert weis ich noch nicht - konnt ich auch noch nicht
testen!
Aber wieso stürzt der Simulator bei einer so einfachen Anweisung ab??
MFG Hans