Autor Tema: Ejemplitos de Mikrobasic y Proteus  (Leído 126536 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Ejemplitos de Mikrobasic y Proteus
« en: 06 de Septiembre de 2006, 12:36:25 »
Hola a todos!!! Bueno a peticion de los amigos aca esta el post de ejemplos, y a los moderadores sientanse libres de modificar lo que quieran,  cuando quieran para darle una mejor vista a esto.



Para cualquier tipo de duda por favor publicarlas en el post  Comenzando con Mikrobasic.



INDICE :






           1.- Prender y apagar Led en PORTA.0 (Página 1)

           2.- Intercalación del estado de los Leds ubicados en el PORTB cada 0,5 seg (Página 1)

           3.- Juego de luces, manejo de arrays y for. (Página 1)

           4.- Juego de luces 2, instruccion for. (Página 1)

           5.- Juego de luces 3, con llamadas a sub procedimientos, algo similar al manejo de las librerias. (Página 1)

           6.- Comprobacion de PORTB prendiendo Leds desde rb0 a rb7 y luego los apaga. (Página 1)

           7.- El clasico del auto fantastico usando la instruccion for. (Página 1)

           8.- Contador 0 a 9 haciendo uso de subprocedure (7seg)(Página 1)

           9.- Contador 0 a 9 ascendente o descendente según el valor del PORTA.0 (7seg) (Página 1)

          10.-Contador 0 a 9 ascendente (RAO) o descendente (RA1) (7seg) ( Página 1)

          11.-Contador 0 a 9 ascendente (RAO) o descendente (RA1) usando comando button (7seg) (Página 1)

          12.- "Hola amigos TODOPIC" (LCD) (Página 1)

          13.- "Hola TODOPIC saludos" (LCD) (Página 1)

          14.- Desplazando el Mensaje. (LCD) (Página 1)

          15.- Lectura simple de un ADC (LCD) (Página 1)

          16.- Muestrar caracteres ASCII  (LCD) (Página 1)



          Y las  Miniguias en Video y Español  :-/

             Como Crear el Proyecto
           
             Miniguia Primera Parte

             Miniguia Segunda Parte

             Miniguia Tercera Parte

           Tambien disponibles en el fabuloso mundo de EL REBUJITO!!!


GRACIAS SAMSHIEL POR EL INDICE :-/ :-/








Esperamos dar a los que empiezen en basic la misma ilusion que tenemos los que comenzamos este post  :P

Prender y apagar Led en PORTA.0 de un 16F84A

Código: FreeBasic
  1.  
  2. program BlinkMKB
  3.  
  4. TRISA = 0
  5.  
  6. MAIN:
  7.  PORTA.0 = 1                            ' AUN NO ENCUENTRO COMO PONER ALIAS SOLO EL CLASICO SYMBOL
  8.  DELAY_MS(500)                    ' AQUI USAMOS EN LUGAR DE PAUSE EN PBP, LA INSTRUCCION DELAY_MS Y OBVIAMENTE ES MILISEGUNDOS
  9.  PORTA.0 = 0
  10.  DELAY_MS(500)
  11. GOTO MAIN
  12. END.                                      ' POR NO PONER ESE PUNTO NO ME COMPILO LA PRIMERA VEZ
  13.  
  14.  


« Última modificación: 25 de Octubre de 2006, 19:12:26 por navaismo »
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #1 en: 06 de Septiembre de 2006, 12:43:21 »
Ahora el Uso del LCD personalizando los puertos que queremos usar en este caso PORTA y PORTB, para dejarlo mas o menos como si fuese el PBP.

Los archivos generados y  la conexion del pic al lcd las dejo en el archivo rar. Notese que es una simulacion basica, para hacer el circuito fisicamente habra que cuidar los capacitores ceramicos y la resistencia que va del pic al LCD


Código: FreeBasic
  1. program LCD
  2.  
  3. 'CONFIGURAMOS COMO VAMOS A SACAR LOS DATOS
  4. ' D7 = PORTA.3
  5. ' D6 = PORTA.2
  6. ' D5 = PORTA.1
  7. ' RS = PORTB.0
  8. ' RW = PORTB.1
  9. ' EN = PORTB.2
  10.  
  11. main:
  12.   Lcd_Config(PORTA,3,2,1,0,PORTB,0,1,2)
  13.   Lcd_Cmd(LCD_CLEAR)
  14.   Lcd_Cmd(LCD_CURSOR_OFF)
  15.   Lcd_Out(1,1,"hola amigos")
  16.   Lcd_Out(2,1," todopic  " )
  17.   DELAY_MS (1000)
  18. GOTO main
  19.  
  20.  





Facil no?


« Última modificación: 06 de Septiembre de 2006, 13:26:02 por navaismo »
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #2 en: 06 de Septiembre de 2006, 13:05:24 »
Barriendo el Mensaje sobre el LCD


Bueno seguimos con lo bassico, ahora vamos a barrer el mensaje anterior por el LCD

Código: FreeBasic
  1. program LCD
  2.  
  3. 'CONFIGURAMOS COMO VAMOS A SACAR LOS DATOS
  4. ' D7 = PORTA.3
  5. ' D6 = PORTA.2
  6. ' D5 = PORTA.1
  7. ' RS = PORTB.0
  8. ' RW = PORTB.1
  9. ' EN = PORTB.2
  10.  
  11. DIM i AS byte
  12.  
  13. main:
  14.   Lcd_Config(PORTA,3,2,1,0,PORTB,0,1,2)
  15.   Lcd_Cmd(LCD_CLEAR)                   ' limpiamos pantalla
  16.   Lcd_Cmd(LCD_CURSOR_OFF)              ' apagamos el cursor
  17.   FOR i = 0 TO 26                      ' comenzamos con el barrido del mensaje
  18.   Lcd_Cmd(Lcd_Shift_Right)
  19.   Lcd_Out(1,16,"hola amigos")
  20.   Lcd_Out(2,16," todopic  " )
  21.   delay_ms(300)
  22.   NEXT i                               ' pausa para volverlo hacer
  23.  delay_ms(1500)
  24. GOTO main
  25.  
  26.  


El diagrama Es el mismo que viene en el archivo Rar del post anterior. Para barrerlo a la inversa  usariamos en lugar de Lcd_Cmd(Lcd_Shift_Right). esta linea Lcd_Cmd(Lcd_Shift_Left)

Ok los dejo. ya se me hace tarde.

"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #3 en: 06 de Septiembre de 2006, 13:44:17 »
Hola

Bueno mi ejemplito es mucho mas sencillo que los anteriores, pero como apenas ando arrancando aun me cuesta un poco mientras me acostumbro :), para mi es practicamente un lenguaje nuevo, despues de tanto assembler  :).

