Talande Breathalyzer Mark II (6 / 7 steg)

Steg 6: Programmet: PIC MCU ASM koden (montering)



jag har gjort mitt bästa för att kommentera koden efter bästa förmåga, men jag har problem med ordbehandlaren, så kommenterade programvaran kan hittas här:
http://www.electroniclessons.com/talkingbreath.txt
Jag är att placera den i dokumentet också, men kommentarerna se rörigt. Ledsen att det = ()

Om någon av er vill ha den. ASM fil kan du inte be! Jag använde en ISD2 programmerare pucken och MPLAB IDE programvara för att programmera min bild. Om någon av er har några frågor, är jag alltid glad att svara på om du vill veta mer om detta programmerare, titta här:
http://www.microchip.com/Stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010046&part=DV164005

HÄR ÄR KODEN:

; huvudkoden går här ***
MOVLW 0X40; STÄLL IN INTERN OSCILLATOR FREKVENS
MOVWF OSCCON; INITIERA
MOVLW 0X00; STÄLL IN PORTB FÖR ATT VARA ALLA UTGÅNGAR
MOVWF TRISB; INITIERA
CLRF PORTB; TYDLIG PORTB UTGÅNGAR
MOVLW 0XFE; 00001110
MOVWF TRISA; STÄLL IN PORTA VARA ALLA UTGÅNGAR UTOM FÖR RA1/2/3
CLRF PORTA; TYDLIG PORTA
MOVLW 0X05; STÄLL IN ADC
MOVWF ADCON0; AKTIVERAR ADC, MEN STARTA INTE KONVERTERING
MOVLW 0X7D; STÄLL IN ADC
MOVWF ADCON1; AN0/RA0 = ANALOG INGÅNG
MOVLW 0X0F; STÄLL IN ADC
MOVWF ADCON2; STÄLL IN TIDPUNKTEN FÖR ADC KONVERTERING (SE DATABLAD FÖR; ADCON0/1/2 REGISTER BILDANDET ALTERNATIV
; RA0 = PLAYBACKOUT
; RA1 = ADC-IN
; RA3 = PROV

START:
BTFSC PORTA, RA3; Dra upp motståndet håller RA3 hög tills knappen trycks. Denna anvisning, kontrollerar status på RA3. Hoppar över nästa instruktion om låg (knappen intryckt).
Gå till Start, om knappen inte har tryckts, gå tillbaka till start och kolla igen. ; LOOPAR TILLS KNAPPEN TRYCKS.
MQ3CHECK:; Denna rutin fungerar för att kontrollera produktionen av MQ3 att bestämma när den har, blir stabil nog för en annan mätning.
KALLA RUNADC; Genom att ringa RUNADC subrutinen, vi ska ta en 8-bitars; representation av MQ3 utgång, och lagra det i minnet
KALLA LEDSIGNIFY; Ring subrutin som anger en vänta-stat till användare med hjälp av lysdioder på PORTB
MOVLW 0X1E; Flytta predermined referensvärdet W (arbets) register.
CPFSLT GEN5; Jämför värdet i WREG till ADC värde i GEN5. Hoppa över om WREG innehåll, är större än värdet för ADC.
Gå till MQ3CHECK, om MQ3 är inte redo att ta en tillförlitlig avläsning, ta ett nytt prov
RING RÖST. Röst inspelning rutinen
KALLA LOOP1
KALLA WAITSTATE; Samtal rutin som anger att enheten läser sensor, och att den, användaren bör blåsa tills lamporna slutar blinka.
KALLA RUNADC; Kör ADC igen för en ny behandling
SAMTAL AVGÖRA; Kör en avgörande subrutin som gör matten

RUNADC:
BSF ADCON0, GÅ/GJORT; Starta konverteringen - Set GO/klar bit i registret ADCON0
STEG 2:
BTFSC ADCON0, GÅ/GJORT; GÅ/klar lite i ADCON0 kommer att stanna hög fram till konvertering, är klar. Kontrollera om biten är hög, gå tillbaka till steg 2. Om inte, Fortsätt.
GÅ TILL STEG 2
MOVFF ADRESH, GEN5; Ett säkert sätt flytta 8-bitars innehållet i ADC register till GEN5 registren för senare.
HEMKOMST. Slutet subrutin

LEDSIGNIFY:
SETF PORTB; Slå på alla PORTB utgångar (alla lysdioder på)
KALLA LOOP1; Samtal fördröjning Loop subrutin att löpa en tid
CLRF PORTB; Stäng av alla PORTB utgångar (alla lysdioder off)
KALLA LOOP1; En annan fördröjning
HEMKOMST. Returnera från sub rutin

RÖST:
BSF PORTA, RA0; Signal till ISD1218 enhet - Aktivera inspelning (redo för alkohol behandlingen)
Ring LOOP1, dröjsmål används för att kontrollera att ISD1218 chip är ordentligt aktiverad
BCF PORTA, RA0; Aktivera inaktivera signal till ISD1218
HEMKOMST. Returnera från subrutin

WAITSTATE:; erbjuda användaren gången att blåsa i sensorn
KALLA WAITSTATE2
KALLA WAITSTATE2
KALLA WAITSTATE2
KALLA WAITSTATE2
KALLA WAITSTATE2
KALLA WAITSTATE2
KALLA WAITSTATE2
KALLA WAITSTATE2
KALLA WAITSTATE2
KALLA WAITSTATE2
KALLA WAITSTATE2
KALLA WAITSTATE2
KALLA LOOP1
RETURNERA

WAITSTATE2:; Blinkar LED i ordning från 1-6
MOVLW 0X01
MOVWF PORTB
KALLA LOOP3
MOVLW 0X02
MOVWF PORTB
KALLA LOOP3
MOVLW 0X04
MOVWF PORTB
KALLA LOOP3
MOVLW 0X08
MOVWF PORTB
KALLA LOOP3
MOVLW 0X010
MOVWF PORTB
KALLA LOOP3
MOVLW 0X20
MOVWF PORTB
KALLA LOOP3
CLRF PORTB
RETURNERA

BESTÄMMA:
MOVLW 0X24; Flytta värdet i WREG för referens
CPFSGT GEN5; om ADC värdet är större än WREG, hoppa över nästa instruktion, om inte, du har; hittat din alkohol nivå!
Ring LED1; annars tänds LED #1 (ingen alkohol nivå upptäckt).
MOVLW 0X3B; Flytta värdet i WREG för referens
CPFSGT GEN5; om ADC värdet är större än WREG, hoppa över nästa instruktion, om inte, du har hittat din alkohol nivå!
Ring LED2; annars tänds LED #2 (en öl eller två).
MOVLW 0X52; Flytta värdet i WREG för referens
CPFSGT GEN5; om ADC värdet är större än WREG, hoppa över nästa instruktion, om inte, du har; hittat din alkohol nivå!
Ring LED3, om inte, tänds lysdiod #3 (två eller tre under den senaste timmen - ungefär. Sannolikt, bör inte köra).
MOVLW 0X69; Flytta värdet i WREG för referens
CPFSGT GEN5; om ADC värdet är större än WREG, hoppa över nästa instruktion, om inte, du har; hittat din alkohol nivå!
KALLA LED4; Flytta värdet i WREG för referens
CPFSGT GEN5; om ADC värdet är större än WREG, hoppa över nästa instruktion, om inte, du har f; ound din alkohol nivå!
Ring LED5, om inte, tänds LED #5 (berusad. Inte driva, eller slå på människor du känner att du inte borde!).
MOVLW 0X95; Flytta värdet i WREG för referens
CPFSGT GEN5; om ADC värdet är större än WREG, hoppa över nästa instruktion, om inte, du har hittat; din alkohol nivå!
KALLA LED5
KALLA LED6
RETURNERA

LED1:
BSF PORTB, RB0; SLÅ PÅ LED1
KALLA LONGDELAY; Ring en lång fördröjning
NOLLSTÄLL; Resultatet visas - Återställ program

LED2:
BSF PORTB, RB1; SLÅ PÅ LED2
KALLA LONGDELAY; Ring en lång fördröjning
NOLLSTÄLL; Resultatet visas - Återställ program

LED3:
BSF PORTB, RB2; AKTIVERA LED3
KALLA LONGDELAY; Ring en lång fördröjning
NOLLSTÄLL; Resultatet visas - Återställ program

LED4:
BSF PORTB, RB3; AKTIVERA LED4
KALLA LONGDELAY; Ring en lång fördröjning
NOLLSTÄLL; Resultatet visas - Återställ program

LED5:
BSF PORTB, RB4; AKTIVERA LED5
KALLA LONGDELAY; Ring en lång fördröjning
NOLLSTÄLL; Resultatet visas - Återställ program

LED6:
BSF PORTB, RB5; AKTIVERA LED6
KALLA LONGDELAY; Ring en lång fördröjning
NOLLSTÄLL; Resultatet visas - Återställ program

LONGDELAY:
MOVLW 0X05; Flytta ett decimalvärde 10 in i WREG för referens
MOVWF GEN6; Lagra WREG värde i GEN6
LONGDELAY2:
KALLA LOOP1; Samtal fördröjning
DECFSZ GEN6; dekrement värde i GEN6, hoppa över om GEN6 = 0
GÅ TILL LONGDELAY2; Fördröjning tills värdet i GEN6 är noll
HEMKOMST. Returnera från subrutin

LOOP1:; fördröja loop sub rutin som fungerar med LOOP2 rutin. Ange värden, till 3 registrerar i loop1 (se Loop2)
MOVLW 0X00
MOVWF GEN1
MOVLW 0XFF
MOVWF GEN2

LOOP2:; Countdown värden från LOOP1 till 0
DECFSZ GEN1, 1
GÅ TILL LOOP2
DECFSZ GEN2, 1
GÅ TILL LOOP2
RETURNERA

LOOP3:; Alternativa dröjsmål timing subrutin
MOVLW 0X19
MOVWF GEN2
KALLA LOOP2
RETURNERA

RETURNERA

;******************************************************************************
; Slutet av program

Se Steg
Relaterade Ämnen

Hur man gör en anpassad markör i Flash

detta är en enkel handledning för att visa dig hur du kan ändra enkel Pilmarkören till ganska mycket vad du vill i Adobe Flash.Steg 1: Komma igång Skapa ett nytt Flash-dokument. Om du använder CS3 dräkten, välja alternativet actionscript 2.0. Storlek...

Taligenkänning Animatronic talande träd - del 2 -

om du har följt tillsammans med min första Instructable, Animatronic talar julgran, jag visade dig hur du ta ett konstgjort träd, lägga till några servon och en Arduino, ansluta den till en bearbetning skiss på datorn och få honom att prata och anime...

Billiga Iron Man (Mark 3) kostym med arbetande frontplåten, belysning, elektronik

visas här är mitt halloween 2012 projekt. Efter mixtra med Arduino för ett par månader och behöver en kostym för Halloween, bestämde jag mig att blanda två. Jag ville bara göra någon Iron Man kostym dock. Jag ville ha denna färg, för att vara så tekn...

Iron Man Markera 42 hjälm

Steg 1: Ladda ner mark 42 skum pep filer sedan spåra dessa filer på kartong och sedan limma ihop och använda vägg fix att fylla alla hål och sprickorSteg 2: Nästa skära av visor och måla både visor och huvudsakliga hjälm senaste användning magneter o...

Göra An Iron Man Full Metal Mark II Arm

har du velat göra något själv som du kan visa upp till din vänner på Halloween? Detta instructable kan vara bra för dig! Jag kommer att visa dig hur du kan göra en Iron Man Mark II armarna (rå testet flygning arm eller bepansrade version) av plåt, gr...

Ett kors att markera en grav

Problem: en kär vän har gått och dött på dig. Alla vanliga kontor har utförts, och de mänskliga kvarlevorna har varit som för att vila. Men av någon anledning, det finns ingen gravsten ännu. Du vill graven markerade och snabb!Lösning: Några deckboard...

24 hr Digital klocka endast med grundläggande CMOS marker

PCB konst ingår i detta instructable så kan du enkelt göra det!En 24-timmars baserade klocka baserat på dubbla decennium räknare, och utfärda utegångsförbud för, eller utfärda utegångsförbud för, BCD till Decimal omvandlare och en kristalloscillator....

DIY markis

orkanen Ike slog oss i 2008 och utslagen makt för ett par dagar. Min bostad är inte utformad med energieffektivitet i åtanke och så förlitade sig 100% på AC att hålla det svalt. Jag gjorde denna markis i försök att hålla det svalare inne genom att bl...

Ved Log markör

Loggar längre än 18 inches passar inte min spis så jag gjorde en logg markör för att säkerställa att de är rätt storlek. Denna markör fungerar bäst efter faller och de kvistning trädet. Ena änden har en vass spets den andra har en fett stick typ mark...

Hur till vända en markör i till en hemlig säker

Hej alla! Idag kommer jag visa dig hur man gör en markör säkert.Steg 1: Saker du behöver.Du behöver.1. en markör2. en fil eller sandpapper3. en skruvmejsel4. ett par tångSteg 2: Disassembleing. Nu ta av locket och Använd tång för att ta ut spetsen oc...

Markör säkra!

Hålla dina pengar säkert! Jag använde Assemblyrequireds "krok" kan du hitta hans penna arbete här! Steg 1: Ta upp tillbaka locket Få några tänger och ta upp tillbaka locket! var noga med att hålla det!Steg 2: Rensning markören Ihåliga ut din mar...

Pengar Marker

denna "pengar-markör kan hålla pengar eller andra små föremål doldaSteg 1: material De material du behöver är en mager markör, tång och en mattknivSteg 2: Markör skärning Först ska du behov att dra ut den mindre bit av bläck nästa du kommer behöver k...

Hemliga markör facket.

Lära sig att dölja din värdefulla hemliga saker säkert i ett fickformat små fack som ingen kan hitta men du. Föra den runt skola/arbete och det ser ut precis som en vanlig, ärlig, oskyldiga markör;. Men när det öppnas från botten, lär du dig detta är...

Hur man Mark spelkort - instructable

lära sig professionellt Markera en kortlek och lura dina vänner varje gång.Steg 1: Material reqired (1) kortlek Bicycle (tm) rider tillbaka(1) exacto kniv, eller en vanlig rakhyvel kniv räcker(1) timme av din tid - 45 min om du har galna fokus färdig...

Markera och kontur för en utekväll

Dess en bra dag och dina vänner vill du komma och tillhåll på en bar, men du ser en röra och vill locka en killar öga. Väl du inte ensam! Sin tid att få ut din panjamas och titt tycke. KAN BELYSA!Steg 1: Samla ditt materialDu behöver· Foundation bors...

Hur Contour och markera ditt ansikte?

Ditt ansikte är den mest attraktiva och lockande del av kroppen. Det är vad alla kommer att se, minnas och Anslut med. Vi minns människor hur de ser ut, hur de ler och hur deras ögon ser under ett samtal. Det handlar om hur vi kommunicerar – genom vå...

Bälte spänne från leden markör

Det första steget att göra detta projekt är att hitta ett objekt som kan användas som ett bälte låsbeslaget. Jag använde en trail markör men något kan användas som en ersättning, det det begränsas av din fantasi bara.Steg 1: Att göra ryggen För att l...

Hur man Markera den mellan nummer i MS-OFFICE (EXCEL)

HUR MAN MARKERA DEN MELLAN NUMMER I MS-OFFICE (EXCEL)MS-EXCEL ÄR DEN MYCKET ANVÄNDBAR PROGRAMVARA FÖR REVISOR FUNGERAR I OFFICE...

Ett frö på MINECRAFT FORALOT av platt mark

detta är min första instructable så jag hoppas ya kommer att uppskatta det :)Steg 1: Här är fröet Du måste skriva in exakt som jag gjorde så jhonny golden apple inga mössor och mellanslag mellan varje en namnet på världen spelar ingen rollSteg 2: Här...