Paso 6: El programa: PIC MCU ASM código (código de la Asamblea)

http://www.electroniclessons.com/talkingbreath.txt
Estoy poniendo en el documento también, pero los comentarios parecen desordenados. Lo siento que = ()
Si alguno de ustedes quiere el. ASM archivo, por favor, no pedir! Usé un puck ISD2 programador y el software MPLAB IDE para programar mi PIC. Si alguno de ustedes tiene alguna pregunta, siempre estoy feliz de contestar si usted quiere saber más sobre este programador, mira aquí:
http://www.microchip.com/Stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010046&Part=DV164005
AQUÍ ESTÁ EL CÓDIGO:
; Aquí va el código principal ***
MOVLW 0 X 40; FRECUENCIA DEL OSCILADOR INTERNO SET
MOVWF OSCCON; INICIALIZAR
MOVLW 0 X 00; CONFIGURAR PORTB QUE TODAS LAS SALIDAS
MOVWF TRISB; INICIALIZAR
CLRF PORTB; CLARO PORTB SALIDAS
MOVLW 0XFE; 00001110
MOVWF TRISA; CONFIGURAR PORTA QUE TODAS LAS SALIDAS EXCEPTO PARA RA1/2/3
CLRF PORTA; PORTA CLARO
MOVLW 0 X 05; CONFIGURAR ADC
MOVWF ADCON0; PERMITEN A ADC, PERO NO INICIAR LA CONVERSIÓN
MOVLW 0X7D; CONFIGURAR ADC
MOVWF ADCON1; RA0/AN0 = ENTRADA ANALÓGICA
MOVLW 0X0F; CONFIGURAR ADC
MOVWF ADCON2; CONFIGURAR SINCRONIZACIÓN DE CONVERSIÓN ADC (VER HOJA DE DATOS; OPCIONES DE FORMACIÓN REGISTRO ADCON0/1/2
; RA0 = PLAYBACKOUT
; RA1 = ADC EN
; RA3 = MUESTRA
INICIO:
BTFSC PORTA, RA3; Levante la resistencia mantiene RA3 alta hasta que se presiona el botón. Esta instrucción; comprueba el estado de RA3. Salta la siguiente instrucción si está bajo (botón pulsado).
GOTO Inicio; si no ha pulsado el botón, volver a la puesta en marcha y compruebe otra vez. ; BUCLES HASTA QUE SE PRESIONA EL BOTÓN.
MQ3CHECK:; Esta rutina actúa para comprobar la salida de la MQ3 para determinar cuando tiene; ser lo suficientemente estable como para otra medición.
CALL RUNADC; Llamando a la subrutina RUNADC, vamos a tomar un 8-bit, representación de la MQ3 salida y almacenar en la memoria
CALL LEDSIGNIFY; Llamar a subrutina que indica un estado de espera al usuario mediante LEDs en el PORTB
MOVLW 0X1E; Mueva el valor de referencia de predermined en registro W (de trabajo).
GEN5 CPFSLT; Compare el valor de vanguardia con valor ADC en GEN5. SALTAR si contenido de WREG; es más grande que el valor ADC.
GOTO MQ3CHECK; si MQ3 no está listo para tomar una lectura confiable, tomar otra muestra
LLAMADA DE VOZ; Llamar rutina de grabación de voz
LLAME A LOOP1
LLAMADA WAITSTATE; Rutina de llamada que indica que el dispositivo está leyendo el sensor y que la usuario debe soplar hasta que el LED dejará de parpadear.
CALL RUNADC; Vuelva a ejecutar el ADC para una nueva lectura
DETERMINAR LA LLAMADA; Ejecutar una subrutina determinante que hace la matemática
RUNADC:
BSF ADCON0, GO/DONE; Iniciar la conversión - Set bit GO/DONE en registro ADCON0
PASO 2:
BTFSC ADCON0, GO/DONE; El bit GO/DONE ADCON0 se mantendrá alto hasta conversión; completada. Compruebe si es alta, ir atrás a STEP2. Si no, continuar.
GOTO STEP2
MOVFF ADRESH, GEN5; Con seguridad mover contenido de 8 bits del registro ADC a GEN5 de registro para más adelante.
RETURN ; Fin de subrutina
LEDSIGNIFY:
SETF PORTB; Activar las salidas PORTB (todos los LEDs en)
LLAME A LOOP1; Llamar a subrutina de retardo Loop para transcurrir un tiempo
CLRF PORTB; Apagar todas las salidas PORTB (todos los LEDs off)
LLAME A LOOP1; Otro retraso
RETORNO; Volver de la sub-rutina de
VOZ:
BSF PORTA, RA0; Enviar señal a dispositivo ISD1218 - activar grabación (listo para la lectura de alcohol)
LLAMADA LOOP1; retraso utilizado para asegurarse de que ese chip de ISD1218 está activado correctamente
BCF PORTA, RA0; Activar desactivar señal ISD1218
RETORNO; Retorno de subrutina
WAITSTATE:; ofrecen el usuario tiempo a soplar en el sensor
LLAMAR AL WAITSTATE2
LLAMAR AL WAITSTATE2
LLAMAR AL WAITSTATE2
LLAMAR AL WAITSTATE2
LLAMAR AL WAITSTATE2
LLAMAR AL WAITSTATE2
LLAMAR AL WAITSTATE2
LLAMAR AL WAITSTATE2
LLAMAR AL WAITSTATE2
LLAMAR AL WAITSTATE2
LLAMAR AL WAITSTATE2
LLAMAR AL WAITSTATE2
LLAME A LOOP1
VOLVER
WAITSTATE2:; Parpadea el LED en orden del 1-6
MOVLW 0 X 01
MOVWF PORTB
LLAMADA LOOP3
MOVLW 0 X 02
MOVWF PORTB
LLAMADA LOOP3
MOVLW 0 X 04
MOVWF PORTB
LLAMADA LOOP3
MOVLW 0X08
MOVWF PORTB
LLAMADA LOOP3
MOVLW 0X010
MOVWF PORTB
LLAMADA LOOP3
MOVLW 0 X 20
MOVWF PORTB
LLAMADA LOOP3
CLRF PORTB
VOLVER
DETERMINAR:
MOVLW 0X24; Pasar valor a vanguardia para referencia
CPFSGT GEN5; si el valor del ADC es mayor que vanguardia, saltar siguiente instrucción, si no, usted; encontró su nivel de alcohol!
Llame LED1; si no, luz LED #1 (sin alcohol nivel detectado).
MOVLW 0X3B; Pasar valor a vanguardia para referencia
CPFSGT GEN5, si valor de ADC es mayor que la vanguardia, saltar siguiente instrucción, si no, has encontrado tu nivel de alcohol!
Llame LED2; si no enciende el LED #2 (una o dos cervezas).
MOVLW 0X52; Pasar valor a vanguardia para referencia
CPFSGT GEN5; si el valor del ADC es mayor que vanguardia, saltar siguiente instrucción, si no, usted; encontró su nivel de alcohol!
LLAMAR LED3; si no, la luz LED # 3 (dos o tres en la última hora - más o menos. Es probable que; no debería conducir).
MOVLW 0X69; Pasar valor a vanguardia para referencia
CPFSGT GEN5; si el valor del ADC es mayor que vanguardia, saltar siguiente instrucción, si no, usted; encontró su nivel de alcohol!
LED4 LLAMADA; Pasar valor a vanguardia para referencia
CPFSGT GEN5; si el valor del ADC es mayor que vanguardia, saltar siguiente instrucción, si no, te has f; ound su nivel de alcohol!
Llame a LED5; si no, la luz LED # 5 (borracho. No conduzca o golpear a personas que conoces que no!!!).
MOVLW 0X95; Pasar valor a vanguardia para referencia
CPFSGT GEN5; si el valor del ADC es mayor que vanguardia, saltar siguiente instrucción, si no, has encontrado, tu nivel de alcohol!
LED5 LLAMADA
LLAMAR LED6
VOLVER
LED1:
BSF PORTB, RB0; ENCENDER LED1
CALL LONGDELAY; Llame a un largo retraso
RESET ; Resultado muestra - programa de reset
LED2:
BSF PORTB, RB1; ENCENDER LED2
CALL LONGDELAY; Llame a un largo retraso
RESET ; Resultado muestra - programa de reset
LED3:
BSF PORTB, RB2; ENCENDER LED3
CALL LONGDELAY; Llame a un largo retraso
RESET ; Resultado muestra - programa de reset
LED4:
BSF PORTB, RB3; ENCIENDE EL LED4
CALL LONGDELAY; Llame a un largo retraso
RESET ; Resultado muestra - programa de reset
LED5:
BSF PORTB, RB4; ENCIENDE EL LED5
CALL LONGDELAY; Llame a un largo retraso
RESET ; Resultado muestra - programa de reset
LED6:
BSF PORTB, RB5; ENCIENDE LED6
CALL LONGDELAY; Llame a un largo retraso
RESET ; Resultado muestra - programa de reset
LONGDELAY:
MOVLW 0 X 05; Mover un valor decimal de 10 en vanguardia para referencia
MOVWF GEN6; Guardar valor de vanguardia en GEN6
LONGDELAY2:
LLAME A LOOP1; Retardo de llamada
DECFSZ GEN6; decremento valor GEN6, omitir si GEN6 = 0
GOTO LONGDELAY2; Repita el retraso hasta que valor de GEN6 es cero
RETURN ; Retorno de subrutina
LOOP1:; sub-rutina de retardo loop que trabaja con rutina LOOP2. Introduzca valores; en 3 registros en loop1 (ver Loop2)
MOVLW 0 X 00
MOVWF GEN1
MOVLW 0XFF
MOVWF GEN2
LOOP2:; Valores de la cuenta regresiva de LOOP1 hasta 0
DECFSZ GEN1, 1
GOTO LOOP2
DECFSZ GEN2, 1
GOTO LOOP2
VOLVER
LOOP3:; Subrutina de tiempo de retardo se alternan
MOVLW 0X19
MOVWF GEN2
LLAME A LOOP2
VOLVER
VOLVER
;******************************************************************************
; Fin del programa