Hola a todos, una felicitacion por su gran capacidad y paciencia para transmitir sus conocimientos a los que menos entendemos de este tema, yo quiero colaborar con este programa, que lo que hace es simular pwm para 3 led (rgb) y generar diferentes colores de acuerdo al valor de las variables, hay que ajustar los tiempos de las pausas para lograr una frecuencia de 50hz por ejemplo para que no se noten parpadeo en los leds pero es minima la modificacion que hay que hacer, en cuanto lo tenga al cien subire las correcciones, por otro lado quisiera preguntar si alguien me puede ayudar a corregirlo ya que quiero cambiar los valores de tiempo de cada color a travez de la interrupcion (serin)y no logro hacerlo , de momento solo tengo el serin para modificar el color azul pero no logro cambiar el valor de este. lo de la interrupcion lo copie de algun post que encontre por aqui

, por cierto agrtadesco a todos en este foro ya que he aprendido gracias a ustedes.
include "modedefs.bas"
'***********configuracion del pic******************************************
@ device pic12f629, INTRC_OSC, wdt_off, pwrt_on, mclr_off, bod_off, protect_off
'dispositivo 12f629, ocilador interno,wath dog off, master clear off,
OPTION_REG=%00000000 ' RESISTENCIAS PULL UP ABILITADAS
WPU.2=1 'RESISTENCIA PARA GPIO2 ACTIVA
INTCON.4=1 'INTE - INTERRUPCION POR EL PIN GPIO2 ENABLE
INTCON.7=1 'GIE - interrupciones generales ABILITADAS
CMCON = 7 ' Set GP<2:0> to Digital, Disable comparator
TRISIO = %00001100 ' ENTRADAS GPIO3 Y GPIO2
Define INTHAND _Interrupcion
wsave var byte bank0 system ' estos registros en banco 0 obligatorio
ssave var byte bank0 system
psave var byte bank0 system
azul var byte bank0 system
verde var byte bank0 system
rojo var byte bank0 system
ac var byte [3]
sumat var byte
j var byte
i var byte
menor var byte
indice var byte
gpio=0
azul =200
verde=100
rojo=100
goto inicio '***********saltamos el handler de interrupciones******
Interrupcion: '********* Asegurate que este en pagina 0 *************
intcon.7=0 'desabilita interrupciones generales
serin gpio.2,t2400,["A"],azul
toggle gpio.5 'solo utilizo este pin para detectar si esta entrando
'a la interrupcion
asm
BTFSS intcon,INTF ; Salta si la interrupción es GPIO2
RETFIE ; Interrupción desconocida, regresar
; (es un mecanismo de seguridad).
bcf INTCON , INTF ; Resetea bandera de interrupcion por gpio2
bsf INTCON , GIE ; Activa interrupciones generales
movf psave,w ; restaura
movwf PCLATH
swapf ssave,w
movwf STATUS
swapf wsave,f
swapf wsave,w
retfie
EndAsm
'**************empieza el programa principal*****************
inicio:
gpio.0=1 'ACTIVA LAS SALIDAS 0,1,Y 4 DEL PIC QUE CORRESPONDEN
gpio.1=1 ' A LOS LEDS AZUL,VERDE, ROJO
gpio.4=1
ac[0]=azul 'asigna el valor de las variables de color al arreglo.
ac[1]=verde 'da lo mismo asignar directamente los valores al arreglo
ac[2]=rojo
sumat=0 ' esta variable guarda el valor de el tiempo de la pausa anterior
for j =0 to 2 'en esta parte del programa busca el valor del color
menor=201 'que debe estar menor tiempo encendido, manda la pausa
for i=0 to 2 'correspòndiente, guarda el valor como tiempo
if ac
< menor then 'transcurrido cambia el valor de la variable que
menor=ac 'fue apagada para que en el siguiente ciclo
indice=i 'sea ignorada y tomada la siguiente menor y asi
endif 'sucesivamente hasta que simula pwm diferente
'para cada led. en el ciclo for interior se compara
next i 'el valor menor y el indice en el que se encuentra
'para saber cual sera la pausa y el puert0 a apagar.
ac[indice]=201
pause (menor-sumat)
sumat=menor
select case indice
case 0
gpio.0 =0
case 1
gpio.1 =0
case 2
gpio.4 =0
end select
next j
pause 100
goto inicio