bueno al grano, el ejemplo consiste en la intercalación del estado de los leds ubicados en el puertob, por medio de la instrucción not el cual permite una negación lógica de los valores del puerto. el parapadeo se hace cada 0.5 segundos.

aqui el código:
Código: Visual Basic
  1. program luces
  2.  
  3. main:
  4.  
  5.      TRISB=0  'puerto B como salida
  6.     PORTB=0
  7.  
  8.  turn:
  9.      DELAY_MS (500)
  10.      PORTB = NOT PORTB   'invierte el valor de los bits del puerto
  11.     GOTO turn
  12. end.

y aqui el esquema




ups. olvide agregar los archivos  :D :D
« Última modificación: 06 de Septiembre de 2006, 13:51:02 por PAOLA09 »

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #4 en: 06 de Septiembre de 2006, 15:52:20 »
Pues siguiendo con mis pequeños ejemplitos, ahora agrego el de juego de luces para mostrar el manejo de los arrays y del for mirandolo a incremento o decremento. Espero les sea útil  :).

Código:

Código: Visual Basic
  1. program juego_de_luces
  2. dim luces as byte [4]
  3. dim i as byte
  4. luces[0] = %10000001
  5. luces[1] = %01000010
  6. luces[2] = %00100100
  7. luces[3] = %00011000
  8. main:
  9.  
  10.      TRISB=0
  11.      P:   i=0
  12.           for i=0 to 3
  13.           PORTB= luces [i]
  14.           delay_ms (100)    'retardo de .1seg
  15.          next i
  16.           for i=2 to 0 step -1
  17.           PORTB= luces [i]
  18.           delay_ms (100)
  19.           next i
  20.       goto P
  21. end.

