elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda con programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con programa  (Leído 628 veces)
yersonugarte

Desconectado Desconectado

Mensajes: 1


Ver Perfil
ayuda con programa
« en: 21 Agosto 2015, 05:07 am »

hola gente del foro, resulta que mi nivel de c no es de lo mas avanzado y me dieron un programa que tengo que ver como trabaja, lo que hace es: se tiene el pic que recibe una señal proveniente de un microfono y usa un conversor analogo-digital y la señal la almacena en una memoria externa y hace que se repita infinitas veces y se puede controlar la velocidad de las repeticiones todo esto presionando un boton pero hay varios codigos que no entiendo bien seria genial si me podrian echar una manito. aqui va el programa, de antemano muchas gracias....  :laugh:

[ MOD] Para publicar codigo se debe usar las etiquetas GeShi.

Código
  1.  
  2. #include <16F877a.h>
  3.  
  4. #device ADC=8
  5. #fuses NOWDT,HS,NOPROTECT,NOBROWNOUT
  6. #use delay(clock=20000000)
  7. #include "spi_hardware1.h"
  8.  
  9. unsigned int8 valor = 0; unsigned int8 i;
  10. unsigned int8 variable1, variable2;
  11. int8 cambio_pulso;
  12. int8 movimiento1,movimiento2,movimiento3;
  13. short estado_de_pulso;
  14. signed int8 cambio_1 = 0;  
  15.  
  16.   int8 registro_1 = 0;
  17.  
  18.  
  19. void DACout(int8 valores_bytes) {
  20.   output_b(valores_bytes);
  21. }
  22. #INT_RTCC                         //se utiliza interrupcion con el timer 0
  23. void playback() {
  24.   delay_us(42);
  25.   set_rtcc(128+cambio_1);
  26.   if(movimiento3) movimiento3--;
  27.   else output_low(PIN_E2);
  28.   variable2++;
  29.   if(variable2==255) {
  30.      variable1++;
  31.      movimiento1++;
  32.   }
  33.   if(variable1==registro_1) variable1=0;
  34.   if(movimiento1 == movimiento2) {
  35.      movimiento1 = 0;
  36.      output_high(PIN_E2);
  37.      movimiento3 = 5;
  38.   }  
  39.  
  40.   if(input_state(PIN_D0) != estado_de_pulso) i++; // Boton presionado
  41.   else i=(i==0)?i-1:0;
  42.  
  43.  
  44.   valor = readByte(variable1,variable2);
  45.   output_b(valor);
  46.   cambio_1 = read_adc()/2 - cambio_pulso;
  47.  
  48. }
  49.  
  50.  
  51. void main() {
  52.   short dir=0;
  53.   set_tris_b(0x00);
  54.  
  55.   output_low(PIN_E1); // initially set relay to full bypass
  56.  
  57.   for(i=0;i<6;i++) {
  58.      output_toggle(PIN_E0);
  59.      delay_ms(50);
  60.   }
  61.  
  62.  
  63.  
  64.   setup_adc(ADC_CLOCK_DIV_2);
  65.   setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
  66.  
  67.   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
  68.   enable_interrupts(GLOBAL);
  69.  
  70.  
  71.   setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4);
  72.  
  73.   valor = 0;
  74.  
  75.  
  76.   while(1) {
  77.      set_adc_channel(0);
  78.  
  79.  
  80.  
  81.      variable1=0;
  82.      variable2=0;
  83.  
  84.      estado_de_pulso = input_state(PIN_D0);
  85.  
  86.      // "Wait" phase
  87.  
  88.      while(1) {
  89.         if(input_state(PIN_D0) != estado_de_pulso) i++;
  90.         else i=(i==0)?i-1:0;
  91.         if(i==100) break;
  92.  
  93.         valor = read_adc();
  94.         output_b(valor);
  95.         delay_us(20);
  96.      }  
  97.      estado_de_pulso = !estado_de_pulso;
  98.      delay_ms(50);
  99.      set_adc_channel(2);
  100.      registro_1 = read_adc()/2 + 1;
  101.      set_adc_channel(0);
  102.  
  103.      // Recording phase
  104.  
  105.      if(input_state(PIN_D7)) while(1) { // if(input_state(PIN_D7)) to read from LOOP/BURST switch
  106.         variable2++;
  107.         if(variable2==255) variable1++;
  108.         if(variable2==registro_1) break;
  109.  
  110.         valor = read_adc();
  111.         output_b(valor);
  112.         delay_us(50);
  113.         delay_us(30);
  114.         writeByte(variable1,variable2,valor);
  115.      }
  116.      else while(1) {
  117.         variable2++;
  118.         if(variable2==255) variable1++;
  119.         if(variable1==128) break;
  120.  
  121.         if(input_state(PIN_D0) != estado_de_pulso) i++;
  122.         else i=(i==0)?i-1:0;
  123.         if(i==100) {
  124.            estado_de_pulso = !estado_de_pulso;
  125.            break;
  126.         }
  127.  
  128.         valor = read_adc();
  129.         output_b(valor);
  130.         delay_us(50);
  131.         delay_us(25);
  132.         writeByte(variable1,variable2,valor);
  133.      }
  134.  
  135.      registro_1 = variable1;
  136.  
  137.      play:
  138.      set_adc_channel(1);
  139.      output_high(PIN_E1); // engage relay, switch to playback mode
  140.      delay_us(50);
  141.      cambio_pulso = read_adc()/2;
  142.      variable1=variable2=dir=0;
  143.      output_high(PIN_E2);
  144.      enable_interrupts(INT_TIMER0);
  145.      movimiento1=0;movimiento2=registro_1/4;
  146.      movimiento3 = 5;
  147.      set_rtcc(0);
  148.      while(1) {
  149.         if(i==100) break;
  150.         delay_us(200);
  151.      }
  152.      estado_de_pulso = !estado_de_pulso;
  153.      disable_interrupts(INT_TIMER0);
  154.      output_low(PIN_E1); // disengage relay, return to full bypass
  155.   }
  156.  
  157.   return;
  158. }
  159.  
  160.  



« Última modificación: 21 Agosto 2015, 05:16 am por simorg » En línea

pomada_de_la_campana

Desconectado Desconectado

Mensajes: 7



Ver Perfil
Re: ayuda con programa
« Respuesta #1 en: 30 Agosto 2015, 09:56 am »

Es muy difícil responder tu pregunta, tienes que dar mas información, al menos que microcontrolador es el que usas, el compilador, etc. Si es que tienes suerte y alguien a programado para esa arquitectura a lo mejor te pueden ayudar.

Lo que te puedo recomendar es leer la documentación que trae el compilador del pic. Esta suele ser muy completa y ayuda a entender el código.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA CON PROGRAMA
Diseño Gráfico
Luisango 1 1,384 Último mensaje 17 Abril 2005, 13:25 pm
por Sub_Cero
ayuda con mi programa
Programación Visual Basic
nitrox 2 1,658 Último mensaje 31 Julio 2005, 00:48 am
por Slasher-K
ayuda programa!!
Programación C/C++
rodrigo_103 4 2,202 Último mensaje 16 Septiembre 2012, 21:58 pm
por rodrigo_103
[Ayuda] ¿Cómo ejecutar otro programa desde mi programa de C#?
.NET (C#, VB.NET, ASP)
Zodiak98 1 2,394 Último mensaje 8 Diciembre 2013, 01:51 am
por Eleкtro
[AYUDA] Ayuda con NETCAT o cualquier otro programa similar
Dudas Generales
Noxware 0 1,246 Último mensaje 16 Junio 2014, 18:13 pm
por Noxware
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines