Stap 5: Code met commentaren voor puls analyzer (enkele notities over de volgende sectie!)
; Selecteer de p24FJ32GA002-processor
.EQU __p24FJ32GA002, 1
; opnemen van de definities van de processor
.include "p24FJ32GA002.inc"
;..............................................................................
; Configuration bits ;..............................................................................
config __CONFIG1 0x3f7f
config __CONFIG2 0x79cf
; Gelijkstelling van registers in namen die gemakkelijk te gebruiken.
.EQU ad1con1, 0x320; fundamentele ad besturingselement registreren
.EQU ad1con3, 0x324; AD besturingselement registreren voor het instellen van de kloksnelheid van de conversie
.EQU ad1buf0, 0x300; AD resultaten uiteindelijk hier
.EQU ad1chs0, 0x0328; AD kanaal Selecteer Registreer
.EQU ad1pcfg, 0x32c; de isused van dit register ingangen voor analoge of digitale configureren
.Global __reset; Het label voor de eerste regel van de code. ;
..............................................................................
; Gedeelte van de code in het programmageheugen; (DIT IS WAAR HET PROGRAMMA ZAL BEGINNEN NA RESET);...;
.Text; Begin van codesectie
__reset:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; pin verbinding;;
Output: RB4 pin11; Ingang: RA0 pin2
; UART: rx: pin6; TX: pin7
; AN9: pin26 S/H uitgangen aan deze pin (deze pin is een ingang voor microcontroller)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Connectin met UART2: vertalen van de code van serialcomm.pb voor logochip
; schrijven 02c $8 $f0a4
MOV #0XF0A4, W0
MOV W0, TRISB
; schrijven 6c $2 $0500
MOV #0X0500, W0
MOV W0, RPOR1
; schrijven van $6a6 $1f02
MOV #0X1F02, W0
MOV W0, RPINR19
; schrijven $238 51; instelling baud-rate
MOV #51, W0
MOV W0, U2BRG
; schrijven $230 $8800
MOV #0X8800, W0
MOV W0, U2MODE
; schrijven 232 $ $400
MOV #0X400, W0
MOV W0, U2STA
; initialiseren van registers
MOV #0x8200, W0
MOV W0, ad1con1; a/d draait, output zal worden links uitgelijnd
MOV #6, W0
MOV W0, ad1con3; ongeveer 4 cycli per tad
MOV #0x1ff, W0
MOV W0, ad1pcfg; 4 LC ingangspoorten ingesteld op analoge, digitale rust
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCLR TRISB, #4; ingesteld voor de uitvoer van
JA TRISA, #0; nemen in signaal van functiegenerator
Ja ad1pcfg, #0; de pincode instellen om te worden van de digitale ingang
; LOOP1 & 2 controles IS er een stijgende rand lus:
JA LATB, #4; GEEFT EEN UITGANGSSIGNAAL: MONSTER
LOOP1: BTSS PORTA, #0; SLA ALS HOOG IS
BEHA LOOP1
NOP; EEN KORTE TIJD WACHTEN
NOP
BCLR LATB, #4; LAAG INGESTELD OP START S/H: HOLD
; doen een een A/D-conversie op AN9(pin 26)
MOV #9, W0
MOV W0, ad1chs0; Selecteer AN9 voor a/d-conversie
Ja ad1con1, #1; Start van de bemonstering en beginnen met het omzetten
MOV #7, W0; wacht 7 cycli voor interne monster en houd condensator opladen
cycledelay: dec W0, W0; decrement W0
beha nz, cycledelay; nu wachten op de conversie te voltooien
bclr ad1con1, #1; Start bedrijf
gedaan: btss ad1con1, #0;
beha gedaan; wachten tot conversie worden gedaan
; links uitgelijnd resultaten zijn opgenomen in de ad1buf0
MOV ad1buf0, W0
lsr W0, #8, W0; kopie van ad1buf0, verschoven van 8 bits naar rechts, naar W0 verplaatsen
MOV W0, U2TXREG; deze hogere 8 bits schrijven naar tx; wachten op verzending tot finish
txdone: btss U2STA, #8;
beha txdone
MOV #0x0c0, W0; masker om te selecteren van bit 6 en 7
en #0x300, W0; en zet een kopie van bit 6 en 7 in W0, alle andere bits zijn nul
MOV W0, U2TXREG; Deze bits naar tx schrijven, vergeet niet om juist verwerkt in MATLAB
LOOP2: BTSC PORTA, #0
BEHA LOOP2; OVERSLAAN ALS NIVEAU LAAG IS
BEHA LUS