Stap 5: Het ontwerp van de software
Dat is het voor de hardwareontwerp, nu moeten we het ontwerpen van de software waarmee onze hardware geworden op een dobbelsteen.
Een ding dat u waarschijnlijk al gemerkt was dat de hardware implementatie werd gedaan in een gestructureerde, wijze van de bouwsteen. We moeten onze softwareontwerp op dezelfde manier benaderen.
Bij het ontwerpen van onze software, kunt u beginnen met het verdelen van het systeem in functionele luchtruimblokken. Er is een gemakkelijk divisie het probleem over een ingang (de knop), enkele bewerkingen (eigenlijk de dobbelstenen rollen), en een uitgang (de LEDs) verdeelt.
Laten we beginnen met het opbouwen van het deel van de uitvoer van onze code eerst. Het is de meest visuele component, en het laat ons 'zet sommige loopt op het bord' vroeg. Voordat we al beginnen, kunnen praten een beetje over de microprocessor-instructieset en de architectuur.
Het bereik van de PIC van microprocessoren implementeren een verminderd Instruction Set Computer (RISC). Na een RISC-kern is een factor die deze CPU's zo snel maakt. Een nadeel van het hebben van een RISC-kern is dat het bereik van de PIC van microprocessoren alleen ten uitvoer leggen ongeveer 37 instructies, dus duurt soms meer instructies om dingen te doen, en vaak oplossingen niet altijd lijken te zijn zo intuïtief als op, bijvoorbeeld een Z80 of 6502.
In de foto is het primaire werken register het register 'W'. De meeste van onze activiteiten gebruiken het register 'W' op een bepaalde manier. Neem, bijvoorbeeld, een aantal commando's dat zal de uitgang van een binaire patroon '10101010' naar poort B.
MOVLW B "10101010"
MOVWF PortB
Eerst, het woord dat we willen schrijven in het 'W' register, wordt geladen en vervolgens het register 'W' is geschreven naar poort B.
We kunnen deze volgorde van de bewerkingen gebruiken om de uitgang van de bit-patroon als u wilt weergeven een dobbelsteen van 6. Uit het schema, kunnen wij zien dat de eerste sterven is aangesloten op poort A, bits 0-3 op de volgende manier;
Poort A(0) - centrum LED
A.1 - poort hoek LEDs (1) en (3).
Port A(2) - hoek LEDs (2) en (4).
Poort a, punt 3 - middelste LEDs (5) en (6).
Als u wilt weergeven van het patroon voor een 6, alle hoek LEDs, en alle Midden LEDs zijn op, maar de centrum-LED is uitgeschakeld. Dit komt neer op bitpatroon van b '00001110'. Dus, als u wilt weergeven een 6, voeren wij gewoon de instructies;
MOVLW B "00001110"
MOVWF PortA
Evenzo als u wilt weergeven een 1 (het centrum LED), zouden we gebruiken;
MOVLW B '00000001'
MOVWF PortA
Wij hebben geweest over de 6 als 00001110, en 1 als 00000001. Het kan verwarrend zijn voor het gebruik van nummers zoals dit, vooral wanneer ze niet echt nummers zijn, ze zijn gewoon beetje patronen. Meeste monteurs toestaan om te verlichten de verwarring, het gebruik van 'Constanten' om een toewijzing tussen een naam en een nummer. In het geval van onze dobbelstenen weergeven, kunnen we het woord Die6 in plaats van 00001110, of Die1 in plaats van 00000001 gebruiken.
Een lijst van constanten die we zouden kunnen gebruiken in onze display zou worden;
Die1 B '00000001'
Die2 B '00000100'
Die3 B "00000101"
Die4 B "00000110"
Die5 B "00000111"
Die6 B "00001110"
DieOff B "00000000"
B '00001111' dieTest
De laatste 2 posten (DieOff en DieTest) zijn handig voor het display uitschakelen of controleren of alle LEDs operationeel bij het opstarten zijn door te draaien aan alle LEDs op.
Nu dat we hoe om een aantal te tonen weten, moeten we de bouwsteen produceren waarmee ons te voorzien van een nummer, en de passende bitpatroon in de weergave wordt geladen.
Voordat we deze display routine bespreken, dient te worden vermeld dat er best software is geschreven in een modulaire mode, een routine op een moment. Hierdoor kan de functionaliteit worden toegevoegd component door de component. Dan kunnen we ons concentreren op het schrijven van elk onderdeel afzonderlijk, waardoor complexe software worden gebouwd laag voor laag.
Terug naar onze bouwsteen voor het weergeven van een dobbelsteen. Een routine om de display-functionaliteit te implementeren kan uitzien;
; Ten eerste, de vereiste constanten definiëren... Die1 EQU B '00000001'; Sommige constanten zijn gedefinieerd Die2 EQU B '00000100'; voor de verschillende LED-DOBBELSTENEN Die3 EQU B '00000101'; bit patronen Die4 EQU B '00000110' Die5 EQU B '00000111' Die6 EQU B '00001110' DieOff EQU B "00000000"; ALLE LEDs uitgeschakeld DieTest EQU B '00001111'; ALLE LEDs op ; Disp_Dice1 - zorgt ervoor dat een bepaald nummer moet worden weergegeven op een dobbelsteen gezicht ; Ingang: Register W ; Output: Een LED patroon op de dobbelsteen. ; Commentaar: voor de waarden van register 'W'; 0 = alle LEDs uit ; 1 – 6 = weergegeven van het patroon voor 1-6 ; 7 = alle LEDs ON (Test-modus) ; DISP_DICEA OPROEP DIE_LOOKUP MOVWF PortA TERUGKEER ; Dit is een vertakkende opzoektabel. Kortom, welke waarde wordt doorgegeven via het W-register is ; toegevoegd aan het programma-item (PCL). Deze vervolgens resulteert in de juiste waarde voor de ; resultaat van de zoekactie in het W-register, en de controle worden teruggestuurd naar de roeping wordt geladen ; sub routine. ; sleutel Als een 2 het W-register, de ADDWF PCL percoleren, veroorzaakt f werking 2 ; toegevoegd aan het huidige instructieregister waardoor de RETLW Die2 instructie die moet worden uitgevoerd. ; Dit resulteert in de constante Die2 (B '00000100') moet worden geladen in het W-register, en ; controle wordt geretourneerd naar het aanroepende programma. DIE_LOOKUP ADDWF PCL, f RETLW DieOff RETLW Die1 RETLW Die2 RETLW Die3 RETLW Die4 RETLW Die5 RETLW Die6 RETLW DieTest |
De meeste van de bovenstaande aanbieding is commentaar (lijnen voorafgegaan door het teken ';'), dus het moet kunnen worden gevolgd.
De display routine kan worden gebruikt door het uitvoeren van de volgende code;
MOVLW 4
OPROEP DISP_DICEA