Stap 2: Broncode uitgelegd
Het programma loopt als volgt:Start:
Duidelijke registers
Gegevens richting instellen op poorten van belang
Loop0:
Als geen input, produceren geen output
als input, blijven
Note0:
is input = note0?
zo ja, produceren belastingswaarden in timer registers waarmee de uitgangsfuncties de juiste blokgolf-frequentie
Als dit niet het geval is, blijven
(Het produceren van een lus van de NoteX voor elke mogelijke opmerking over 8 octaven)
Hallo:
verhoging output hoog (1)
timerhi:
bepaalt hoe lang de uitvoer blijft hoog
Lo:
Render uitvoer lage (0)
timerlo:
bepaalt hoe lang de uitvoer blijft laag (0)
ingang:
controleren om te zien als de ingang veranderd
zo ja, gebruik vuile trucs om terug naar loop0
Als dit niet het geval is, ga naar hi
Er zijn vele "rjmp eilanden", waarmee het programma terug te keren naar het begin... deze microcontroller biedt geen ondersteuning voor de jmp opcode en rjmp kunnen alleen brengen u naar een functie binnen een afstand van een bepaald aantal instructies. We lossen dit door "zaaien" het programma met rjmp verklaringen die zijn overgeslagen op de weg "naar beneden" programma, maar kan worden gebruikt om het klimmen back-up van het programma moet worden gestart.
BUG waarschuwing: Ergens 3/4 de weg naar beneden de schaal, er is een cluster van een paar (3-4) opmerkingen die niet terecht. Uit de 3 waarden gebruikt voor r30, ik vermoed dat de hoogste gebruikt is onjuist (te laag), ik waarschijnlijk misrekend hetaantal klok cycli ergens, of misschien een verkeerde waarde voor r29 ergens te zetten... Ik ga te werken rond het, als je wilt repareren (en me vertellen waar de fout was!)
INEFFICIËNTIE waarschuwing: Ik weet het, ik kon gewoon gebruikt hebben PWM en sommige EEPROM-tabel, maar tegen de tijd dat ik dacht, was het al werkzaam op deze manier.