HOla !!
bueno considerando que no hubo mas respuestas empiezo colocando un sencillo ejemplo de Pic basic Plus , queda pendiente la simulacion en proteus que voy a ver si la hago mañana !
este ejemplo alterna el encendido de dos leds conectados al port B1 y port B2 de un pic 16f84a
Codigo:
"##########################################################
"## alterna el encendido de 2 leds ##
"## doppel - La Pampa - Argentina ##
"## --- 10/08/04 ---- ##
"#########################################################
" DISPOSITIVO a usar
device = 16f84
xtal = 4
Symbol LED1 PORTB.1 "convierto el portb.1 en LED1
symbol LED2 PORTB.2 " convierto el portb.2 en LED2
Clear
PORTB = 0
TRISB = %11111001 " DEFINO ENTRADAS Y SALIDAS
ALTERNAR: DELAYMS 10
HIGH LED1 "enciendo led 1
LOW LED2 "apago led 2
PAUSE 250 " pausa de 250 ms
LOW LED1 "apago led 1
HIGH LED2 "enciendo led2
PAUSE 250 " pausa de 250 ms
GOTO ALTERNAR " vuelve a "alternar"
saludos
a ver quien se suma!
Hola:
Pana Doppel hay solo unas cosillas que me parecen que estan demas...!
Codigo:
Clear
PORTB = 0
TRISB = %11111001 " DEFINO ENTRADAS Y SALIDAS
Esto, ya que como utilizas las funciones HIGH y LOW y estas funciones hacen automaticamente como salida al pin especificado.
Y aqui
Codigo:
ALTERNAR: DELAYMS 10
Me parece que el DELAYMS esta demas...!
este es el mismo ejemplo tuyo, solo le he hecho unos pequeños cambios:
Codigo:
" DISPOSITIVO a usar
device = 16f84
"CRISTAL
xtal = 4
ALTERNAR:
HIGH 0 "enciendo led 1
LOW 1 "apago led 2
PAUSE 250 " pausa de 250 ms
LOW 0 "apago led 1
HIGH 1 "enciendo led2
PAUSE 250 " pausa de 250 ms
GOTO ALTERNAR " vuelve a "alternar"
y este es el esquema en proteus:

tambien se puede utilizar DELAYMS en lugar de pause, los dos funcionan bien... 
Seria interesante que los demas compañeros que esten interesado empiecen a postear sus ejemplos en PBP o Proton+ para ve que fallas o preguntas o sugerencias vamos teniendo....!
PD: este mismo codigo les puede servir para PBP, omitiendo las declaraciones del micro a utilizar y el oscilador, con respercto a este ultimo se lo define asi:
Codigo:
DEFINE OSC 4
ALTERNAR:
HIGH 0 "enciendo led 1
LOW 1 "apago led 2
PAUSE 250 " pausa de 250 ms
LOW 0 "apago led 1
HIGH 1 "enciendo led2
PAUSE 250 " pausa de 250 ms
GOTO ALTERNAR " vuelve a "alternar"
Este seria el programa para PBP...
Hola amigos
viendo que no hay mucha actividad!! pongo algunas cositas mas en Protón +
para descargar el soft la version LIte con el manual:
http://www.picbasic.org/proton_plus.php
En el siguiente ejemplo vemos el funcionamiento del comando BUTTON a lo visto del ejemplo de los led´s le sumamos unas cositas
sintaxis:
BUTTON Pin , DownState , Delay , Rate , Workspace , TargetState , etiqueta
para mas detalles de funcionamiento referirse al manual o al sig: post
http://miarroba.com/foros/ver.php?foroid=8826&temaid=216381
donde hay una explicacion de LAGER acerca del funcionamiento y configuracion.-
Codigo:
Dim btn as Byte
symbol LED1 PORTB.1
symbol LED2 PORTB.2
symbol SWICH PORTB.3
Clear
PORTB = 0
TRISB = %11111001 " DEFINO ENTRADAS Y SALIDAS
TITILAR: DELAYMS 10
HIGH LED1
HIGH LED2
PAUSE 250
LOW LED1
LOW LED2
PAUSE 250
button SWICH,0,10,2,btn,0,TITILAR " testea el boton swich, si está oprimido
GOTO ALTERNAR " realiza la accion titilar sino hace
ALTERNAR: DELAYMS 10 " un salto a la siguiente instruccion
HIGH LED1 " conclusion: sale del bucle al apretar el boton
LOW LED2
PAUSE 250
LOW LED1
HIGH LED2
PAUSE 250
button SWICH,0,10,2,btn,0,ALTERNAR
GOTO TITILAR
mas allá de que algunas cosas están demás y seguramente funcionaria igual, el objetivo es acostumbrar a ver el tipo de declaraciones en el código

