TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: alekspm en 17 de Enero de 2010, 00:06:39
-
Hola a todos los pICteros, si les sirve de ayuda, tengo algunos programas en PIC Basic para compartir, como son...
Interfaz con LCD para F84, F73 y F877, Conversor analogico a digital, Comunicación serial a hiperterminal y algunos mas...
Preguntame, tal vez lo tengo...
Adios....
-
Hola.
Pues seria bueno que los compartieras con el foro ;-)
Saludos
-
Hola:
estoy empezando la porgramacion en pic basic, creo que me serviran mucho, trabajo con el f877. me los puedes porfavor.
-
me uno a Mlo y gracias por la iniciativa :lol:
-
hola amigo, de casualidad no tienes uno de temperatura
usando un 16f877?
tengo el pic 16f877
sensor lm35
lcd 2x20
-
Hola. Mi estimados master de PBP.
Estoy trabajando en un proyecto de contador de monedas, me llega una señal digital al puerto A.0 al A.3 y con eso determino que moneda es y la cuento
Escribo para pedir ayuda. ya estoy a punto de tirar la toalla y renunciar a los PIC.
El problema que tengo es que no puedo leer la señal de entrada de PIC16F876A en el Puerto A.0 al A.3 y con esta señal. Tengo entendido que el puerto A tiene aplicaciones analógicas y que lo tengo que poner a digital, y que tengo que definir si es de entrada o salida. Estoy seguro que en esta parte esta mi error porque esta misma practica ya la logre pero con el puerto B del mismo PIC recibiendo las señales en el B.0 al B.3 y todo camino OK
Tengo un Oscilar de 4Mhz Externo y estoy programando con un MasterPorg.
Ya cheque con un Pic16f870 y es lo mismo
Anexo mi programa en MicroPICBASIC. Saludos y muchas gracias de antemano por la ayuda que me puedan brindar.
TRISA = 1 ;defino el puerto A como entradas (0= Salida, 1=Entrada)
ADCON1 = 7 ; Apaga los comparadores de voltaje
@ device XT_OSC
@ device WDT_OFF
@ device PWRT_ON
define osc 4
uno var porta.0 ; chanel 1
dos var porta.1 ; chanel 3
cinco var porta.2 ; chanel 4
diez var porta.3 ; chanel 6
x var BYTE
define LCD_DREG PORTc ;define los bit de Datos para el LDC en el Pto C
define LCD_DBIT 4 ;empesando por el C4 al C7
define LCD_RSREG PORTc ;define el bit de Registro del LCD en el Pto C.2
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTc ;define el bit de Enable del LCD en el Pto C.3
DEFINE LCD_EBIT 3
Inicio:
clear
lcdout $FE, 1
x = 0
display:
lcdout $FE,1
lcdout $FE, $80, "CUENTA MONEDAS"
pause 50
espera:
if uno = 0 then goto cuentauno
if dos = 0 then goto cuentados
if cinco = 0 then goto cuentacinco
if diez = 0 then goto cuentadiez
goto espera
cuentauno:
gosub norebote
x = x + 1
gosub imprime
goto espera
cuentados:
gosub norebote
x = x + 2
gosub imprime
goto espera
cuentacinco:
gosub norebote
x = x + 5
gosub imprime
goto espera
cuentadiez:
gosub norebote
x = x + 10
gosub imprime
goto espera
imprime:
pause 25
lcdout,$FE, $C1
lcdout, "$ ", dec x, ".00 pesos"
return
END
norebote:
if uno = 0 then norebote
if dos = 0 then norebote
if cinco = 0 then norebote
if diez = 0 then norebote
pause 25
return
-
Alldigital ;Todas las versiones de lenguaje Basic suelen permitirla
TRISA = 1 ;defino el puerto A como entradas (0= Salida, 1=Entrada)
ADCON1 = 7 ; Apaga los comparadores de voltaje
De todas formas lo que te ocurre es muy frecuente con el puerto A.
-
Gracias por contestar a mi solicitud de ayuda
mmmm no entiendo muy bien lo de ALLDIGITAL.
Es una instrucción y la sustituyo por TRISA y ADCON1 ????
Fíjate que con el puerto A si puedo controlar un Display LCD 2x16, pero si lo quiero usar para leer es donde no camina.
Alldigital ;Todas las versiones de lenguaje Basic suelen permitirla
TRISA = 1 ;defino el puerto A como entradas (0= Salida, 1=Entrada)
ADCON1 = 7 ; Apaga los comparadores de voltaje
De todas formas lo que te ocurre es muy frecuente con el puerto A.
-
Tienes razón, no me he explicado bien por las prisas.
Tabla de configuración del puerto A y E:
http://www.todopic.com.ar/foros/index.php?topic=14917.msg172500#msg172500
CMCON = 0x07 'Modulo comparador a Off.
-
Tienes razón, no me he explicado bien por las prisas.
Tabla de configuración del puerto A y E:
http://www.todopic.com.ar/foros/index.php?topic=14917.msg172500#msg172500
CMCON = 0x07 'Modulo comparador a Off.
OK Amigo muchas gracias. excelente ya camino.
Lo único que cambie del código ya publicado es la siguiente linea.
TRISA = 255
-
Hola estimados Master de PBP en Todopic
Siempre en todos los manuales y consejos de maestros, y aqui mismo en el foro he leido lo siguiente: Tratar de evitar lo mas posibles la intruccion de GOTO y sustituirla por GOSUB.
Ahora mi gran duda y pregunta es la siguiente, puedo realizar un GOSUB dentro de otro GUSUB. Por ejemplo anexo una parte de mi programa para explicarme mejor y puedan indicarme si es correcta la logica de mi programa.
espera:
if uno = 0 then gosub cuentauno ;lo mando a subrutina cuentauno
if dos = 0 then gosub cuentados ;lo mando a subrutina cuentados
goto espera ;regreso a espera
cuentauno: ;subrutina cuentauno
gosub norebote ;lo mando a subrutina norebote
x = x + 1 ;incremento variable x
gosub imprime ;lo mando a subrutina imprimir en LCD
return ;regreso a espera
cuentados:
gosub norebote
x = x + 2
gosub imprime
return
imprime:
if r = 1 then goto imprimer
pause 10
LCDOUT, $FE, 1
LCDOUT, $FE, $82, "RECIBIDOS"
R = 1
imprimer:
pause 10
lcdout,$FE, $C1
lcdout, "$", dec x, ".00 pesos"
return
norebote: ;subrutina norebote
if uno = 0 then norebote
if dos = 0 then norebote
pause 25
return
END
-
En principio si, la cantidad de gosub permitidos solo dependen de la gestión que realice el compilador en cuestión, si utiliza el método tradicional solo podrá manejar un máximo de 8 gosub seguidos porque estos micros tienen una pila de 8 niveles. De todas maneras recuerda que por tantos gosub tiene que haber la misma cantidad de return, si olvidas alguno el sistema tarde o temprano hará cosas raras.
De todas formas a nivel de programación no es muy correcto usar más de dos niveles por la complejidad del código resultante y por el riesgo de inestabilidad.
Ejemplo de uso correcto del gosub:
main:
gosub pepe
goto main
----------------
pepe:
gosub pepe1
gosub pepe2
gosub pepe3
gosub pepe4
return
pepe1:
algo
return
pepe2:
algo
return
pepe3:
algo
return
pepe4:
algo
return
En este ejemplo nunca ocupas más de dos niveles y el resto queda para uso propio del sistema que los necesita para su autogestión.
-
Hola amigo, oyes disculpa mira hise un proyecto de sensor de temperatura, usando un pic 16f877a, sensor lm35, y lcd 2x20, mira el detalle es que mi lcd no detecta nada, si me prende la lcd en color verde, pero no me saca ni un resultado, me gustaria saber si sabes el por que me sucede esto, esto es para un proyecto de la universidad
-
Hola amigo, oyes disculpa mira hise un proyecto de sensor de temperatura, usando un pic 16f877a, sensor lm35, y lcd 2x20, mira el detalle es que mi lcd no detecta nada, si me prende la lcd en color verde, pero no me saca ni un resultado, me gustaria saber si sabes el por que me sucede esto, esto es para un proyecto de la universidad
Para este tipo de consulta lo más normal es abrir un tema nuevo, pero de todas formas para que te puedan ayudar deberías indicar que lenguaje estás utilizando, un esquema del montaje para ver si está erróneo y la configuración del lcd.