Hallo, immer nachdem in folgenden Programmcode in den MC geladen habe, kann ich keinen weiteren Programmcode mehr in den MC uploaden. Normalerweise kann man ja einen MC x-beliebige mal wieder beschreiben. Ich hab nun einen neuen. Des Programmcode upgeloaded. Das geliche Problem. Kann nix mehr uploaden. Das Programm soll eine Binärzahl in ein Schieberegister einlesen! MC = Attiny13 Programmierplattform: Atmel Studio 4 (aus Franzis Lernpaket) Hier der Code:
1 | .include "tn13def.inc" |
2 | |
3 | rjmp Anfang |
4 | Anfang: |
5 | |
6 | .def temp1 = r16 |
7 | .def temp2 = r17 |
8 | |
9 | .equ SCHIEBE_DDR = ddrb |
10 | .equ SCHIEBE_PORT = portb |
11 | .equ RCK = 3 |
12 | .equ SCK = 1 |
13 | .equ SCL = 2 |
14 | .equ SIN = 0 |
15 | |
16 | ldi temp1, LOW(RAMEND) ; Stackpointer initialisieren |
17 | out SPL, temp1 |
18 | |
19 | |
20 | ; |
21 | ; Die Port Pins auf Ausgang konfigurieren |
22 | ; |
23 | ; ldi temp1, (1<<RCK) | (1<<SCK) | (1<<SCL) | (1<<SIN) ; Anm.1 |
24 | ; out SCHIEBE_DDR, temp1 |
25 | |
26 | sbi SCHIEBE_DDR,RCK |
27 | sbi SCHIEBE_DDR,SCK |
28 | sbi SCHIEBE_DDR,SCL |
29 | sbi SCHIEBE_DDR,SIN |
30 | |
31 | ; |
32 | ; die Clear Leitung am Schieberegister auf 1 stellen |
33 | ; |
34 | sbi SCHIEBE_PORT, SCL |
35 | |
36 | ; |
37 | ; Ein Datenbyte ausgeben |
38 | ; |
39 | loop: |
40 | ldi temp1, 0b11010110 |
41 | rcall Schiebe |
42 | rcall SchiebeOut |
43 | |
44 | |
45 | rjmp loop |
46 | |
47 | ;----------------------------------------------------------------------------- |
48 | ; |
49 | ;Kurze Pause erzeugen |
50 | ; |
51 | SchiebeOut: |
52 | ldi r18,1 |
53 | Warten_an1: |
54 | ldi r19,255 |
55 | Warten_an2: |
56 | ldi r20,255 |
57 | Warten_an3: |
58 | dec r20 |
59 | brne Warten_an3 |
60 | dec r19 |
61 | brne Warten_an2 |
62 | dec r18 |
63 | brne Warten_an1 |
64 | ret |
65 | |
66 | ;----------------------------------------------------------------------------- |
67 | ; |
68 | ; 8 Bits aus temp1 an das Schieberegister ausgeben |
69 | Schiebe: |
70 | push temp2 |
71 | ldi temp2, 8 ; 8 Bits müssen ausgegeben werden |
72 | |
73 | Schiebe_1: |
74 | ; |
75 | ; jeweils das höchstwertige Bit aus temp1 ins Carry-Flag schieben |
76 | ; Je nach Zustand des Carry-Flags wird die Datenleitung entsprechend |
77 | ; gesetzt oder gelöscht |
78 | ; |
79 | rol temp1 ; MSB -> Carry |
80 | brcs Schiebe_One ; Carry gesetzt? -> weiter bei Schiebe_One |
81 | cbi SCHIEBE_PORT, SIN ; Eine 0 ausgeben |
82 | rjmp Schiebe_Clock ; und Sprung zur Clock Puls Generierung |
83 | Schiebe_One: |
84 | sbi SCHIEBE_PORT, SIN ; Eine 1 ausgeben |
85 | |
86 | ; |
87 | ; einen Impuls an SCK zur Übernahme des Bits nachschieben |
88 | ; |
89 | Schiebe_Clock: |
90 | sbi SCHIEBE_PORT, SCK ; Clock-Ausgang auf 1 ... |
91 | cbi SCHIEBE_PORT, SCK ; und wieder zurück auf 0 |
92 | |
93 | dec temp2 ; Anzahl der ausgegebenen Bits runterzählen |
94 | brne Schiebe_1 ; Wenn noch keine 8 Bits ausgegeben -> Schleife bilden |
95 | |
96 | pop temp2 |
97 | ret |
Jemand ne Ahnung dazu?