Stap 7: Het genereren van willekeurige getallen
Nu we kunt gegevens op een individuele LED dobbelstenen display uitvoeren, moeten we een manier van het genereren van een willekeurig getal.
Wiskundig, is het genereren van een echt willekeurig getal een zeer complexe oefening. In onze eenvoudige schakeling van de PIC, kunnen we een willekeurig getal genereren door een paar middelen;
- Een schijnbaar willekeurig getal kan worden verkregen door timing hoelang de knop is ingedrukt, met behulp van een timer die zeer snel verhoogd. (Het zou een zeer zeldzame persoon die kan houd de knop ingedrukt gedurende precies 2243 mS elke keer).
- Afwisselend, kunnen we een wiskundige pseudo-willekeurige nummer generator uitvoeren. Dit vereist het gebruik van vermenigvuldiging en deling. Een pseudo-willekeurige generator genereert een zeer lange reeks getallen die uiteindelijk wordt herhaald, na vele cycli.
In ons project is de eenvoudigste methode die we gebruiken kunnen om een willekeurig getal genereren om te proeven van de interne timer (TMR0), die voortdurend op ¼ van de kloksnelheid (ongeveer 256KHz) is verhoogd, en op te slaan in een variabele continu, zo lang als de knop ingedrukt wordt gehouden.
Onze PIC 16F84 of 16F88 microprocessor heeft 68 geheugenlocaties die kunnen worden gebruikt als variabelen. Als u wilt definiëren een variabele, we gewoon te verklaren een constante die naar een bepaalde geheugenlocatie verwijst en getallen worden opgeslagen op de geheugenlocatie van dat zoals vereist.
Een korte code routine voor het uitvoeren van deze functie zou als volgt;
; een locatie in het geheugen voor het opslaan van onze willekeurig getal RandomA EQU 30; geheugenadres te definiëren ; een willekeurig getal opslaan Button_Loop MOVFW TMR0; krijg de dagwaarde van de timer MOVWF RandomA; opslaan in RandomA BTFSS PortB, 0; De knop is nog steeds beneden? GOTO Roll_Down; Nee, springen en traag ; onderaan het scherm OPROEP Display_Result; Ja, het weergeven van de huidige worp OPROEP Short_Delay; wacht een tijdje CLRF VentouxTT; beide dobbelstenen weer duidelijk CLRF DieB GOTO Button_Loop; en loop weer. Roll_Down:; de rest van het programma gaat hier. ; RandomA bevat een nummer dat is willekeurig geselecteerd ; afhankelijk van hoe lang de knop is ingedrukt. |