Bygga en puls Analyzer (5 / 8 steg)
Steg 5: Kod med kommentarer för puls analyzer (några anteckningar om nästa avsnitt!)
; Välj den p24FJ32GA002 processorn
.EQU __p24FJ32GA002, 1
; inkludera processor definitionerna
.include "p24FJ32GA002.inc"
;..............................................................................
; Configuration bits ;..............................................................................
config __CONFIG1 0x3f7f
config __CONFIG2 0x79cf
; Likställa register till namn som är lätt att använda.
.EQU ad1con1, 0x320; grundläggande ad kontroll registrera
.EQU ad1con3, 0x324; AD kontroll registrera för inställning av konvertering klockfrekvens
.EQU ad1buf0, 0x300; AD resultat hamna här
.EQU ad1chs0, 0x0328; AD kanal väljer register
.EQU ad1pcfg, 0x32c; Detta register användssom konfigurera ingångar för analog eller digital
.global __Återställ; Etiketten för den första raden i koden. ;
..............................................................................
; Kodavsnittet i programmet minne; (DETTA ÄR DÄR PROGRAMMET STARTAR EFTER ÅTERSTÄLLNING);...;
.text; Början av koden avsnitt
__Återställ:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; pin anslutning;;
-Utgång: RB4 pin11; Ingång: RA0 pin2
; UART: rx: pin6; TX: pin7
; AN9: pin26 S/H utgångar till detta stift (detta stift är en ingång för mikrokontroller)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Anslutnin med UART2: översätta koden från serialcomm.pb för logochip
skriva $02c 8 $f0a4
MOV #0XF0A4, W0
MOV W0, TRISB
skriva $6c 2 $0500
MOV #0X0500, W0
MOV W0, RPOR1
skriva $6a6 $1f02
MOV #0X1F02, W0
MOV W0, RPINR19
skriva $238 51; Setting-överföringshastigheten
MOV #51, W0
MOV W0, U2BRG
skriva $230 $8800
MOV #0X8800, W0
MOV W0, U2MODE
skriva $232 $400
MOV #0X400, W0
MOV W0, U2STA
; initiera register
MOV #0x8200, W0
MOV W0, ad1con1; visar a/d, produktionen kommer att vara vänsterjusterade
MOV #6, W0
MOV W0, ad1con3; ca 4 cyklar per tad
MOV #0x1ff, W0
MOV W0, ad1pcfg; Ange 4 LC ingående portar till analog, vila till digital
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCLR TRISB, #4. ställa in till produktionen
AVSKILJS TRISA, #0; ta i signal från funktionsgenerator
AVSKILJS ad1pcfg, #0; Ange PIN-koden för att digital ingång
; LOOP1 & 2 kontroller är det är en stigande kanten LOOP:
AVSKILJS LATB, #4. GER EN UTSIGNAL: PROV
LOOP1: HANNAH PORTA, #0; HOPPA ÖVER OM NIVÅN ÄR HÖG
BRA LOOP1
NOP; VÄNTA EN KORT MÄNGD TID
NOP
BCLR LATB, #4. LÅGT INSTÄLLD START S/H: HÅLL
; gör en en A/D omvandling på AN9(pin 26)
MOV #9, W0
MOV W0, ad1chs0; Välj AN9 för a/d-omvandling
avskiljs ad1con1, #1. Starta provtagning och börja konvertera
MOV #7, W0; vänta 7 cyklar för interna prov och håll kondensatorn att debitera
cycledelay: dec W0, W0; dekrement W0
behå nz, cycledelay; nu vänta för konvertering till slut
bclr ad1con1, #1. börja hålla
gjort: Hannah ad1con1, #0;
bra gjort; vänta för konvertering göras
; vänsterjusterade resultat återfinns i ad1buf0
MOV ad1buf0, W0
LSR W0, #8, W0; flytta kopian av ad1buf0, skiftade 8 bitar till rätten att W0
MOV W0, U2TXREG; Skriv dessa 8 höga bitar till tx; vänta för överföring till slut
txdone: Hannah U2STA, #8.
bra txdone
MOV #0x0c0, W0; mask för att välja bitar 6 och 7
och #0x300, W0; och sätter kopia av bitar 6 och 7 i W0, alla andra bitar är noll
MOV W0, U2TXREG; skriver dessa bitar till tx, kom ihåg att behandla korrekt i MATLAB
LOOP2: BTSC PORTA, #0
BRA LOOP2; HOPPA ÖVER OM NIVÅN ÄR LÅG
BEHÅ LOOP