TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Moyin en 10 de Enero de 2007, 03:51:20
-
Un buen año para todos mis buenos compañeros de este tan exelente foro......Después de una larga auscencia regreso a buscar mediante su ayuda aclarar una serie de dudas, siguiendo terquenado al MKB me he topado con las interrupciones, he leido creo que toda la teoría acerca de este tema pero al revisal el HELP del MKB solo veo unos pocos ejemplos que no me dejan claro algunos puntos, trate de programar de acuerdo al orden del ensamblador y no hago nada con el programa, no me queda calro el por que del:
sub procedure interrupt
if INTCON.TMR0IF = 1 then attente = attente+1
TMR0 = 96
INTCON.TMR0IF = 0
etc....
relicé un ejemplo del foro y lo quise cambiar para hacerlo como contador de impulsos externos a través del TOCK1 pero no consigo nada, espero pueadan ayudarme he aqui el programa:
program TMRO2
' Este programa produce el encendido del led en RBO cada interrupciòn del TMRO
'al recibir imnpulsos externos a travès del TOCKI(RA4)
dim conta as byte
sub procedure interrupt
if INTCON.T0IF = 1 then 'Checa bandera de interrupciòn del TMRO
conta = conta + 1 'Incrementamos conta por cada interrupciòn
INTCON = $20 'Activamos la interrupciòn del TMRO (TOIE=1)
if conta=1 then 'Verifica que halla desbordamiento del TMRO
conta=0 'Resetea contador
portb.0=1 'Pone "1" en RB0 si se ha producido la interrupción
else
portb.0=0 'Si no permanece en "0"
end if
end if
end sub
main:
option_reg=%01110000 'Divisor a 2, y asignadoa a TMRO(PSA),Incremento
'flanco ascendente TOSE=0, Como contador TOCS=1
intcon=%10100000 ' Habilitamos las interrupciones GIE=1 y el TOIE=1
trisa=255
trisb=0 'Puerto B como salida
portb=0 'Limpiamos el puerto B
porta=0
end.
Sinceramente estoy solo suponiendo pero no encuentro ninguna guia que me oriente, espero puedan ayudarme...Gracias....................Saludos :lol:
-
¿qué micro es este? ¿el 16F84?
Deberías de borrar el registro conta al inicio del programa
main:
conta=0
sub procedure interrupt
if INTCON.TMR0IF = 1 then attente = attente+1
TMR0 = 96
INTCON.TMR0IF = 0
La bandera de interrupción se borra durante el llamado a la rutina de interrupción, creo que lo haces en esta linea:
INTCON = $20 'Activamos la interrupciòn del TMRO (TOIE=1)
Es noche (1:09AM) y me voy a dormir, luego lo miro con mas calma.
-
Habra algun inconveniente que el RA4 sea colector abierto. ¿Tendra que llevar la resitencia PULL?.
-
Eso pudiera ser, lo mas seguro es que eso sea.