saludos!!
y a ver quien se anima! jeje
Holas
les coloco un ejemplo con un display de 7 segmentos, usando IF
ya en este foro se ha tocado el tema muchas veces en la parte referida a PIC BASIC PRO Y PROTON mas especificamente en :
http://miarroba.com/foros/ver.php?foroid=8826&temaid=4001543
donde hay un montón de ejemplos hechos por LORDLAFEBRE, donde se utiliza un display de 7 segmentos pero utilizando LOOKUP , los ejemplos de Lordlafebre están hechos en Pbpro
he aqui otra forma, no muy "estilizada" pero bien sirve como ejemplo está en PBplus donde tb es factible usar LOOkUP.-
como pueden observar las diferencias no existen casi, por lo menos en estos sencillos ejemplos, ya cuando coloquemos ejemplos mas complejos se notaran algunas diferencias bien marcadas.-
Codigo:
device = 16f84a
xtal = 4
dim Buff as Byte
dim cuenta as Byte
symbol btn = PORTB.0
clear
cuenta = 0
TRISB = %00000001 "defino todas salidas menos el bit 0 que es entrada
PORTB = %11110010 "inicio mostrando el numero "1" en el display
inicio:
DELAYMS 25
BUTTON btn,0,40,5,Buff,1,programa "si el boton es apretado sale del bucle y va a programa
GOTO inicio
programa:
cuenta = cuenta + 1
IF cuenta > 9 THEN
cuenta = 0
else
if cuenta = 1
PORTB = %11110010 "numero 1
goto inicio
endif
if cuenta = 2
PORTB = %01001000 " numero 2
goto inicio
endif
if cuenta = 3
PORTB = %01100000 "numero 3
goto inicio
endif
if cuenta = 4
PORTB = %00110010 "numero 4
goto inicio
endif
if cuenta = 5
PORTB = %00100100 "numero 5
goto inicio
endif
if cuenta = 6
PORTB = %00000100 "numero 6
goto inicio
endif
if cuenta = 7
PORTB = %11110000 "numero 7
goto inicio
endif
if cuenta = 8
PORTB = %00000000 " numero 8
goto inicio
endif
if cuenta = 9
PORTB = %00110000 "numero 9
endif
endif
goto inicio
tb una imagen de la simulacion en proteus! saludos
y ojala alguien se anime a colocar sus imagenes de como implemento los ejemplos
Hola:
Aqui esta el mismo ejemplo del amigo Doppel pero en PBP y utilizando un Case:
Codigo:
"Display 7seg. con Case
cont var byte
TRISB=0
cont=0
loop:
select case cont
"gfedcba
case 0
PORTB=%01000000
case 1
PORTB=%01111001
case 2
PORTB=%00100100
case 3
PORTB=%00110000
case 4
PORTB=%00011001
case 5
PORTB=%00010010
case 6
PORTB=%00000011
case 7
PORTB=%01111000
case 8
PORTB=%00000000
case 9
PORTB=%00011000
end select
cont=cont+1
if cont>9 then
cont=0
endif
pause 250
goto loop
end
Hola amigos!
completando el circuito anterior he agregado una rutina para el RESET, la cual borra los números del array y lo deja en "0" indicandolo en el display, pendiente queda para la proxima el grabado en la EPROM.-
Codigo:
labelreset:
for R=0 to 3 "recorro las posiciones del array
arrVals[R]= 0 "igualo las posiciones a "0"
next
PORTB = %10000000 " resetea a cero y muestra cero en display
goto inicio
lo anterior se agrega al codigo existente.-
la simulación en proteus:

saludos!!
Hola Amigos! 
retomando el tema vamos a grabar los valores en la eprom interna del PIC, acá se usa el mismo circuito que el ejemplo anterior con las diferencias del codigo.-
según el manual:
Sintaxis
EWRITE dirección , [ Variable {, Variable…etc } ]
-escribe información en la memoria eprom disponible en algunos tipos de pic.-
Sintaxis
Variable = EREAD dirección
Lee la informacion de la eprom interna.-
algunos cambios al codigo anterior
en el grabado no se usa mas el array.
Codigo:
labelSave:
if w < 4 then
ewrite w, [cuenta] "asigno 4 valores en la eprom interna
w = w + 1
else
PORTB = %00001100 " muestra la E de error por desborde
endif
goto inicio
En la muestra de los valores se lee de la eprom y el reset pone a "0" la eprom (si bien esto desde el punto de vista práctico no es lo conveniente en este caso por el intenso trabajo que lleva a cabo la eprom interna, ya que con el boton reset estariamos continuamente borrando y escribiendo con save espero alguien pueda aportar datos sobre esto, pero creo que en casos asi se usa una eprom externa, esto lo dejaremos para mas adelante.-
Codigo:
labelShow:
FOR x=0 to 3 "leo las 4 posiciones de la eprom para mostrar los números almacenados
show = eread x
if cuenta = 0
PORTB = %10000000 "numero 0
endif
if show = 1
PORTB = %11110010 "numero 1
endif
if show = 2
PORTB = %01001000 " numero 2
endif
if show = 3
PORTB = %01100000 "numero 3
endif
if show = 4
PORTB = %00110010 "numero 4
endif
if show = 5
PORTB = %00100100 "numero 5
endif
if show = 6
PORTB = %00000100 "numero 6
endif
if show = 7
PORTB = %11110000 "numero 7
endif
if show = 8
PORTB = %00000000 " numero 8
endif
if show = 9
PORTB = %00110000 "numero 9
endif
PAUSE 1000
NEXT
x=0
goto inicio
labelreset:
for R=0 to 3 "recorro las posiciones de la eprom
ewrite R,
- "igualo las posiciones a "0"
next
PORTB = %10000000 " resetea a cero y muestra cero en display
w = 0
goto inicio
END
espero que se animen y coloquen sus experiencias.-
saludos 
Hola gente !
estoy un poco complicado con el tiempo pero siempre que me pueda escapar un segundo estare colocando ejemplos.-
Lo visto hasta ahora fue en base a display de 7 segmentos, lo que sigue es lo obligatorio y es pasar a pantallas de LCD 
Lo siguiente es un ejemplo sencillo de manejo de LCD con las configuraciones que toma por defecto el protón, osea que solamente conectamos el lcd en las patas que correspondan por "default" y sale andando! distinto seria si quisieramos que funcione en otros puertos que no fueran estos, para ello tendriamos que declararlos y decirle a proton donde vamos a conectar cada cosa, pero esto queda para el proximo ejemplo.-
el siguiente codigo hace aparecer un mensaje de dos lineas, y está desarrollado con un lcd de 2x16 generico y con un pic 16f84a.-
Codigo:
"conexiones default = 4 bits, 2 lineas de display x 16
"d4 = RB4
"d5 = RB5
"d6 = RB6
"d7 = RB7
"EN = RB2
"R/W = masa
"RS = RB3
device = 16f84a " declaramos pic a usar
xtal = 4 " declaramos cristal
"no se usan los comandos de inicializacion por usar conexiones por defecto
print $fe, 1 " limpia pantalla
delayms 30 " siempre despues de limpiar pantalla hacer un delay
print $fe, 128, "hola loco!!!" " se posiciona en la posicion 1 de la linea 1 (home) y muestra el mensaje
print $fe, $c0 " se posiciona en el comienzo de la linea 2
print "como estas?" " muestra el mensaje
la imagen correspondiente en proteus!

como siempre espero que coloquen sus imagenes para ver como les queda y tb que hagan sus consultas, entre todos solucionaremos las dudas.-
saludos 
Ahi va otro ejemplo tomando otros puertos para el manejo del LCD.- 
En el manual estan los demás detalles !!
Codigo:
"conexiones = 4 bits, 2 lineas de display x 16 -
"d4 = RB0
"d5 = RB1
"d6 = RB2
"d7 = RB3
"EN = RB4
"R/W = masa
"RS = RB5
device = 16f84a " declaramos dispositivo
declare xtal = 4 " declaro cristal
declare lcd_type 0 " declaramos el tipo de LCD 1=grafico 0=alfanumerico
declare lcd_dtport PORTB " declaramos puerto a usar
declare lcd_dtpin PORTB.0 " asigna puerto y pines que se usaran como linea de DATOS
declare lcd_enpin PORTB.4 " asigna el puerto y pin para linea de ENABLE
declare lcd_rspin PORTB.5 " asigna el puerto y pin para linea de RESET
declare lcd_interface 4 " informa al compilador cuantas lineas se usan de conexion 4 u 8
declare lcd_lines 2 " informa al compilador la cantidad de lineas del LCD este caso 16 x 2 lineas
print $Fe, 1 " limpia pantalla
delayms 30 " siempre que se limpia pantalla tiene que haber un pequeño delay luego
print $fe,128,"HOLA LOCO !!" " va al home y muestra mensaje

saludos.-
Hola brothers
pues bien hoy he trabajado a doble jornada

asi que aca esta el 3er ejemplo de este post, es el mismo que hizo el pana doppel en proton, osea un contador de 0 a 9, con un boton pulsador..
aca el codigo..
Codigo:
"******************************************************
" CONTADOR 0 - 9 DISPLAY 7 SEG Y BOTON
"******************************************************
$crystal = 1000000 "cristal interno 1 MHZ ATMEGA9
Ddrb = 255 "configurar puerto B como salida todos los pines en alto 1 logico
Portb = 255
Ddrc.0 = 0 " configurar pic C.0 como entrada en pull up
Portc.0 = 1
Btn Alias Pinc.0 " renombrar al pin C.0 ; boton pulsador
Dim Cuenta As Byte " variable que va a contar las pulsaciones del boton
"* g f e d c b a #
"0 1 0 0 0 0 0 0 0
"0 1 1 1 1 0 0 1 1
"0 0 1 0 0 1 0 0 2
"0 0 1 1 0 0 0 0 3
"0 0 0 1 1 0 0 1 4
"0 0 0 1 0 0 1 0 5
"0 0 0 0 0 0 1 0 6
"0 1 1 1 1 0 0 0 7
"0 0 0 0 0 0 0 0 8
"0 0 0 1 0 0 0 0 9
"0 0 0 1 1 1 1 1 -
Inicio:
Do
Loop Until Btn = 0 "rutina que se repite hasta que se pulsa el boton
Goto Programa "va a la rutina Programa
Programa:
Cuenta = Cuenta + 1 " aumenta el valor del contador cada vez que se pulsa el boton
If Cuenta > 10 Then " si contador mayor a diez vuelve a cero
Cuenta = 0
End If
Select Case Cuenta " sentencia CASE que selecciona el dato a enviar por el puerto B segun
Case 0 : Portb = &B01000000 " el valor de la variable cuenta (contador)
Case 1 : Portb = &B01111001
Case 2 : Portb = &B00100100
Case 3 : Portb = &B00110000
Case 4 : Portb = &B00011001
Case 5 : Portb = &B00010010
Case 6 : Portb = &B00000010
Case 7 : Portb = &B01111000
Case 8 : Portb = &B00000000
Case 9 : Portb = &B00010000
Case 10 : Portb = &B00111111
End Select
Waitms 200 " tiempo de espera para poder visualizar el valor en el display de 7 seg
Goto Inicio
"**********************
eso es el programa, ahora bien el pana Lord Lafrebre me ha hecho caer en cuenta que no todos tienen el bascom AVR, asi que las dos soluciones, o lo descargan con el emule o pues pueden descargar una version demo desde este link..
BASCOM AVR DEMO:
http://www.mcselec.com/index.php?option=com_docman&task=cat_view&gid=99&Itemid=54
desde este link se pueden descargar los archivos de este ejemplo..
EJ 3. CONTADOR 0 - 9 DISPLAY 7 SEG Y PULSADOR:
http://miarroba.com/foros/ver.php?foroid=348538&temaid=3885413
listo, espero que les sirvan estos peque ejemplillos..
SALUDOS DESDE ECUADOR ....
Hola compadres..
Hola Paola, pues sabes que si tengo mas ejemplos de BASCOM AVR, solo que no son hechos por mi, asi que no se que tan entendibles sean, pero si desees te los paso, mandame un privado o deja tu direccion email aca en el foro...
Bueno perdon por no avanzar en estos dos dias pero el viernes me fui al concierto de Juanes asi que ya no pude colocar el ejemplo del dia, y ayer estuve muy enfermito pero bueno ya estamos mejor asi que a ponernos al dia...
El ejemplo de hoy es el mismo del pana doppel, osea un display 7 seg que muestra nuemeros del 0 al 9, un boton para guardar hasta 4 numeros en un arreglo y otro boton para mostrar los numeros guardados...
El programa que hice pues tiene algunas mejorias que el original pero casi ninguna notable 
pero en este ejemplo ya utilizamos la EEPROM del microcontrolador ATMEGA8 para guardar el arreglo de 4 numeros... bueno basta de palabras vamos al codigo...
Codigo:
ejemplo 4:
"******************************************************
" 3 BOTONES - 7 SEG - SAVE - NEXT - SHOW
"******************************************************
$crystal = 1000000 "cristal interno 1 MHZ ATMEGA9
Ddrb = 255 "configurar puerto B como salida todos los pines en alto 1 logico
Portb = 255
Ddrc.0 = 0 " configurar pic C.0 como entrada en pull up
Portc.0 = 1
Ddrc.1 = 0 " configurar pic C.0 como entrada en pull up
Portc.1 = 1
Ddrc.2 = 0 " configurar pic C.0 como entrada en pull up
Portc.2 = 1
Btnnext Alias Pinc.0 " renombrar al pin C.0 ; boton pulsador
Btnsave Alias Pinc.1 " renombrar al pin C.1 ; boton pulsador
Btnshow Alias Pinc.2 " renombrar al pin C.2 ; boton pulsador
Dim Cuenta As Byte " variable que va a contar las pulsaciones del boton
Dim Arrvals(4) As Eram Byte " ARREGLO DE VARIABLES DONDE SE GUARDARAN LOS NUMEROS
" la sentencia ERAM hace que esta arreglo se guarde en la EEPROM del micro.
Dim X As Byte " VARIABLE QUE CONTARA NUMERO DE NUMEROS GUARDADOS
"* g f e d c b a #
"0 1 0 0 0 0 0 0 0
"0 1 1 1 1 0 0 1 1
"0 0 1 0 0 1 0 0 2
"0 0 1 1 0 0 0 0 3
"0 0 0 1 1 0 0 1 4
"0 0 0 1 0 0 1 0 5
"0 0 0 0 0 0 1 0 6
"0 1 1 1 1 0 0 0 7
"0 0 0 0 0 0 0 0 8
"0 0 0 1 0 0 0 0 9
"0 0 0 1 1 1 1 1 -
"For X = 1 To 4
" Arrvals(x) = 0 " CARGAR CON VALOR 0 A LOS 4 NUMEROS DEL ARREGLO
"Next
X = 0 " EL CONTADOR X INICIA CON VALOR 0
Cuenta = 0
Inicio: " RUTINA PRINCIPAL
Gosub 7seg
If Btnnext = 0 Then " SI SE PULSA EL BOTON NEXT VA A LA RUTINA PROGRAMA
Goto Programa
End If
If Btnsave = 0 Then " SI SE PULSA EL BOTON SAVE VA A LA RUTINA GUARDAR
Gosub Guardar
End If
If Btnshow = 0 Then " SI SE PULSA EL BOTON SHOW VA A LA RUTINA MOSTRAR
Goto Mostrar
End If
Goto Inicio
Programa:
Cuenta = Cuenta + 1 " aumenta el valor del contador cada vez que se pulsa el boton
If Cuenta > 9 Then " si contador mayor a NUEVE vuelve a cero
Cuenta = 0
End If
Gosub 7seg " VA A LA RUTINA 7SEG DONDE SE MUESTRA EL VALOR POR EL DISPLAY
Goto Inicio " vuelve a la rutina INICIO
Guardar:
If Btnsave = 0 Then Goto Guardar " PARA EVITAR REBOTES
X = X + 1 " AUMENTA EL CONTADOR X PARA EL ARREGLO ARRVALS
If X > 4 Then " SI SE TRATA DE GUARDAR MAS DE 4 VALORES MUESTRA LA LETRA E DE ERROR
Gosub Error
End If
Arrvals(x) = Cuenta " guarda el valor EN LA POSICION X DEL ARREGLO ARRVALS
Return
7seg:
Select Case Cuenta " sentencia CASE que selecciona el dato a enviar por el puerto B segun
Case 0 : Portb = &B01000000 " el valor de la variable cuenta (contador)
Case 1 : Portb = &B01111001
Case 2 : Portb = &B00100100
Case 3 : Portb = &B00110000
Case 4 : Portb = &B00011001
Case 5 : Portb = &B00010010
Case 6 : Portb = &B00000010
Case 7 : Portb = &B01111000
Case 8 : Portb = &B00000000
Case 9 : Portb = &B00010000
Case 10 : Portb = &B00000110
End Select
Waitms 200
Return
Mostrar: "RUTINA PARA MOSTRAR VALORES DEL ARREGLO
For X = 1 To 4 "SE MUESTRA LOS VALORES CON UNA RUTINA FOR
Cuenta = Arrvals(x) " carga a cuenta con los valores guardados
Gosub 7seg "muestra los valores guardados
Waitms 300
Portb = &B00111111 "muestra un guion de separacion entre numeros guardados
Waitms 200
Next
Portb = &B00111111 " MUESTRA UN GUION QUE INDICA QUE SE MOSTRO TODA LA CLAVE
Waitms 500
X = 0 "volver a inicializar variables
Cuenta = 0
Goto Inicio
Error: "RUTINA PARA MOSTRAR ERROR
Cuenta = 10
Gosub 7seg
Waitms 250
Return
End
Listo eso es todo compadres, aca el link para descargar los respectivos archivos:
http://miarroba.com/foros/ver.php?foroid=348538&temaid=3895482
Bueno eso es todo por hoy...
SALUDOS COMPADRES..






Hola hermanos...
Pues por ir en orden haciendo los ejemplos de doppel no me di cuenta que ya habia posteado en la pagina 2, como usar la EEPROM y la utilizacion de un boton de RESET.. 


Pues bien, en este apartado solo incluire el codigo que deberìan añadir en el programa del ejemplo 4... jejeje
En la declaracion de puertos deben colocar un cuarto boton el de reset que podemos colocarlo..
Codigo:
"***AÑADIR EN LA PARTE SUPERIORD DEL PROGRAMA***
Ddrc.3=0 "declara el pinc.3 como salida pull up
Portc.3=1
Btnreset Alias Pinc.3 "renombra al pinc.3 como btnreset
Dentro de la rutina Inicio deberian agregar esto:
Codigo:
" ****DENTRO DE RUTINA INICIO****
If Btnreset = 0 Then " SI SE PULSA EL BOTON RESET VA A RUTINA RESETEAR
Goto Resetear " va a rutina resetear
End If
Listo y para finalizar deben agregar la rutina Reset, que simplemente seria..
Codigo:
"***RUTINA PARA RESETEAR****
Resetear:
For X = 1 To 4
Arrvals(x) = 0 " CARGAR CON VALOR 0 A LOS 4 NUMEROS DEL ARREGLO
Next
Cuenta=0 "cargar valor 0 a variable cuenta
Goto Inicio "ir a la rutina inicio que ira a la rutina 7seg y mostrara el valor 0 en el display de 7 seg
Pues bien eso seria todo, como les decia en los post anteriores se maneja la Eeprom del micro colocando la sentencia:
Dim VAR As Eram Byte (o Bit o single, etc) que esta al inicio del programa...
Bueno hay que tener en cuenta que para la simulacion en proteus pues solo deben aumentar el boton RESET al esquema que pueden descargar desde el link del ejemplo 4..
Bueno, con eso tendriamos completo el ejemplo 4 de doppel y pues manos a la obra con el 5 ejemplo, el manejo del LCD que la verdad en bascom AVR es bastante sencillo su configuraciòn...
Bueno voy a trabajar en el ejemplo y la explicacion...
SALUDOS DESDE ECUADOR Y UN ABRAZO COMPADRES 

Buenas Compadres...
Pues bien aca con otro ejemplito que consiste en un contador de 0 a 9 en un display de 7 seg, hay un boton para dar inicio al conteo, lo interesante es que se empieza contando con tiempo de muestra entre numero y numero de 1 seg... al llegar a 9 pues disminuye el tiempo de muestreo entre numeros en 100ms, y asi sigue disminuyendo hasta un tiempo minimo de 100 ms, luego de lo cual el tiempo se resetea y se pone en 1 seg nuevamente ...

Bueno no mas lata, aca el codigo y abajo el link para decargar los archivos, que desde este ejemplo ya incluyen el archivo hex...
SALUDOS COMPADRES...
aca el codigo:
Codigo:
"******************************************************
" CONTADOR 0 A 9 - VARIA TIEMPO DE MUESTRA - UN BOTON
"******************************************************
$crystal = 1000000 "cristal interno 1 MHZ ATMEGA9
Ddrb = 255 "configurar puerto B como salida todos los pines en alto 1 logico
Portb = 255
Ddrc.0 = 0 " configurar pic C.0 como entrada en pull up
Portc.0 = 1
Btn Alias Pinc.0 " renombrar al pin C.0 ; boton pulsador
Dim Cuenta As Byte " variable que va a contar las pulsaciones del boton
Dim Tiempo As Word
"* g f e d c b a #
"0 1 0 0 0 0 0 0 0
"0 1 1 1 1 0 0 1 1
"0 0 1 0 0 1 0 0 2
"0 0 1 1 0 0 0 0 3
"0 0 0 1 1 0 0 1 4
"0 0 0 1 0 0 1 0 5
"0 0 0 0 0 0 1 0 6
"0 1 1 1 1 0 0 0 7
"0 0 0 0 0 0 0 0 8
"0 0 0 1 0 0 0 0 9
"0 0 0 1 1 1 1 1 -
Tiempo = 1000
Inicio:
Do
Loop Until Btn = 0 "rutina que se repite hasta que se pulsa el boton
Goto Programa "va a la rutina Programa
Programa:
Cuenta = Cuenta + 1 " aumenta el valor del contador cada vez que se pulsa el boton
If Cuenta > 10 Then " si contador mayor a diez vuelve a cero
Cuenta = 0 " pone a cero el contador
Tiempo = Tiempo - 100 " disminuye el tiempo de muestra en 100 ms
If Tiempo < 100 Then " si el tiempo de muestra es menor a 100 ms
Tiempo = 1000 "pone el tiempo de muestra nuevamente en 1 seg
End If
End If
Select Case Cuenta " sentencia CASE que selecciona el dato a enviar por el puerto B segun
Case 0 : Portb = &B01000000 " el valor de la variable cuenta (contador)
Case 1 : Portb = &B01111001
Case 2 : Portb = &B00100100
Case 3 : Portb = &B00110000
Case 4 : Portb = &B00011001
Case 5 : Portb = &B00010010
Case 6 : Portb = &B00000010
Case 7 : Portb = &B01111000
Case 8 : Portb = &B00000000
Case 9 : Portb = &B00010000
Case 10 : Portb = &B00111111
End Select
Waitms Tiempo " tiempo de espera para poder visualizar el valor en el display de 7 seg
Goto Programa " vuelve a la rutina INICIO
Aca el link de descarga:
http://miarroba.com/foros/ver.php?foroid=348538&temaid=3947920
LISTO Y NOS VAMOS CONTRA ALEMANIA, VAMOS ECUADOR SI SE PUEDE...
SALUDOS HERMANOS
Hola Amigos:
Aqui esta mi ejemplo en PBP... a diferencia de Fabian no utilizo el Case sino un vector:

Codigo:
"Programa: Juego de luces
"Giovanni Lafebre
"Cuenca - Ecuador
vec var byte [10]
pos var byte
Seg var word
vec[0]=191
vec[1]=134
vec[2]=219
vec[3]=207
vec[4]=230
vec[5]=237
vec[6]=253
vec[7]=135
vec[8]=255
vec[9]=239
TRISB=%00000000
PORTB=64
TRISA.0=%1
seg=1000
Pulsado:
if PORTA.0=0 then
goto loop
else
goto pulsado
endif
goto pulsado
loop:
for pos=0 to 9
PORTB=vec[pos]
pause seg
next pos
seg=seg-100
if seg<100 then
seg=1000
endif
goto loop
end
Hola amigos:
ahora les propongo el mismo ejemplo anterior pero con un decodificador:

Codigo:
"Giovanni Lafebre
"Cuenca - Ecuador
pos var byte
Seg var word
TRISB=%00000000
PORTB=0
TRISA.0=%1
seg=1000
Pulsado:
if PORTA.0=0 then
goto loop
else
goto pulsado
endif
goto pulsado
loop:
for pos=0 to 9
PORTB=pos
pause seg
next pos
seg=seg-100
if seg<100 then
seg=1000
endif
goto loop
end
que hubo hermanos
Pues el mismo ejemplo del compadre Lord, pero ya saben para AVR...
aca el codigo..
Codigo:
"******************************************************
"
"******************************************************
$crystal = 1000000 "cristal interno 1 MHZ ATMEGA9
Ddrb = 255 "configurar puerto B como salida todos los pines en bajo 0 logico
Portb = 0
Ddrc.0 = 0 " configurar pic C.0 como entrada en pull up
Portc.0 = 1
Btn Alias Pinc.0 " renombrar al pin C.0 ; boton pulsador
Dim Cuenta As Byte
Dim I As Byte
Dim Tiempo As Word " variable que va a contar las pulsaciones del boton
Tiempo = 1000
Inicio:
Do
Loop Until Btn = 0 "rutina que se repite hasta que se pulsa el boton
Goto Programa "va a la rutina Programa
Programa:
Cuenta = Cuenta + 1 " aumenta el valor del contador cada vez que se pulsa el boton
If Cuenta > 10 Then " si contador mayor a diez vuelve a cero
Cuenta = 0
End If
For I = 0 To 9 " rutina de muestra del numero por el puerto B
Portb = I
Waitms Tiempo
Next
Tiempo = Tiempo - 100 " decremento del tiempo de muestra en 100 ms
If Tiempo < 100 Then " si el tiempo es menor a 100 ms vuelve a iniciarse el proceso 1 seg
Tiempo = 1000
End If
Goto Programa
ACA EL LINK DE DESCARGA DE LOS ARCHIVOS:
http://miarroba.com/foros/ver.php?foroid=348538&temaid=3948016
SALUDOS COMPADRES
Hola:
Compañeros aqui les pongo un ejemplo para matriz de leds de 7x5. En la matriz se muestra unicamente la letra "A"....
Es un codigo sencillo... cualquier cosa no duden en preguntar... 

Codigo:
"Matris de Leds
"Giovanni Lafebre
"Cuenca Ecuador
TRISA=%00000000
TRISB=%00000000
loop:
PORTA=%00001
PORTB=%00000001
pause 10
PORTA=%00010
PORTB=%01110110
pause 10
PORTA=%00100
PORTB=%01110110
pause 10
PORTA=%01000
PORTB=%01110110
pause 10
PORTA=%10000
PORTB=%00000001
pause 10
goto loop
end
Hola:
Amigos ahora les pongo un ejemplo que muestra un mensaje de "HOLA" en una matriz de leds....

Codigo:
"Matris de Leds
"Giovanni Lafebre
"Cuenca Ecuador
fil var byte [20]
col var byte [5]
i var byte
j var byte
k var byte
"columnas
col[0]=%00001
col[1]=%00010
col[2]=%00100
col[3]=%01000
col[4]=%10000
"A
fil[0]=%00000001
fil[1]=%01110110
fil[2]=%01110110
fil[3]=%01110110
fil[4]=%00000001
"O
fil[5]=%01000001
fil[6]=%00111110
fil[7]=%00111110
fil[8]=%00111110
fil[9]=%01000001
"H
fil[10]=%00000000
fil[11]=%01110111
fil[12]=%01110111
fil[13]=%01110111
fil[14]=%00000000
"L
fil[15]=%00111111
fil[16]=%00111111
fil[17]=%00111111
fil[18]=%00111111
fil[19]=%00000000
TRISA=%00000
TRISB=%00000000
INICIO:
GoSub LetraH
GoSub LetraO
GoSub LetraL
GoSub LetraA
GoTo INICIO
LetraA:
For k = 0 To 20
j = 0
For i = 0 To 4
PORTA=col[j]
PORTB=fil
j = j + 1
pause 10
Next i
Next k
Return
LetraO:
For k = 0 To 20
j = 0
For i = 5 To 9
PORTA=col[j]
PORTB=fil
j = j + 1
pause 10
Next i
Next k
Return
LetraH:
For k = 0 To 20
j = 0
For i = 10 To 14
PORTA=col[j]
PORTB=fil
j = j + 1
pause 10
Next i
Next k
Return
LetraL:
For k = 0 To 20
j = 0
For i = 15 To 19
PORTA=col[j]
PORTB=fil
j = j + 1
pause 10
Next i
Next k
Return
End
El codigo esta basado en la siguiente idea:
tablas para cada letra y hago subrutinas para cada letra con dos bucles anidados, el primero es el tiempo que permanecera encendida cada letra y el segundo para ir mostrando los valores correspondientes que formaran la letra, todos los valores de las letras estan almacenadas en vectores.... seria bueno guardar todas estas tablas en una eeprom externa... pero esa es la idea, si a alguien se le ocurre algo mejor seria bueno saberlo....
Hola:
Aqui les pongo un ejemplito mas muy sencillo esta ves es un punto que recorre columna por columna, una ves que llega a la ultima incrementa una fila y el punto regresa y luego incrementa una fila y avanza y asi sucesivamente.... Recuerdo un poco que era asi la forma mediante la cual pretendia mostrar mensajes sobre un arreglo de matrices.... si a alguien se le ocurre una idea para desplegar mensajes sobre arreglos de matices.... haganlo saber... 

Codigo:
"Punto en matrices
"Giovanni Lafebre
"Cuenca - Ecuador
TRISA=0
TRISB=0
i VAR BYTE
j var byte
vec var byte [10]
vec[0]=%01111110
vec[1]=%01111101
vec[2]=%01111011
vec[3]=%01110111
vec[4]=%01101111
vec[5]=%01011111
vec[6]=%00111111
j=0
loop:
gosub ASCENDER
gosub descender
goto loop
end
ASCENDER:
for i=0 to 9
PORTA=i
PORTB=vec[j]
pause 60
next i
j=j+1
if j>=7 then
j=0
endif
return
DESCENDER:
for i=9 to 0 step-1
PORTA=i
PORTB=vec[j]
pause 60
next i
j=j+1
if j>=7 then
j=0
endif
return
Que hubo compadres...
Pues estos dias he andado un poquitin ocupado y por eso el atraso en los ejemplos que dicho sean de paso, me ayudaron bastante para aprender manejo de matrices de leds... el compadre Lord_Lafebre, me acolito en la prog para AVR..
Bueno no mas palabras, vamos con el codigo....
Este es el ejemplo de matriz de leds para mostrar la letra A..
Codigo:
"******************************************************
" MATRIZ DE LEDS - LETRA A
"******************************************************
$crystal = 1000000 "cristal interno 1 MHZ ATMEGA9
Ddrb = 255 "configurar puerto B como salida todos los pines en 1 logico
Portb = 0
Ddrc = &B11111 " configurar pic C.0 como entrada en pull up
Portc = &B00000
Inicio:
Portc = &B00001
Portb = &B00000011
Waitms 10
Portc = &B00010
Portb = &B11101101
Waitms 10
Portc = &B00100
Portb = &B11101110
Waitms 10
Portc = &B01000
Portb = &B11101101
Waitms 10
Portc = &B10000
Portb = &B00000011
Waitms 10
Goto Inicio
Aca esta el ejemplo de matriz de leds para mostrar la palabra HOLA..... Trate de hacer el codigo un poco mas corto q el del pana Lord_Lafebre, pero por si acaso tambien deje como comentarios una programacion similar a la de su ejemplo...
Listo compadres aca el codgio de este ejemplo de matriz de leds y la palabra HOLA:
Codigo:
"******************************************************
" MATRIZ DE LEDS - HOLA
"******************************************************
$crystal = 1000000 "cristal interno 1 MHZ ATMEGA9
Ddrb = 255 "configurar puerto B como salida todos los pines en 1 logico
Portb = 0
Ddrc = &B11111 " configurar pic C.0 como entrada en pull up
Portc = &B00000
"******** DECLARACION DE VARIABLES A USAR***********
Dim Col(5) As Byte "VECTOR COLUMNAS
Dim Fila(20) As Byte "VECTOR FILAS
Dim I As Byte "CONTADORES Y VARIABLES AUXILIARES
Dim J As Byte
Dim K As Byte
Dim Cont As Byte
Dim X As Byte
Dim Y As Byte
Col(1) = 1 "COLUMNA 1= 00001
Col(2) = 2 "COLUMNA 2= 00010
Col(3) = 4 "COLUMNA 3= 00100
Col(4) = 8 "COLUMNA 4= 01000
Col(5) = 16 "COLUMNA 5= 10000
"**** LETRA H *****
Fila(1) = &B0000000
Fila(2) = &B1110111
Fila(3) = &B1110111
Fila(4) = &B1110111
Fila(5) = &B0000000
"**** LETRA 0 *****
Fila(6) = &B1000001
Fila(7) = &B0111110
Fila(8) = &B0111110
Fila(9) = &B0111110
Fila(10) = &B1000001
"**** LETRA L *****
Fila(11) = &B0000000
Fila(12) = &B0111111
Fila(13) = &B0111111
Fila(14) = &B0111111
Fila(15) = &B0111111
"**** LETRA A *****
Fila(16) = &B0000001
Fila(17) = &B1101110
Fila(18) = &B1101110
Fila(19) = &B1101110
Fila(20) = &B0000001
Inicio:
For Cont = 1 To 4 " CONT DE LETRA EN ESTE CASO 4 LETRAS : "HOLA"
For K = 0 To 20 " BUCLE DE TIEMPO DE MUESTRA DE CADA LETRA
J = 1 "INDICE QUE INDICA EL INICIO DE CADA COLUMNA
Select Case Cont " SELECCIONA LOS VALORES LIMITES PARA LAS FILAS SEGUN
Case 1 : X = 1 "EL VALOR DE LA LETRA A A MOSTRAR
Y = 5
Case 2 : X = 6
Y = 10
Case 3 : X = 11
Y = 15
Case 4 : X = 16
Y = 20
End Select
For I = X To Y " BUCLE QUE MUESTRA CADA LETRA SEGUN LOS LIMITES ANTES ESTABLECIDOS
Portc = Col(j) " MOSTRAR VALORES DE COLUMNA 1 A 5 EN EL PUERTO C
Portb = Fila(i) " MOSTRAR LA LETRA POR EL PUERTO B
J = J + 1 " INCREMENTAR EL VALOR DE LA COLUMNA
Waitms 10 " TIEMPO DE ESPERA ENTRE COLUMNAS
Next
Next
Next
" ******************ACA LES COLOCO EL CODIGO SIMILAR AL HECHO POR NUESTRO PANA LORD_LAFEBRE************
" ****************** ESTAN COMO COMENTARIOS POR SI DESEAN UTILIZAR EL CODIGO HECHO POR EL *************
" Gosub Letrah
" Gosub Letrao
" Gosub Letral
" Gosub Letraa
Goto Inicio
"Letrah:
" For K = 0 To 10
" J = 1
" For I = 1 To 5
" Portc = Col(j)
" Portb = Fila(i)
" J = J + 1
" Waitms 10
" Next
" Next
"Return
"Letrao:
" For K = 0 To 10
" J = 1
" For I = 6 To 10
" Portc = Col(j)
" Portb = Fila(i)
" J = J + 1
" Waitms 10
" Next
" Next
"Return
"Letral:
" For K = 0 To 10
" J = 1
" For I = 11 To 15
" Portc = Col(j)
" Portb = Fila(i)
" J = J + 1
" Waitms 10
" Next
" Next
"Return
"Letraa:
" For K = 0 To 10
" J = 1
" For I = 16 To 20
" Portc = Col(j)
" Portb = Fila(i)
" J = J + 1
" Waitms 10
" Next
" Next
"Return
Y aca el link de descarga de estos ejemplos:
http://miarroba.com/foros/ver.php?foroid=348538&temaid=3968769
Bueno eso es todo por hoy, ya nos veremos..
SALUDOS Y UN ABRAZO DESDE ECUADOR 

Hola:
El for es un bucle que hace n veces alguna accion puede incrementarse o decrementarse.... como te dice la ayuda del PBP
Codigo:
FOR Count = Start TO End {STEP {-} Inc}
{Body}
NEXT {Count}
The FOR..NEXT loop allows programs to execute a number of statements a given
number of times using a variable as a counter. Due to its complexity and
versatility, FOR..NEXT is best described step by step:
The value of Start is assigned to the index variable, Count. Count can be a
variable of any type.
The Body is executed. The Body is optional and can be omitted (perhaps for a
delay loop).
The value of Inc is added to (or subtracted from if "-" is specified) Count. If no
STEP clause is defined, Count is incremented by one.
If Count has not passed End or overflowed the variable type, execution returns to Step 2.
If the loop needs to Count to more than 255, a word-sized variable must be used.
El IF es un condicional que ejecuta la accion que esta "dentro" de el mientras la
condicion sea verdadera, de no ser asi omitira eso y seguira a la proxima linea, el
ELSE es un caso contrario que tiene que ir con un IF, es decir, puedes poner un IF
que cumpla cierta condicion y haga algo por ejemplo que sume dos variables si los
dos valores a sumar sean mayores a cero, y el caso contrario (que sean menores)
pues no sumarlas y mostrar un mensaje de error...
Codigo:
" PRO and STD versions
IF Comp {AND/OR Comp...} THEN Label
" PRO version only
IF Comp {AND/OR Comp...} THEN
Statements...
ELSE
Statements...
ENDIF
Performs one or more comparisons. Each Comp term can relate a variable to a
constant or other variable and includes one of the comparison operators. If..Then
evaluates the comparison terms for true or false. If it evaluates to true, the
operation after the Then is executed. If it evaluates to false, the operation after
the Then is not executed. Comparisons that evaluate to 0 are considered false.
Any other value is considered true. All comparisons are unsigned. Be sure to use
parenthesis to specify the order the operations should be tested in. Otherwise,
operator precedence will determine it for you and the result may not be as
expected.
Si no te queda claro, comentamelo para explicarte mejor...
Que tal compadres...
Perdon por quedarles mal todos estos dias, pero he estado un poquitin ocupado, asi que uds. comprenderan......
Bueno en esta ocasion voy a subir un ejemplo hecho en PBP que sirva para manejar 4 matrices de 8x8 con un 16f628 y utilizando registros de desplazamiento 74HC164...
Bueno sin mas palabras aca el ejemplo...
Codigo:
CMCON = 7
fil var byte [34]
i var byte
j var byte
k var byte
T VAR BYTE
l VAR BYTE
FIL[0]=%00000001
FIL[1]=%00000000
FIL[2]=%11001100
FIL[3]=%11001100
FIL[4]=%11111111
FIL[5]=%00000001
FIL[6]=%00000000
FIL[7]=%11001100
FIL[8]=%11001100
FIL[9]=%00000000
fIL[10]=%00000001
FIL[11]=%11111111
FIL[12]=%11100111
FIL[13]=%11100111
FIL[14]=%11111111
FIL[15]=%11000011
fil[16]=%10000001
fil[17]=%00101100
fil[18]=%01000000
fil[19]=%01000000
fil[20]=%00101100
fil[21]=%10000001
fil[22]=%11000011
fil[23]=%11111110
fil[24]=%11111000
fil[25]=%11110000
fil[26]=%11001110
fil[27]=%10010000
fil[28]=%11001110
fil[29]=%11110000
fil[30]=%11111000
fil[31]=%11111110
fil[32]=%11111111
fil[33]=%11111111
TRISA=%00000
TRISB=%00000000
I=0
PORTA.1=1
INICIO:
PORTB=FIL
GOSUB RELOJ1
IF I=0 THEN
PORTA.1=0
ENDIF
I=I+1
" GOSUB RELOJ2
IF I>33 THEN
GOSUB ROTA
I=0
PORTA.1=1
ENDIF
GOTO INICIO
RELOJ1:
PORTA.0=1
PAUSEUS 700
PORTA.0=0
PAUSEuS 700
RETURN
ROTA:
i=0
T=fil[0]
FOR i=0 TO 33
fil=fil[i+1]
NEXT i
fil[33]=T
return
END
Este codigo hace desplazar un peque mensaje y un grafico de derecha a izquierda..
Espero que les sirva el ejemplito..... y que bueno que veo que empiezan a postear con dudas y con sus propios ejemplos.... asi da gusto seguir adelante...
Bueno eso es todo por hoy... proximamente subire el ejemplo que estoy desarrollando en BASCOM AVR, para manejar 6 matrices de 5x7...
Aca el link para descargar los archivos.......
http://miarroba.com/foros/ver.php?foroid=348538&temaid=4066778
holas!
el comando FOR....NEXT es un loop que hace todo lo que esté dentro determinada cantidad de veces según el valor de la variable que se use como tope y el incremento que se coloque
ejemplo:
Codigo:
For x=1 to 10 " aca le decimos que lo haga 10 veces
if boton = 1 then encender "hace esto 10 veces
next " vuelve a comenzar el for
en el ejemplo X es la variable que se usa para controlar la cantidad de veces que entra en el FOR , y realiza la operacion o las operaciones que se encuentran adentro, cuando x llegue al valor diez sale del FOR y sigue con el programa.-
si usamos FOR x = 1 to 10 va incrementando de 1 a 10 en pasos de 1
tb se pueden hacer decrementos
colocando FOR X=10 to 1 step -1; -2 ;etc indicamos de a cuanto queremos decrementar!!
esto es para Proton!! pero la logica es similar en PBP puede llegar a variar lo del decremento!! consultar el manual con respecto a la sintaxis en PBP
saludos!!
Hola:
Bueno aqui pongo mi ejemplo para pic 16F84A y LCD a 4bits.
En la pagina http://www.x-robotics.com/ en rutinas---> LCD 16x2 existe una clara explicacion del LCD, el pinout del mismo y la tabla ascci.
El comando que utiliza PBP para mostrar datos en el LCD es:
LCDOUT Item {,Item...}
Como bien lo dice la ayuda, PBP soporta displays con controlador Hitachi 44780 o compatible, adicionalmente se pueden utilizar los siguientes operadores y comandos:

Alli podemos ver todos los comandos que podemos utilizar para que el LCD haga cierta accion, ejemplo:
LCDOUT $FE,1 "Borra el display
LCDOUT $FE, $C0 " mueve el cursor al inicio de la segunda linea
Para los operadores se utiliza de la misma manera, ejemplo:
lcdout $FE,1,bin4 flag " Borra la pantalla y muestra en el display el valor de flag en un numero binario de 4 bits.
Para poder definir a que pines se quiere conectar el lcd, los bits a utilizar y demas, se debe utilizar las siguientes definiciones al inicio del programa (Se puede utilizar solo las necesarias).
" Set LCD Data port
DEFINE LCD_DREG PORTB
" Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_DBIT 4
" Set LCD Register Select port
DEFINE LCD_RSREG PORTB
" Set LCD Register Select bit
DEFINE LCD_RSBIT 1
" Set LCD Enable port
DEFINE LCD_EREG PORTB
" Set LCD Enable bit
DEFINE LCD_EBIT 0
" Set LCD bus size (4 or 8 bits)
DEFINE LCD_BITS 4
" Set number of lines on LCD
DEFINE LCD_LINES 2
" Set command delay time in us
DEFINE LCD_COMMANDUS 2000
" Set data delay time in us
DEFINE LCD_DATAUS 50
Bueno, mi circuito en Proteus es este:

Y el codigo este:
Codigo:
"Giovanni Lafebre
"Cuenca - Ecuador
"Ejemplo para LCD a modo 4 bits
Define LCD_DREG PORTB "bit de datos del LCD empezando
Define LCD_DBIT 0 "por B.0 ,B.1, B.2 y B.3
Define LCD_RSREG PORTB "bit de registro del LCD conectar
Define LCD_RSBIT 5 "en el puerto B.5
Define LCD_EREG PORTB "bit de Enable conectar en el
Define LCD_EBIT 4 "puerto B.4
inicio:
lcdout $FE,1,"HOLA TODOPIC
" "borra el lcd y muestra el mensaje.
end
Esto es lo mas basico, solamente muestra un mensaje en el lcd, nada mas por ahora.