no me enojo para nada, el codigo que subi te lo mencione porque es un ejemplo que se relaciona con lo que queres hacer y que funciona, basicamente como detectar un pulso ascendente de la señal de clock por interrupcion en RB0, yo lo implemente en un 16f84, pero por lo que estuve viendo (aclaro que mi experiencia en pics es minima, esta es la primera vez que uso interrupciones) el 16F648 tiene tambien una interrupcion en RB0 de las mismas caracteristicas.
yo venia haciendo algunas cositas con la entrenadora que me arme y me decidi usar C (ccs) por primera vez para este proyecto por la simplicidad que presentaba comparado con assembler, con basic no hice nunca nada.
si te fijas en el programa se ve como usar las interrupciones, la interrupcion es como una sub-rutina que se activa por una causa interna o externa (en este caso), solo hay que activarla (decirle al pic que se va a utilizar) y determinar si es por flanco ascendente o descendente.
En tu caso ademas de detectar el flanco, tenes que generar la secuencia de pasos (full step o halfstep) tendras una secuencia de cuatro pasos u ocho segun el caso, ademas tener en cuenta el sentido de giro (se me ocurre que podes usar la interrupcion por cambio de estado del puerto b RB4-7)
pero lo que es mas importante es el chopeado, para esto me parece que el 12f675 se queda corto, pero el 16f648 tiene comparador, talves se pueda usar para comparar Vref con la caida en Rsense y generar los pulsos del enable para los puentes H del driver.
yo arrancaria de apoco y por poco que sea lo que tengas lo iria posteando, si lo haces en basic, habriria tambien un hilo en el sub-foro de lenguaje basic para pics de todo pic, detallando lo mejor posible el objetivo del codigo. (eso fue lo que hice yo, pero en el sub foro de C, y teniendo muy pocos conocimientos de C y nada de C para pics). no es poco lo que te planteas hacer pero no creo que sea imposible.
acá te dejo el codigo para que detecte por interrupcion flancos ascendentes y por un segundo ponga a 0 RA0
#include <16F648.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT //fusibles (cristal, sin watch dog, sin proteccion)
#use delay(clock=4000000) //velocidad del cristal
#use fast_io(A) //el compilador no se asegura que los puertos esten asignados
//correctamente como entradas o salidas segun corresponda, esto evita
//codigo extra, pero se tiene que configurar correctamente los registros
//tris segun el uso que se le de a los puertos.
#use fast_io(B)
#INT_EXT //interrupcion externa en RB0 (codigo que se ejecutara por cada pulso ascendente)
void interrupcionRB0() {
output_a(0b00000); //pongo a cero el puerto A
delay_ms(1000) //por cada interrupcion en RB0 RA0 se apaga 1 segundo
}
void main () { // programa principal
delay_ms(333); //pausa mientras se estabiliza el pic
disable_interrupts(global); //desabilito todas las instrucciones que voy a usar
disable_interrupts(int_ext);
delay_ms(333); //estabilizo y pongo a "cero" el pic
///////////////inicializo las partes a usar del pic///////////////////////
set_tris_a(0b00000); //todo el puero a como salidas
output_a(0b00000); //pongo a cero todo el puerto A
set_tris_b(0b00000001); //selecciono RB0 como entrada
ext_int_edge(0,L_TO_H); //configuro para que detecte flancos ascendentes
enable_interrupts(int_ext); //habilito la interrupcion externa
enable_interrupts(global); //habilito el uso de interrupciones
do {
output_a(0b00001); //pongo a 1 RA0
}
} while (TRUE); //bucle infinito
}
espero te sirva de algo lo que te comento.
saludos.