el esquema que aplique es el mismo que use en el primer ejemplo.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #5 en: 06 de Septiembre de 2006, 17:09:09 »
Lectura simple de un ADC en el LCD

Bueno aqui otro programilla, este si me costo trabajo. :D :D


Código: FreeBasic
  1.  
  2. program adcMKB
  3.  
  4. DIM tiempo  AS word             ' variable de almacenamiento del adc
  5.     tiempot AS STRING[5]        ' variable para poder ver en el lcd el resultado
  6.  
  7. main:                           ' canal RA0 como analogico
  8.  ADCON1 = 142                   ' canal de entrada
  9.  TRISA.0 = 1
  10.  
  11.  Lcd_Config(PORTD,3,2,1,0,PORTB,0,1,2)         'configuracion lcd
  12.  Lcd_Cmd(LCD_CURSOR_OFF)
  13.  Lcd_Cmd(LCD_CLEAR)
  14.                                                 ' lectura del adc RA0
  15.  tiempo = adc_read(0)                           ' Lo pasamos a cadena para LCD
  16.  wordtostr(tiempo,tiempot)
  17.                                                 ' aqui lo desplegamos en el lcd
  18.  lcd_out(1,3,tiempot)
  19.  delay_ms(1000)
  20.  
  21. GOTO main
  22.  
  23.  


"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #6 en: 06 de Septiembre de 2006, 17:58:58 »
Bueno otro de luces distinto al PAOLA09

Código: Visual Basic
  1. program luz1
  2.  
  3. DIM X AS BYTE
  4. TRISB = 0
  5.  
  6. MAIN:
  7. P:   X=0
  8.      FOR X=0 TO 7
  9.      PORTB.X=1
  10.      DELAY_MS(500)
  11.      NEXT X
  12.  
  13.      FOR X=7 TO 0 STEP -1
  14.      PORTB.X=0
  15.      DELAY_MS(500)
  16.      NEXT X
  17.  
  18.      
  19. GOTO P
  20. END.
« Última modificación: 09 de Septiembre de 2006, 09:08:33 por samshiel_pic »

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #7 en: 06 de Septiembre de 2006, 18:04:02 »
Bueno continuando con los ejemplos, ahora muestro otro sencillo para ejemplizar el uso de los modulos que nos permiten por medio de un programa principal, hacer un llamado a sub procedimientos, algo similar al manejo de las librerias.

en este caso según el estado de un pin en el puerto A se realiza la rutina de parpadeo de todo el puerto B o el juego de luces.

código principal:
Código: Visual Basic
  1. program mezcla_luces
  2.  
  3.  include "luces"            'se asignan los sub procedimientos a aplicar
  4. include "juego_de_luces"
  5. main:
  6.      TRISA=1
  7.      TRISB=0
  8.      PORTB=0
  9.  
  10.  G:  if PORTA=0 then
  11.      turn            'llamado de sub procedimiento
  12.     else
  13.      play
  14.      end if
  15.      goto G
  16. end.

