Bueno sin entrar en polemicas, simplemente a favor de la ciencia para llegar a la verdad absoluta (jeje).....por partes:
1. La señal de refresco efectivamente es la lectura del puerto, eso si, si te fijas tambien es la lectura del puerto para los pines de la interrupcion, concretamente los pines B4, B5, B6 y B7. Se, ya que eres asiduo al foro, de que sabes de estos 'cacharros' bastante, pero no se si se te ha pasado o simplemente no te has dado cuenta, de que los pic's poseen una interrupcion la cual consiste en generar una interrupcion al cambio de estado de cualquier pin comprendido entre el 4 y el 7 del puerto b, esta interrupcion es la llamada interrupcion del puerto b, la cual es independiente de la interrupcion externa(la cual consiste en generar una interrupcion por el pin B0 del puerto b).
2. Con respecto a si creo que no funciona con el pin B0 y que lo cambie al pin B4, pues no es que no lo crea, es que simplemente estas hablando de cosas diferentes, como bien dice el apartado 1. , la interrupcion externa(producida por el cambio de estado del pin B0) es independiente a la interrupcion del puerto b(generada por los pines del 4 al 7 del puerto b), por lo tanto no vale como respuesta el cambiar de pines ya que no estariamos hablando de la misma interrupcion.
3. Estoy contigo de que la mejor manera es probarlo, por eso mismo el amigo Simulpic ha preguntado esa duda o ese problema que tiene él, porque se ha basado en uno de los ejemplos que esta en este post, concretamente es el ejemplo numero 48 que lo realize el dia 15/Noviembre/05, y dicho ejemplo consiste en utilizar la interrupcion del puertob comprendida por los pines 4 al 7, y es mas, dicho ejemplo consiste en mostrar como saber que pin de dicha interrupcion produce la propia interrupcion. Por lo tanto, yo no hablo sin probar las cosas, es mas el programa lo realice yo.
4. Con respecto a la instruccion output_low(PIN_B0);, ¿para que esta? ¿por que se puso en el ejemplo numero 48 que trata de la interrupcion del puerto b? pues sencillamente, nos podriamos ir al ejemplo numero 48(el cual esta en la pagina 12 de este mensaje) y veriamos que alli donde esta escrito yo comento parte del funcionamiento del programa, y en ese parrafo donde comento parte del funcionamiento del programa digo lo siguiente:
Buenas!!!!bien, el programa de hoy se basa en las interrupciones producidas al cambio de estado por uno de los pines del portb dedicados a dicha tarea, los pines que generan interrupcion son <4:7>. El programa en si realiza la secuencia de luces del coche fantastico con 4 led"s hasta que uno de los pines <4:7> cambia de estado del port b, entonces genera una interrupcion y realiza una secuencia de iluminacion de los led"s distinta, [color=red]aparte cada vez que estemos en una interrupcion se iluminara el led conectado al pin b0[/color]....bueno aqui el codigo!:
Por lo tanto que el pin B0 entre en juego en este programa es simplemente para mostrar al que lo simula o lo monte, que cuando cambie algun estado de los pines 4 al 7 del puerto b, se iluminara el pin B0 para decir al usuario que estamos dentro de la interrupcion y en el momento de haber realizada dicha interrupcion se apagara dicho pin B0 para decir al usuario que ya no estamos en la interrupcion, sino en el programa principal. Por eso mismo la instruccion output_low(PIN_B0); aparece en el programa porque al entrar en la interrupcion esta la instruccion output_high(PIN_B0);. Y no esta para nada mas que para eso, para indicar que estamos dentro o fuera de la interrupcion.
5. Con respecto a la documentacion y al esquema me parecen fabuloso que lo hagas, pero veras que el esquema trata de los pines 4 al 7, indicas en dicho esquema que para el refresco se usa la lectura del puerto b entero, claro que si, pero si te vas al data sheet del
16F648A concretamente en la pagina 38(para el adobe, la pagina 36 para el data sheet) te dice que la lectura del puerto b se realiza para compararla con el estado d elo spines 4 al 7 del puerto b para ver si alguno de ellos cambia su estado y asi producir la interrupcion, pero no vale para nada mas, y en este caso el pin b0 no interviene sino simplemente los pines b4, b5, b6 y b7.
6. Para seguir documentando la explicacion y el ejemplo, el programa numero 48 como bien he mencionado ya, se basa en la interrupcion del puerto b(los cuales intervienen los pines del 4 al 7 del mismo puerto), y se basa tambien en decir al usuario que pin genero dicha interrupcion(no nos olvidemos que los pines que pueden generar la interrupcion son los pines b4,b5,b6 y b7), dicho ejemplo, como bien comento cuando lo escribi, esta en parte, sacado de la ayuda del compilador CCS, concretamente si te vas a la
help del CCS, en la pagina 267(para el adobe, 255 para el compilador) veras que te dan un trozo de codigo para indicar que pin de la interrupcion del puerto b genera dicha interrupcion(recordar por n-esima vez que los pines para la interrupcion son simplemente los comprendidos entre el pin 4 y el 7) y veras que dicho codigo no interviene para nada el pin B0 pero si se usa la lectura del puerto b entero pero para manejarlo simplemente para los pines b4, b5, b6 y b7(esto es asi, ya que resulta mas facil leer el puerto entero que pin a pin), y veras en dicho trozo de codigo que esta en el manual del compilador que la instruccion output_low(b0); no aparece por ningun lado, claro esto es asi ya que esa instruccion la puse yo en el programa mio para indicar, como ya he mencionado, cuando estamos dentro de la interrupcion.
7. Imaginate que para generar la interrupcion sea de flanco de subida a flanco de bajada del pin, la instruccion output_low(b0); siempre generaria una interrupcion segun tu explicacion, por lo tanto algo esta mal....
En resumen, me parece que te has confundido de interrupcion, no es la interrupcion externa que si maneja en pin b0, en este caso estamos tratando la interrupcion del puerto b que maneja los pines b4, b5, b6 y b7, por lo tanto el pin b0 no interviene, ya que en el caso de intervenir tendriamos una interrupcion menos, imaginate que tenemos un programa que usa tanto la interrupcion externa(es decir el cambio de estado del pin b0) como la interrupcion del puerto b(es decir, el cambio de estado de los pines 4 al 7) y ademas, que el pin b0 este configurado para generar una interrupcion cuando cambie de '1' a '0' logico, segun tu explicacion al poner output_low(b0); al termino de la interrupcion del puerto b(los pines del 4 al 7 del puerto b) generaria segun el punto 7 de mi explicacion una interrupcion externa, ¿pero seria externa o de software? seria de software, por lo tanto esta mal tu explicacion.
Al amigo Simulpic, no le funcionara bien porque al simularlo, seguro que algun pin del puerto b(pines comprendidos unicamente del 4 al 7 ambos inclusive) cambiaran de estado, produciendole una interrupcion.
Y no quiero con esto entrar en polemicas contigo, amigo jfh900, sino dar mi explicacion de como creo que es.
Suerte!!!
