L’alcootest parlant Mark II (6 / 7 étapes)

Étape 6: Le programme : PIC MCU ASM CODE (Code de l’Assembly)

J’ai fait de mon mieux pour commenter le code au meilleur de mes capacités, mais j’ai des problèmes avec le traitement de texte, donc le logiciel commenté peut être trouvé ici :
http://www.electroniclessons.com/talkingbreath.txt
Je suis le plaçant dans le document ainsi, mais les commentaires apparence désordonnés.  Désolé que que = ()

Si quelqu'un d'entre vous voulez le. ASM fichiers, veuillez ne pas demander !    J’ai utilisé une rondelle ISD2 programmeur et le logiciel MPLAB IDE pour programmer mon PIC.  Si quelqu'un d'entre vous avez des questions, je suis toujours heureux de répondre si vous voulez en savoir plus sur ce programmeur, regardez ici :
http://www.Microchip.com/Stellent/idcplg?IdcService=SS_GET_PAGE&NodeId=1406&dDocName=en010046&part=DV164005

VOICI LE CODE :

;    insérer ici le code principal ***
MOVLW 0 X 40 ; FRÉQUENCE DE L’OSCILLATEUR INTERNE FIXE
MOVWF OSCCON ; INITIALISER
MOVLW 0 X 00 ; METTRE EN PLACE PORTB POUR TOUTES LES SORTIES
MOVWF TRISB ; INITIALISER
CLRF PORTB ; CLAIRE PORTB SORTIES
MOVLW 0XFE ; 00001110
TRISA MOVWF ; METTRE EN PLACE PORTA POUR TOUTES LES SORTIES, SAUF POUR RA1/2/3
CLRF PORTA ; CLAIRE PORTA
MOVLW 0 X 05 ; METTRE EN PLACE L’ADC
MOVWF ADCON0 ; ACTIVEZ LES ADC, MAIS NE COMMENCEZ PAS DE CONVERSION
MOVLW 0X7D ; METTRE EN PLACE L’ADC
MOVWF ADCON1 ; AN0/RA0 = ENTRÉE ANALOGIQUE
MOVLW 0X0F ; METTRE EN PLACE L’ADC
MOVWF ADCON2 ; METTRE EN PLACE LE CALENDRIER DE CONVERSION ADC (VOIR FICHE TECHNIQUE ; OPTIONS DE FORMATION REGISTRE ADCON0/1/2
; RA0 = PLAYBACKOUT
; RA1 = ADC-IN
; RA3 = ÉCHANTILLON

DÉMARRAGE :
BTFSC PORTA, RA3 ; Tirer vers le haut la résistance maintient RA3 élevé jusqu'à ce que le bouton est enfoncé. La présente instruction ; vérifie l’état de RA3.  Ignore l’instruction suivante si faible (touche enfoncée).
GOTO démarrage ; si le bouton n’a pas été activé, revenir à la mise en marche et vérifier de nouveau.  ; BOUCLES JUSQU'À CE QUE LE BOUTON EST ENFONCÉ.
MQ3CHECK: ; Les actes de cette routine pour vérifier la sortie de la MQ3 pour déterminer quand il a; devenir assez stable pour une autre mesure.
APPEL RUNADC ; En appelant la sous-routine RUNADC, nous allons prendre un 8 bits ; représentation de la MQ3 sortie et stockez-le dans la mémoire
APPEL LEDSIGNIFY ; Appelez la sous-routine qui indique un état d’attente pour l’utilisateur à l’aide de LEDs sur le PORTB
MOVLW 0X1E ; Déplacer predermined valeur de référence dans le registre W (travail).
GEN5 CPFSLT ; Comparer la valeur WREG valeur ADC dans GEN5.  Passez si WREG sommaire ; est plus grande que la valeur de l’ADC.
GOTO MQ3CHECK ; MQ3 si n’est pas prête à prendre une lecture fiable, prendre un autre échantillon
APPEL VOCAL ; Appel de routine d’enregistrement de voix
APPEL LOOP1
APPEL WAITSTATE ; Routine d’appel qui indique ce périphérique est la lecture de capteur et que le ; utilisateur devrait faire sauter jusqu'à ce que la LED arrête de clignoter.
APPEL RUNADC ; Réexécutez l’ADC pour une nouvelle lecture
APPEL DE DÉTERMINER ; Exécuter une sous-routine déterminante qui effectue le calcul

RUNADC :
BSF ADCON0, ALLEZ/DONE ; Démarrez la conversion - Set GO/DONE bit dans le registre ADCON0
ETAPE 2 :
BTFSC ADCON0, ALLEZ/DONE ; Le bit GO/DONE ADCON0 resteront élevé jusqu'à conversion ; terminée.  Vérifier si le bit est dos élevé, passez à l’étape2. Si ce n’est pas le cas, continuer.
ETAPE 2 GOTO
MOVFF ADRESH, GEN5 ; Déplacer en toute sécurité 8 bits contenu du registre de ADC à GEN5 enregistrer pour plus tard.
RETURN                                ; Sous-routine fin

LEDSIGNIFY :
SETF PORTB ; Tourner sur toutes les sorties PORTB (toutes les del sur)
APPEL LOOP1 ; Appelez la sous-routine de boucle de retard pour s’écouler quelque temps
CLRF PORTB ; Désactiver toutes les sorties PORTB (toutes les LED éteint)
APPEL LOOP1 ; Un autre retard
RETOUR ; Retour de sous-programme

VOIX :
BSF PORTA, RA0 ; Envoyer le signal à ISD1218 appareil - pour activer l’enregistrement (prêt pour la lecture de l’alcool)
APPEL LOOP1 ; retard utilisé pour s’assurer que cette puce ISD1218 est correctement activée
BCF PORTA, RA0 ; Activer désactiver signal à ISD1218
RETOUR ; Retour de la sous-routine

WAITSTATE:; offrent à la fois utilisateur de souffler dans le capteur
APPEL WAITSTATE2
APPEL WAITSTATE2
APPEL WAITSTATE2
APPEL WAITSTATE2
APPEL WAITSTATE2
APPEL WAITSTATE2
APPEL WAITSTATE2
APPEL WAITSTATE2
APPEL WAITSTATE2
APPEL WAITSTATE2
APPEL WAITSTATE2
APPEL WAITSTATE2
APPEL LOOP1
RETOUR

WAITSTATE2: ; Clignote LED dans l’ordre de 1 à 6
MOVLW 0 X 01
MOVWF PORTB
APPEL LOOP3
MOVLW 0 X 02
MOVWF PORTB
APPEL LOOP3
MOVLW 0 X 04
MOVWF PORTB
APPEL LOOP3
MOVLW 0 X 08
MOVWF PORTB
APPEL LOOP3
MOVLW 0X010
MOVWF PORTB
APPEL LOOP3
MOVLW 0 X 20
MOVWF PORTB
APPEL LOOP3
CLRF PORTB
RETOUR

DÉTERMINER :
MOVLW 0 X 24 ; Entamons WREG valeur de référence
CPFSGT GEN5 ; si la valeur de l’ADC est supérieure à WREG, la prochaine instruction de saut, si non, vous avez ; trouvé votre taux d’alcoolémie !
APPELEZ la LED1 ; sinon, allume la LED #1 (pas d’alcool niveau détecté).
MOVLW 0X3B ; Entamons WREG valeur de référence
CPFSGT GEN5 ; si ADC valeur est supérieure à WREG, la prochaine instruction de saut, sinon, vous avez trouvé votre taux d’alcoolémie !
Appelez LED2 ; sinon, allume la LED #2 (une bière ou deux).
MOVLW 0 X 52 ; Entamons WREG valeur de référence
CPFSGT GEN5 ; si la valeur de l’ADC est supérieure à WREG, la prochaine instruction de saut, si non, vous avez ; trouvé votre taux d’alcoolémie !
Appelez DEL3 ; sinon, allume la LED #3 (deux ou trois au cours de la dernière heure - à peu près.  Susceptibles ; ne devrait pas conduire).
MOVLW 0X69 ; Entamons WREG valeur de référence
CPFSGT GEN5 ; si la valeur de l’ADC est supérieure à WREG, la prochaine instruction de saut, si non, vous avez ; trouvé votre taux d’alcoolémie !
APPEL LED4 ; Entamons WREG valeur de référence
CPFSGT GEN5 ; si la valeur de l’ADC est supérieure à WREG, la prochaine instruction de saut, si non, vous avez f; ound votre taux d’alcoolémie !
Appelez DEL5 ; sinon, allume la LED #5 (état d’ébriété.  Ne pas conduire, ou frapper sur les gens que vous connaissez, que vous ne devriez pas!!!).
MOVLW 0X95 ; Entamons WREG valeur de référence
CPFSGT GEN5 ; si la valeur de l’ADC est supérieure à WREG, la prochaine instruction de saut, si non, vous avez trouvé, votre taux d’alcoolémie !
APPEL DEL5
APPEL LED6
RETOUR

LED1 :
BSF PORTB, RB0 ; ALLUMER LA LED 1
APPEL LONGDELAY ; Appeler un retard important
RESET                            ; Résultat affiché - programme de remise à zéro

LED2 :
BSF PORTB, RB1 ; ALLUMEZ LED2
APPEL LONGDELAY ; Appeler un retard important
RESET                           ; Résultat affiché - programme de remise à zéro

LED3 :
BSF PORTB, RB2 ; ALLUMEZ DEL3
APPEL LONGDELAY ; Appeler un retard important
RESET                           ; Résultat affiché - programme de remise à zéro

LED4 :
BSF PORTB, RB3 ; ALLUMEZ LED4
APPEL LONGDELAY ; Appeler un retard important
RESET                            ; Résultat affiché - programme de remise à zéro

5 :
BSF PORTB, RB4 ; ALLUMEZ DEL5
APPEL LONGDELAY ; Appeler un retard important
RESET                            ; Résultat affiché - programme de remise à zéro

LED6 :
BSF PORTB, RB5 ; ALLUMEZ LED6
APPEL LONGDELAY ; Appeler un retard important
RESET                            ; Résultat affiché - programme de remise à zéro

LONGDELAY :
MOVLW 0 X 05 ; Entamons WREG pour référence une valeur décimale de 10
MOVWF GEN6 ; Stocker la valeur WREG dans GEN6
LONGDELAY2 :
APPEL LOOP1 ; Délai d’appel
DECFSZ GEN6 ; décrémentation valeur en GEN6, ignorer si GEN6 = 0
GOTO LONGDELAY2 ; Répétez retard jusqu'à ce que la valeur en GEN6 est égal à zéro
RETURN                          ; Retour de la sous-routine

Loop1:; retarder sous-programme boucle qui fonctionne avec LOOP2 routine.  Entrer les valeurs ; en 3 registres dans loop1 (voir Loop2)
MOVLW 0 X 00
MOVWF GEN1
MOVLW 0XFF
MOVWF GEN2

LOOP2: ; Valeurs de compte à rebours de LOOP1 jusqu'à 0
DECFSZ GEN1, 1
GOTO LOOP2
DECFSZ GEN2, 1
GOTO LOOP2
RETOUR

LOOP3: ; Remplaçant la sous-routine de calendrier de retard
MOVLW 0 X 19
MOVWF GEN2
APPEL LOOP2
RETOUR

RETOUR

;******************************************************************************
; Fin du programme

Articles Liés

L’alcootest de parler

L’alcootest de parler

*** info supplémentaire à http://droidalyzer.com/talkingbreathalyzer/ ***Vidéo de l'éthylomètre parler en Action :Plus de détails sur l'alcootest de parler :Un alcootest personnalisable qui parle et vous dit combien vous avez eu à boire. Il est égale
Quai 9 ressources : Achat de matières

Quai 9 ressources : Achat de matières

Ce Instructable est pour les utilisateurs de jetée 9 atelier.Le creuset gère une excellente liste de vendeurs de la Bay Area pour différents matériaux sur leur Page de ressources pour le matériel du creuset.Frais de port :Boutique utilisateurs devrai
PIP-boy 3000 Mark II

PIP-boy 3000 Mark II

C'est ma tentative de construire le plus avancé du Pip-Boy 3000 sur la planète terre, et je crois que j'ai réussi. Il comprend les technologies suivantes :Systèmes de 4D capacitif de 4.3" écran tactileAdafruit 66 canaux GPSBaladeur audio/Sparkfun WTV
Carton K-9 Radio pilotée, qui parle

Carton K-9 Radio pilotée, qui parle

Doctor Who a eu de nombreux compagnons au cours des années, et quand les fans avoir demandé "qui est votre compagnon favori de Dr Who?", on entend généralement des réponses comme Rose Tyler, Sarah-Jane Smith, capitaine jack Harkness, Leela et Ja
La foudre simulateur/alcootest/Graphic Equalizer - Arduino alimenté

La foudre simulateur/alcootest/Graphic Equalizer - Arduino alimenté

Mise à jour : Une version portable de l'éthylomètre parler est ici http://talkingbreathalyzer.com ***Les bandes de LED sont montés sur un trellace en plein air qui fonctionne comme un simulateur de foudre, alcootest en plein air, égaliseur graphique
Longboard électrique Mark I

Longboard électrique Mark I

Alors je vis dans la silicon valley, mais je suis allé à l'Université de l'Illinois et juste après un semestre à l'étranger, je reviens à la moitié de ma ville cheval autour sur Longboards boosté. Mon ami loue une et me laisse essayer. Alors je vais
Détecteur sans fil alimenté par énergie solaire, par Mark Dixon

Détecteur sans fil alimenté par énergie solaire, par Mark Dixon

dans le cadre du Festival de vitesse de la Culture numérique, artiste Mark Dixon a développé une version de puissance solaire du réseau, son oeuvre détecteur sans fil, comme sur l'atelier en ligne sur instructables et folie. Un tableau de ces apparei
Alcootest Microphone

Alcootest Microphone

le microphone alcootest est un système pour la collection inconscpicuous d'alcoolémie des ensembles de données niveau contenu. En d'autres termes, vous pouvez mesurer la sobriété d'une personne avec un appareil, qui ressemble à toutes fins utiles, pa
Alcootest Portable DIY - présenté par BayLab pour le programme de commandites de Instructables

Alcootest Portable DIY - présenté par BayLab pour le programme de commandites de Instructables

détecter votre BAC wih une poche taille alcootest.Étape 1: clause de non-responsabilitéAuparavant, nous commençons, un avertissement. Ce n'est pas censé être utilisé pour indiquer si vous êtes autorisé à conduire ou non. Il n'est pas aussi précis com
Parlant des adjoint (Edison Edition)

Parlant des adjoint (Edison Edition)

Internet est rempli de toutes sortes d'informations utiles. Nous allons construire un gadget dans cette Instructuble à l'aide d'Intel Edison que vous pouvez facilement utiliser pour recueillir les informations et dénoncer les informations à l'aide de
Parler d’Arduino horloge

Parler d’Arduino horloge

Ce projet utilise l'Arduino MEGA et un lecteur MP3 (Adafruit) pour non seulement garder une trace de l'époque, mais d'avoir aussi des carillons ordinaire de 15 minutes et de préciser le temps si nécessaire.Pour garder les choses simples, j'ai acheté
HAL-9000 Arduino parler rallonge

HAL-9000 Arduino parler rallonge

Je suis tombé sur une génération de répliques de HAL en ligne et j'ai pensé que c'était plutôt cool, mais être le perfectionniste, que j'ai tendance à être sur des projets, je voulais vraiment une lentille plus beau, lumière LED et morceau de façade
Analog parler brille dans le noir 3D imprimés horloge

Analog parler brille dans le noir 3D imprimés horloge

L'horloge affiche l'heure en utilisant 4 compteurs analogiques. J'ai vu ce type d'horloges dans diverses incarnations, mais je n'ai jamais vu une horloge analogique dans ce format qui a parlé. Cette horloge annonce l'heure à intervalles d'une demi-he
Parlant de Assistant [Intel IoT]

Parlant de Assistant [Intel IoT]

Internet est rempli de toutes sortes d'informations utiles. Nous allons construire un gadget dans cette Instructuble à l'aide d'Intel Galileo Gen2 que vous pouvez facilement utiliser pour recueillir les informations et dénoncer les informations à l'a