código sub procedimiento parpadeo puerto B:
Código: Visual Basic
  1. module luces
  2.   sub procedure turn ()
  3.  turn:
  4.      PORTB = NOT PORTB   'invierte el valor de los bits del puerto
  5.     DELAY_MS (500)
  6. end sub
  7. end.
  8.  
  9.  

código subprocedimiento juego de luces:

Código: Visual Basic
  1. module juego_de_luces
  2.  
  3. sub procedure play ()
  4. dim luces as byte [4]
  5. dim i as byte
  6. luces[0] = %10000001
  7. luces[1] = %01000010
  8. luces[2] = %00100100
  9. luces[3] = %00011000
  10.  
  11.      P:   i=0
  12.           for i=0 to 3
  13.           PORTB= luces [i]
  14.           delay_ms (100)    'retardo de .1seg
  15.          next i
  16.           for i=2 to 0 step -1
  17.           PORTB= luces [i]
  18.           delay_ms (100)
  19.           next i
  20.           PORTB=0
  21.  end sub
  22. end.

el esquema varia en un unico detalle y es el agregar un switch en la entrada del puerto a.

« Última modificación: 06 de Septiembre de 2006, 18:34:48 por PAOLA09 »

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #8 en: 06 de Septiembre de 2006, 20:52:50 »
En este caso mi finalidad es mostrar el uso de los subprocedure dentro de un solo programa haciendo las veces de subrutina, es importante que las variables que se vayan a usar para el procedimiento sean asignadas en el mismo , asi sean globales, para eso aproveche la anidación de sub procedimientos.

el programa se encarga de hacer un conteo de 0 a9 ya sea ascendente o descendente según el estado del puertoA.

aqui el código:

Código: Visual Basic
  1. program contadores
  2.  
  3.  
  4. dim i as byte
  5. dim cont as byte [10]
  6.  
  7. sub procedure asgcont
  8. cont[0]=%00111111 ' el valor correspondiente al 0 para el display
  9. cont[1]=%00000110
  10. cont[2]=%01011011
  11. cont[3]=%01001111
  12. cont[4]=%01100110
  13. cont[5]=%01101101
  14. cont[6]=%01111100
  15. cont[7]=%00000111
  16. cont[8]=%01111111
  17. cont[9]=%01100111
  18. end sub
  19.  
  20. sub procedure ascendente
  21. asgcont
  22. P:   i=0
  23.           for i = 0 to 9
  24.             PORTB = cont[i]
  25.             delay_ms (300)
  26.           next i
  27. end sub
  28.  
  29. sub procedure descendente
  30. asgcont
  31. G:  for i = 9 to 0 step -1
  32.           PORTB = cont[i]
  33.            delay_ms (300)
  34.           next i
  35. end sub
  36.  
  37. main:
  38.      TRISA=1
  39.      TRISB=0
  40. C:   if PORTA=0 then
  41.      ascendente
  42.      else
  43.      descendente
  44.      end if
  45.      goto C
  46.  
  47. end.
                                     
« Última modificación: 06 de Septiembre de 2006, 21:18:30 por PAOLA09 »

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2120
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #9 en: 07 de Septiembre de 2006, 19:44:15 »
Estoy  :shock: :shock:

Increiblemente facil, solo mirando los ejemplos que han posteado he podido hacer estos dos programas.

Led 1 .- va prendiendo desde rb0 a rb7 y luego los apaga.
Led 2 .- el clasico del auto fantastico usando for

