ultra sonido con foto [cerrado]

-3

¿Por qué este código divide el tiempo en 29? Este código es para conectar ultrasonido con PIC. Estoy trabajando con un reloj de 4 MHz y el tipo de imagen es P16F877A.

program HCSR04

dim  duration_us as word
dim  distance1   as integer
dim  length_cm   as string[5]

main:

  TRISC.0=  0
  TRISC.3=1
  TRISD.7=0                             ' B8 to B2 for LCD, B1=trig, B0=echo
  TRISB=0x00
  T1CON = 0x10

run:
  duration_us = 0
  distance1   = 0
  TMR1L    = 0                   ' Clear the TMR1L value
  TMR1H    = 0

  PORTC.0 = 1                  'initialize the trigger
  delay_us(100)

  PORTC.0=0
  T1CON.0  =1                ' Enable TMR1

  while PORTC.3= 0              ' Waiting for the echo
  wend

  T1CON.0  =1                ' Enable TMR1

  while PORTC.3= 1              ' While echo received, let the TMR1 count
  wend

  T1CON.0  =0                ' disnable TMR1

  duration_us =  TMR1L+ (TMR1H<<8 )' Retain TMR1 value = ON pulse
  distance1   = (duration_us)/29
  PORTD.7=1
  PORTB=distance1
  delay_ms(1000)
  goto run

end.
    
pregunta sepeee

1 respuesta

3

Divides la duración entre 29 porque así es como conviertes el período de tiempo no especificado en una distancia de unidades no especificadas.

Sin saber en qué se mide el período de tiempo, ni las unidades de la distancia que esperas, la razón por la que se eligió 29 es una suposición.

Si bien no estoy familiarizado con el lenguaje que está utilizando, puedo seguir el flujo del mismo, sin embargo, es un ejercicio completamente inútil, ya que sin saber qué pines están conectados a qué y de qué manera no podemos saber lo que se supone que debe estar haciendo el programa.

Mi entendimiento:

  • El temporizador se establece en 1: 2 de preescala, así que marca a 0.5MHz (\ $ F_ {OSC} / 4/2 \ $).
  • Establezca el puerto C3 (receptor, que es una entrada) ALTO: ¡¿qué se supone que se debe lograr ?!
  • Establezca el puerto D7 en una salida
  • Borrar temporizador.
  • Espera 1 ms (¿por qué?)
  • Espere mientras C3 está bajo
  • Inicia el temporizador
  • Espere mientras C3 esté alto
  • Apaga el temporizador
  • Divida el tiempo (en recuentos de 2µs) por 29
  • Establecer puerto D7 alto
  • Envía la distancia a PORTB

Ahora, ¿soy yo o ese programa no tiene ningún sentido? En ningún momento se activa el gatillo. Estás configurando aleatoriamente otros pines de puerto para entrada o salida o alto o bajo sin ninguna razón aparente.

    
respondido por el Majenko

Lea otras preguntas en las etiquetas