Hola
He aprendido a usar visual c++ mediante ebooks, y sé muy pocos comandos y formas de hacer las cosas.
Para manejar el puerto paralelo uso el método que publico en un tema en este subforo. Mi forma de usar tiempos es mediante SetTimer(). Tengo entendido que también existe sleep() pero nunca la he usado, porque creo que ocupa el procesador al 100% y SetTimer se maneja como evento. Con SetTimer se pueden hacer cosas mientras el reloj está contando, pero me parece que con sleep no se puede.
Bueno, usando SetTimer manejo los tiempos de salidas al puerto paralelo, pero me doy cuenta que si el procesador está muy ocupado, esos tiempos ya no se cumplen. Adjunto un programa exe que hace uso de settimer y que maneja tiempos de 1ms a 1000ms para alternar las salidas D0, D1 y D2 de 0x378.
No tengo osciloscopio ni equipo para medir tiempos, pero me doy cuenta que el tiempo que uno introduce no se cumple, principalmente en tiempos pequeños como 5ms.
Ahora bien, ¿podría alguien darme una manera eficaz para manejar tiempos en visualc++? Podría ser solo la referencia para empezarlo a estudiar. Talvez sea necesario usar interrupciones por software.
Por si les interesa, aquí pego el código que uso para generar los eventos del timer...
void CMotordiscoduroDlg::OnGiro()
{
MessageBeep(MB_OK); //avisa
GetDlgItem(IDC_GIRO)->EnableWindow(FALSE); //deshabilita botón
GetDlgItem(IDC_HORARIO)->EnableWindow(FALSE); //deshabilita botón
GetDlgItem(IDC_ANTIHORARIO)->EnableWindow(FALSE); //deshabilita botón
GetDlgItem(IDC_DETENER)->EnableWindow(TRUE); //habilita botón
SetTimer(tiempo1,m_velocidad,NULL); //habilita el timer de los pasos del motor
UpdateData(TRUE); //recoge datos de pantalla
}void CMotordiscoduroDlg::OnTimer(UINT nIDEvent)
{
UpdateData(TRUE); //refresca m_velocidad
SetTimer(tiempo1,m_velocidad,NULL); //refresca el timer de los pasos del motor
//MessageBeep(MB_OK); //avisa que entró a timer
//aquí llega cada m_velocidad ms
switch(estado_prox)
{
case 1:
PortOut(puerto_par,estado1);
break;
case 2:
PortOut(puerto_par,estado2);
break;
case 3:
PortOut(puerto_par,estado3);
break;
case 4:
PortOut(puerto_par,estado4);
break;
case 5:
PortOut(puerto_par,estado5);
break;
case 6:
PortOut(puerto_par,estado6);
break;
}
//aquí se indica el siguiente paso a dar, los pasos válidos van del 1 al 6, por lo que 0
//se convierte en 6, y 7 se convierte en 1
if(m_giro==1)
{
estado_prox--; //antihorario
if(estado_prox==0)
estado_prox=6; //reinicia ciclos
}
if(m_giro==0)
{
estado_prox++; //horario
if(estado_prox==7)
estado_prox=1; //reinicia ciclos
}
CDialog::OnTimer(nIDEvent);
}Me interesa el uso de Visual C++ para enfocarlo a la electrónica, talvez visual c++ solo sirva para otras aplicaciones