Código: Visual Basic
  1. program LED1
  2.  
  3. TRISB = 0
  4. PORTB = 0
  5.  
  6. MAIN:
  7.  PORTB.0 = 1
  8.  DELAY_MS(500)
  9.  PORTB.1 = 1
  10.  DELAY_MS(500)
  11.  PORTB.2 = 1
  12.  DELAY_MS(500)
  13.  PORTB.3 = 1
  14.  DELAY_MS(500)
  15.  PORTB.4 = 1
  16.  DELAY_MS(500)
  17.  PORTB.5 = 1
  18.  DELAY_MS(500)
  19.  PORTB.6 = 1
  20.  DELAY_MS(500)
  21.  PORTB.7 = 1
  22.  DELAY_MS(500)
  23.  PORTB.0 = 0
  24.  DELAY_MS(500)
  25.  PORTB.1 = 0
  26.  DELAY_MS(500)
  27.  PORTB.2 = 0
  28.  DELAY_MS(500)
  29.  PORTB.3 = 0
  30.  DELAY_MS(500)
  31.  PORTB.4 = 0
  32.  DELAY_MS(500)
  33.  PORTB.5 = 0
  34.  DELAY_MS(500)
  35.  PORTB.6 = 0
  36.  DELAY_MS(500)
  37.  PORTB.7 = 0
  38.  DELAY_MS(500)
  39. GOTO MAIN
  40. END.


Código: Visual Basic
  1. program LED2
  2.  
  3. DIM     I AS BYTE
  4.  
  5. TRISB = 0
  6. PORTB = 0
  7.  
  8. MAIN:
  9.  I = 0
  10.    FOR I = 0 TO 7
  11.      PORTB = 0
  12.      PORTB.I = 1
  13.      DELAY_MS (200)
  14.      NEXT I
  15.  I = 7
  16.    FOR I = 7 TO 0 STEP -1
  17.      PORTB = 0
  18.      PORTB.I = 1
  19.      DELAY_MS (200)
  20.      NEXT I
  21. GOTO MAIN
  22. END.



Creo que no es necesario comentarlo pues no he usado nada nuevo.

Ya me empieza a gustar esto, cuidense que ya los alcanzo.  :mrgreen: :mrgreen:
« Última modificación: 07 de Septiembre de 2006, 19:46:21 por veguepic »
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2120
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #10 en: 08 de Septiembre de 2006, 00:30:08 »
Este es un mensaje que se va desplazando por la pantalla del LCD.

Código: Visual Basic
  1. program LCD2
  2.  
  3. DIM  i as byte
  4.  
  5. main:
  6.   Lcd_Config(PORTB,7,6,5,4,PORTB,0,1,2)
  7.  
  8. Repetir:
  9.   i = 1
  10.   For i = 1 to 16
  11.     Lcd_Cmd(LCD_CLEAR)
  12.     Lcd_Cmd(LCD_CURSOR_OFF)
  13.     Lcd_Out(1,i,"Hola Todopic")
  14.     Lcd_Out(2,i,"Saludos" )
  15.     DELAY_MS (100)
  16.     next i
  17. goto Repetir
  18. end.
  19.  

“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2120
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #11 en: 08 de Septiembre de 2006, 13:25:41 »
En este ejemplo se muestran los caracteres ASCII mas usados, usando for

Código: Visual Basic
  1. program LCD3                           'mostrar caracteres ASCII
  2.  
  3. dim i,n,m as byte                      'variables
  4.  
  5. main:
  6.   Lcd_Config(PORTB,3,2,1,0,PORTA,0,1,2)
  7.  
  8. empezar:
  9.   i = 33                               'inicio caracteres ASCII visibles
  10.  
  11. repetir:
  12.   if i < 128 then                      'condicional ultimo caracter a mostrar
  13.    Lcd_Cmd(LCD_CLEAR)
  14.     Lcd_Cmd(LCD_CURSOR_OFF)
  15.     n = 1                              'inicializa n a 1
  16.    m = 1                              'inicializa m a 1
  17.    for m = 1 to 2                     'bucle de las filas
  18.      for n =1 to 16                   'bucle de las columnas
  19.        Lcd_Chr(m, n, i)               'muestra caracter i fila m columna n
  20.        DELAY_MS (50)                  'demora 50 milisegundos
  21.        i = i + 1                      'incremento i
  22.      next n                           'incremento n bucle for
  23.    next m                             'incremento m bucle for
  24.   else                                'caso i > = 128 va a empezar
  25.    goto empezar
  26.   end if
  27. goto repetir
  28. end.
  29.  



