Étape 6: Le programme : PIC MCU ASM CODE (Code de l’Assembly)
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