« Última modificación: 08 de Septiembre de 2006, 14:03:03 por veguepic »
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #12 en: 08 de Septiembre de 2006, 17:09:04 »
Bueno contunuando con mis contadores, vuelvo a implementar el contador ascendente o descendente según el valor del Puerto A0 , en este caso quise mostrar como es el uso de las interrupción usando la interrupcion de TMR0 y a la vez implemento el uso de los sub procedimientos.

el esquema es el mismo que use en el ejemplo del contador anterior.

código:
Código: Visual Basic
  1. program cont2
  2. dim cont as byte [10]
  3. dim a    as byte
  4. dim b as byte
  5. sub procedure interrupt 'cada 3 veces que se ejecute esta interrupción se procede al incremento
  6. inc (b)
  7.   if b = 3 then
  8.      b= 0
  9.         if PORTA = 0 then
  10.            dec (a)
  11.             if a = -1 then
  12.               a = 9
  13.             end if
  14.         else
  15.           inc (a)
  16.           if a = 10 then
  17.              a = 0
  18.           end if
  19.         end if
  20.   end if
  21. INTCON = $20          ' Set T0IE, claer T0IF
  22. end sub
  23.  
  24. sub procedure asgcont
  25. cont[0]=%00111111 ' el valor correspondiente al 0 para el display
  26. cont[1]=%00000110
  27. cont[2]=%01011011
  28. cont[3]=%01001111
  29. cont[4]=%01100110
  30. cont[5]=%01101101
  31. cont[6]=%01111100
  32. cont[7]=%00000111
  33. cont[8]=%01111111
  34. cont[9]=%01100111
  35. end sub
  36.  
  37. main:
  38.   OPTION_REG = $87       ' Assign prescaler to TMR0 escala 1:256
  39.  TRISB  =   0
  40.   PORTB  =   1
  41.   TMR0   =   0
  42.   INTCON = $A0           ' Enable TMRO interrupt
  43.  a = 0
  44.   asgcont
  45.  
  46. P: PORTB = cont[a]
  47.    goto  P
  48. end.

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #13 en: 10 de Septiembre de 2006, 08:11:36 »
Hola ahora otro ejemplo de uso del display. Su funcionamiento es el siguiente:

  • Si pulsas RA0 se suma un digito en el display
  • Si pulsas RA1 se resta un digito
  • Ademas tiene un antirrebote para evitar que cuando pulses algun boton se sumen o resten varios numeros. Toda las operaciones de suma y resta la realiza en el flanco de bajada de 1 a 0.


Código: Visual Basic
  1. program ASCENDESCN
  2.  
  3. dim x as byte
  4. dim cont as byte [10]
  5.  
  6. sub procedure asgcont
  7. cont[0]=%00111111 ' VALORES DEL 0 AL 9 PARA EL DISPLAY
  8. cont[1]=%00000110
  9. cont[2]=%01011011
  10. cont[3]=%01001111
  11. cont[4]=%01100110
  12. cont[5]=%01101101
  13. cont[6]=%01111100
  14. cont[7]=%00000111
  15. cont[8]=%01111111
  16. cont[9]=%01100111
  17. end sub
  18.  
  19. main:
  20. asgcont
  21.      TRISA=3     'RA0 Y RA1 COMO ENTRADAS
  22.     TRISB=0     'PORTB COMO SALIDAS
  23.     x=0         ' X=0 POR QUE VAMOS A EMPEZAR EN EL CERO
  24.     PORTB = cont[x]  'PONGO EL CERO EN EL DISPLAY
  25. MIRO:if PORTA.0=1 then  'SI PULSAS RA0
  26.        delay_ms(50)  'ESPERA 50ms PARA EVITAR LOS REBOTES
  27.        if PORTA.0=0 then ' Y AHORA ESPERA EL FLANCO DE SUBIDA
  28.           x=x+1    'PARA SUMAR X+1
  29.           if x=10 then    'SI X ES 10
  30.            x=0     'X VALE 0
  31.           end if
  32.         end if
  33.      end if
  34.      
  35.      if PORTA.1=1 then   'IGUAL QUE ARRIBA PERO CON RA1
  36.        delay_ms(50)
  37.         if PORTA.1=0 then
  38.           x=x-1
  39.           if x=-1 then
  40.              x=9
  41.           end if
  42.         end if
  43.      end if
  44.      PORTB = cont[x]'Y DESPUES DE TODO MUESTRO EL NUMERO
  45.     goto MIRO 'VUELTA A MIRAR BOTONES
  46. END.


Espero que todo este bien esplicadito. Pues asi todo bien comentado es como uno se da cuenta bien de las cosas.

« Última modificación: 10 de Septiembre de 2006, 08:52:35 por samshiel_pic »

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Ejemplitos de Mikrobasic y Proteus
« Respuesta #14 en: 10 de Septiembre de 2006, 10:54:00 »
Ahora usando la libreria button hacemos el ejercicio anterior .

La funcion de esta libreria es la siguiente: elimina la influencia del contacto que oscila sobre presionar un botón (debouncing). El puerto del parámetro especifica la localización del botón; el perno del parámetro es el perno número en puerto señalado y va a partir de la 0..7; el tiempo del parámetro es un período del debounce en milisegundos; el active_state del parámetro puede ser 0 o 1, y se determina si el botón es activo sobre cero lógico o uno lógico.

Osea que Button(PORTA, X, Y, Z)

  • X es el numero del puerto, en este caso RA0....7.
  • Y es el tiempo en milisengundos que tarda en entrar despues de aber pulsado el boton.
  • Z es el estado del puerto, si es 1 o 0.

Código: Visual Basic
  1. program pruebacnlibrarbutton
  2. dim a as byte
  3. dim x as byte
  4. dim y as byte
  5.  
  6. dim cont as byte [10]
  7.  
  8. sub procedure asgcont
  9. cont[0]=%00111111 ' el valor correspondiente al 0 para el display
  10. cont[1]=%00000110
  11. cont[2]=%01011011
  12. cont[3]=%01001111
  13. cont[4]=%01100110
  14. cont[5]=%01101101
  15. cont[6]=%01111100
  16. cont[7]=%00000111
  17. cont[8]=%01111111
  18. cont[9]=%01100111
  19. end sub
  20.  
  21. MAIN:
  22. asgcont
  23.    TRISA=3     'RA0 Y RA1 COMO ENTRADAS
  24.   TRISB=0     'PORTB COMO SALIDAS
  25.   x=0         ' X=0 POR QUE VAMOS A EMPEZAR EN EL CERO
  26.   PORTB = cont[x]  'PONGO EL CERO EN EL DISPLAY
  27.  
  28. p: if Button(PORTA,0, 1, 1) then
  29.     a = 255
  30.     end if
  31.     if a and Button(PORTA, 0, 5, 0) then
  32.      x=x+1    'PARA SUMAR X+1
  33.     if x=10 then    'SI X ES 10
  34.        x=0
  35.     end if
  36.     a = 0
  37.    end if
  38.  
  39.    if Button(PORTA, 1, 1, 1) then
  40.    y = 255
  41.    end if
  42.    if y and Button(PORTA, 1, 5, 0) then
  43.       x=x-1
  44.       if x=-1 then
  45.          x=9
  46.       end if
  47.    y = 0
  48.    end if
  49.    PORTB = cont[x]
  50.    goto p
  51. end.


Si alguien sabe otra forma mas sencilla de utilizar el comando button por favor me gustaria que posteara un  ejemplo.
El esquema es el mismo al anterior.